2012-08-13 109 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

相关问题