2014-01-15 41 views
0

基本上我有一些代碼讓一個接口允許我提交請求,並從txt文件中提取必要的信息。由於某些原因,當我爲代碼執行啓動時,有時按鈕不存在,一個文本框在屏幕上占主導地位,所有文本框重疊......它很奇怪。代碼以不同的順序執行,Jframe,Button和TextArea

反正繼承人的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); 
      } 
     }); 
    } 
} 

回答

4

建議:

  • 不要使用靜態方法/字段,除非特定需要時或主要方法。你在這裏沒有必要。
  • 改爲使用有效的類,具有構造函數的類,實例(非靜態)字段和實例方法。
  • 不要不必要地混合AWT和Swing組件,而是隻使用Swing組件。因此,JTextArea,而不是TextArea,JButton,不是按鈕等等。
  • 例如,您的Menu構造函數是由於濫用和過度使用靜態而從未調用的浪費代碼。
  • 請勿設置尺寸,使用null佈局和絕對位置,例如setBounds。
  • 改爲閱讀並使用佈局管理器。
  • 不要用無用的代碼來胡亂代碼,例如大多數呼叫setVisible(true)
  • 在頂層窗口調用setVisible(true),這裏是你的JFrame,之後的加入所有組件。
  • 請仔細閱讀相關教程,因爲這裏有很好的解釋。谷歌Java Swing Tutorials並檢查第一次打。
  • 這一點讓我感到害怕:SubmitCode.main(null);並建議您嘗試從GUI中調用另一個類的靜態main方法。你應該避免這樣做,而是有你SubmitCode類使用良好的面向對象技術,包括非靜態方法和字段,構造等...
+0

謝謝,我很新的,這些都是非常SOEM有用的技巧,我認爲我需要立即將我的一些變量作爲靜態,並且我認爲setVisible必須應用於所有組件,非常感謝 – user3200016

+0

鏈接上的404錯誤 – user3200016

+1

@ user3200016:請嘗試[此鏈接](http:// docs .oracle.com/javase/tutorial/uiswing/index.html)。 –