Лучшая практика с конструкторами JFrame?

И в моих классах 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?

7
задан David Barry 26 April 2010 в 21:07
поделиться

3 ответа

К сожалению, существует много плохих книг. И много плохого кода.

Вы не должны злоупотреблять наследованием, используя его там, где это не нужно. (Хорошо, есть идиома двойной скобки, которая является полным злоупотреблением наследованием.) Это применимо к JFrame , JPanel , Thread и практически ко всему, кроме java.lang.Object .

Также было бы очень хорошей идеей сделать поля частными и, где возможно, окончательными . Оказывается, ссылки на компоненты обычно не нужно хранить в полях, по крайней мере, не так.

1
ответ дан 7 December 2019 в 12:17
поделиться

Когда вы получаете более сложный пользовательский интерфейс, я рекомендую вам отделить разные JPanel от JFrame, чтобы они стали «модулями» или «строительными блоками» вашего пользовательского интерфейса.

3
ответ дан 7 December 2019 в 12:17
поделиться

UIApplication. Как вы только что сказали, похоже, это метод, которому учат в книгах. То, что я делал раньше, чтобы иметь хотя бы небольшой обзор различных аспектов, - это отделить ui-views от ui-controllers. В вашем случае это будет означать, что вы можете написать отдельные классы для обработки событий. Еще один полезный прием - использовать частные методы для разделения различных частей вашего пользовательского интерфейса. Другими словами, и в этом случае могут быть полезны общие методы рефакторинга.

1
ответ дан 7 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: