什么是初始化GUI字段的最佳方法

时间:2016-03-10 09:10:08

标签: java user-interface

示例:

public class MyWindow extends Window {

    private final Panel panel = new Panel(new Layout());
    private final TextField textField = new TextField();

    private TextArea textArea;
    private String value;

    public MyWindow(String value) {
         this.value = value;
         setHeading("Example");
         textArea = createTextArea();
         panel.add(textArea);
         panel.add(textField);
         add(panel);
    }

    private TextArea createTextArea() {
         TextArea textArea = new TextArea();
         textArea.setValue(value);
         textArea.setToolTip("tooltip");
    }

}

密切关注TextArea - 初始化此字段的最佳方法是什么?内联字段初始化或默认构造函数?

我应该如上所述,也可能是这样:

   public class MyWindow extends Window {

    ...
    private TextArea textArea = new TextArea();
    ...

    public MyWindow(String value) {
         ...
         setupTextArea();
         ...  
    }

    private TextArea setupTextArea() {
         textArea.setValue(value);
         textArea.setToolTip("tooltip");
    }

}

我还有很多字段要初始化,我不能总是在一行中声明字段。有时,在GUI中创建单个项目需要创建另外两个对象。因此,代码变得难以阅读 - 一些字段在构造函数中初始化,并且所有字段都在声明中。在我看来,它看起来并不太好。

你是怎么做到的?

编辑:也许我必须在构造函数中创建所有字段并将所有信息作为参数传递给方法?

3 个答案:

答案 0 :(得分:1)

由于你需要一个比简单的一行更复杂的初始化,我建议初始化默认构造函数中的所有内容,从我的观点来看,在可读性方面更清晰。

如果要在另一个重载的构造函数中重用初始化代码,则可以在重载的构造函数中调用默认值作为第一个语句。

答案 1 :(得分:1)

我总是使用创建方法initComponents,我在其中初始化所有组件:

var info = new System.Globalization.CultureInfo("de-DE");
info.DateTimeFormat.FirstDayOfWeek;

答案 2 :(得分:1)

请参阅以下示例如何完成。
使用initialize方法在自己的方法中创建特定组件(或者,如果例如在框架内创建面板,则类也是可选的)

顺便说一句不要让你的类从Window 扩展,这被认为是不好的做法。而是在您的类中创建一个窗口对象。例如,在我的示例中,我创建了一个Jframe,而不是从Jframe类扩展。

public class Program {

    public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() { new MainFrame();}
    });
    }
}



public class MainFrame {      
    private JFrame frame;
    private JTextArea textArea_input;
    private JTextArea textArea_output;
    private JButton button_parse;
    private JButton button_createQuestionnaire;
    private Form form;

    public MainFrame() {
    initialize();
    }

    private void initialize() {
    final Context context = new Context();
    createFrame();      
    createTextFieldInput();
    createButtonParse(context);
    createButtonQuestionnaire(context);
    createTextFieldOutput();
    }

    private void createButtonQuestionnaire(final Context context) {
    button_createQuestionnaire = new JButton("Create Questionnaire");
    button_createQuestionnaire.setEnabled(false);
    button_createQuestionnaire.setSize(TEXTFIELD_WIDTH, TEXTFIELD_HEIGHT);
    frame.getContentPane().add(button_createQuestionnaire);     
    button_createQuestionnaire.addMouseListener(buttonClickCreateQuestionnaire(context));
    }