代码以不同的顺序执行,Jframe,Button和TextArea

时间:2014-01-15 21:06:12

标签: java swing jframe awt jtextfield

基本上我有一些代码来创建一个允许我提交请求的接口,它从txt文件中提取必要的信息。出于某种原因,当我为代码执行我的StartUp时,有时按钮不存在,一个文本框占据屏幕,所有文本框重叠......很奇怪。

无论如何都是GUI代码

public class Menu {

SubmitCode submit = new SubmitCode();

    public static JFrame frame;
    public static JTextField field;
    public static Button btn;
    public static TextArea txtComm;
    public static TextArea txtSites;
    public static TextArea txtProg;
    public static Dimension dim = new Dimension(40, 10);

    public Menu() {
        frame = new JFrame();

        frame.setTitle("Welcome :)");
        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);

    }

    public static void open()   {
        Menu.main(null);    // Opens up the main method of the class
    }

    public static void main(String args[])  {
        field = new JTextField();
        btn = new Button();
        txtComm = new TextArea();
        txtSites = new TextArea();
        txtProg = new TextArea();

        field.setText("What do you want to do?");
        field.setSize(390, 20);
        field.setLocation(0, 125);

        btn.setVisible(true);
        btn.setLabel("Click to Submit");
        btn.setSize(90, 20);
        btn.setLocation(400, 125);

        txtComm.setVisible(true);
        txtComm.setText("Commands: ");
        txtComm.setSize(150, 100);
        txtComm.setLocation(10, 10);
        txtComm.setEditable(false);
        frame.add(txtComm);

        txtSites.setVisible(true);
        txtSites.setText("Sites: ");
        txtSites.setSize(150, 100);
        txtSites.setLocation(170, 10);
        txtSites.setEditable(false);
        frame.add(txtSites);

        txtProg.setVisible(true);
        txtProg.setText("Programmes: ");
        txtProg.setSize(150, 100);
        txtProg.setLocation(330, 10);
        txtProg.setEditable(false);
        frame.add(txtProg);

        frame.setSize(500, 175);
        frame.add(field, BorderLayout.SOUTH);
        frame.add(btn);

        btn.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                System.out.println("Do Something Clicked");

                SubmitCode.main(null);
            }
        });
    }
}

1 个答案:

答案 0 :(得分:4)

建议:

  • 除特殊需要或主要方法外,不要使用静态方法/字段。你在这里没有必要。
  • 而是使用有效的类,带有构造函数的类,实例(非静态)字段和实例方法。
  • 不要随意混合使用AWT和Swing组件,而只使用Swing组件。所以JTextArea,不是TextArea,JButton,不是Button等......
  • 例如,您的Menu构造函数是由于您滥用和过度使用静态而从未调用的浪费代码。
  • 不要设置大小,使用空布局和绝对定位,例如使用setBounds。
  • 而是阅读并使用布局管理器。
  • 请不要使用无用位,例如拨打setVisible(true)的大部分内容。
  • 在顶级窗口中调用setVisible(true),此处是您的JFrame,之后添加所有组件。
  • 请阅读相关的教程,因为这里有很好的解释。谷歌Java Swing Tutorials并检查第一次点击。
  • 这一点让我害怕:SubmitCode.main(null);并建议您尝试从GUI中调用另一个类的静态main方法。你应该避免这样做,而是让你的SubmitCode类使用良好的OOP技术,包括非静态方法和字段,构造函数等......