И в моих классах Java и в книгах мы использовали в них размечающий GUI с кодом, в большой степени вовлек конструктора JFrame. Стандартная техника в книгах, кажется, чтобы инициализировать все компоненты и добавить их к JFrame в конструкторе и добавить анонимные обработчики событий для обработки событий при необходимости, и это - то, что было защищено в моем классе.
Это, кажется, довольно легко понять, и легкий работать с при создании очень простого GUI, но, кажется, быстро становится ужасным и громоздким при создании чего-либо кроме очень простого gui. Вот маленький пример кода того, что я описываю:
public class FooFrame extends JFrame {
JLabel inputLabel;
JTextField inputField;
JButton fooBtn;
JPanel fooPanel;
public FooFrame() {
super("Foo");
fooPanel = new JPanel();
fooPanel.setLayout(new FlowLayout());
inputLabel = new JLabel("Input stuff");
fooPanel.add(inputLabel);
inputField = new JTextField(20);
fooPanel.add(inputField);
fooBtn = new JButton("Do Foo");
fooBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//handle event
}
});
fooPanel.add(fooBtn);
add(fooPanel, BorderLayout.CENTER);
}
}
Является этот тип использования конструктора лучшим способом кодировать приложение Swing в Java? Если так, какие методы я могу использовать, чтобы удостовериться, что этот тип конструктора организован и удобен в сопровождении? В противном случае, что рекомендуемый путь состоит в том, чтобы приблизиться к соединению JFrame в Java?
К сожалению, существует много плохих книг. И много плохого кода.
Вы не должны злоупотреблять наследованием, используя его там, где это не нужно. (Хорошо, есть идиома двойной скобки, которая является полным злоупотреблением наследованием.) Это применимо к JFrame
, JPanel
, Thread
и практически ко всему, кроме java.lang.Object
.
Также было бы очень хорошей идеей сделать поля частными
и, где возможно, окончательными
. Оказывается, ссылки на компоненты обычно не нужно хранить в полях, по крайней мере, не так.
Когда вы получаете более сложный пользовательский интерфейс, я рекомендую вам отделить разные JPanel от JFrame, чтобы они стали «модулями» или «строительными блоками» вашего пользовательского интерфейса.
UIApplication. Как вы только что сказали, похоже, это метод, которому учат в книгах. То, что я делал раньше, чтобы иметь хотя бы небольшой обзор различных аспектов, - это отделить ui-views от ui-controllers. В вашем случае это будет означать, что вы можете написать отдельные классы для обработки событий. Еще один полезный прием - использовать частные методы для разделения различных частей вашего пользовательского интерфейса. Другими словами, и в этом случае могут быть полезны общие методы рефакторинга.