2012-08-13 107 views
0

我需要一些幫助。 我只是在失業後回到編程之後。在調用另一個方法之前,不等待方法調用完成

我正試圖學習Java,並遇到困難。

問題是我想調用一個方法,應該通過按下一個按鈕來詢問用戶輸入。這會將chouce返回到調用該方法的類。

public class ButtonMain { 
     private static CreateButton cButton; 

     public static void main(String[] args) { 
      cButton = new CreateButton(); 
      cButton.launchButton(); 
      switch(cButton.getSelect()) { 
       case 'a' : System.out.println("German Car"); 
        break; 
       case 'b' : System.out.println("Japanese Car"); 
        break; 
       default : System.out.println("Incorrect Car Selected");    
        break; 
      } 
     } 
    } 

代碼的其餘部分如下

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class CreateButton implements ActionListener { 
    private JFrame mainFrame; 
    private JLabel label1; 
    private JButton button1; 
    private JButton button2; 
    private char select = ' '; 

    public CreateButton() { 
    } 

    public void launchButton() { 
     createFrame(); 
     createLabel(); 
     createButton1(); 
     createButton2(); 
    } 

    private void createFrame() { 
     mainFrame = new JFrame("Cars"); 
     mainFrame.setSize(200, 200); 
     mainFrame.setLocation(300, 300); 
     mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainFrame.setVisible(true); 
     mainFrame.setPreferredSize(null); 
     mainFrame.setLayout(new java.awt.GridLayout(3, 1)); 
    } 

    private void createLabel() { 
     label1 = new JLabel("Cars", SwingConstants.CENTER); 
     label1.setSize(200, 100); 
     mainFrame.getContentPane().add(label1, BorderLayout.CENTER); 
    } 

    public void createButton1() { 
     button1 = new JButton("Mercedes"); 
     button1.setSize(200, 50); 
     button1.addActionListener(this); 
     mainFrame.getContentPane().add(button1, BorderLayout.CENTER); 
    } 

    private void createButton2() { 
     button2 = new JButton("Lexus"); 
     button2.setSize(200, 50); 
     button2.addActionListener(this); 
     mainFrame.getContentPane().add(button2, BorderLayout.CENTER); 
    } 

    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == button1) { 
      select = 'a'; 
      System.out.println(select); 
     } 
     else if (e.getSource() == button2) { 
      select = 'b'; 
      System.out.println(select); 
     } 
    } 

    public char getSelect() { 
     return select; 
    } 
}  

正在發生的事情是,輸出應爲a或b,然後是否選擇德語或日語的汽車,但我越來越不正確的選車。

+0

嘗試記住,Swing是一個事件驅動環境。這是發生的事情,你迴應它。這是一個可以一點點讓使用的概念;) – MadProgrammer 2012-08-13 23:02:36

回答

0

問題在於,在調用main的時刻您將沒有選擇信息。最好在ActionListener中處理這個問題。

一旦Swing組件已經實現,所有代碼都可能影響或依賴於該組件的狀態應該在事件派發線程中執行。

0

該代碼工作正常。它的代碼正在運行,沒有任何東西阻止它。 cButton.launchButton()只是在運行後顯示框架和代碼。由於select被初始化爲空間字符「不正確的汽車選擇」在程序啓動時打印。您在按鈕上的操作正常。您的switch語句應該在actionPerformed方法中。

public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == button1) { 
     select = 'a'; 
     System.out.println(select); 
    } else if (e.getSource() == button2) { 
     select = 'b'; 
     System.out.println(select); 
    } 

    switch (getSelect()) { 
    case 'a': 
     System.out.println("German Car"); 
     break; 
    case 'b': 
     System.out.println("Japanese Car"); 
     break; 
    default: 
     System.out.println("Incorrect Car Selected"); 
    } 

} 
+0

嘗試把主一個破發點的'swtich'聲明。調試代碼並等待框架顯示。然後在斷點後繼續,我想你會看到發生了什麼。 – km1 2012-08-13 22:36:36

相關問題