在调用另一个方法之前,不等待方法调用完成

时间:2012-08-13 22:18:42

标签: java swing frame

我需要一些帮助。 我刚刚在失业后回到编程之后。

我正在努力学习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,然后选择德国或日本汽车,但我选择了错误的汽车。

2 个答案:

答案 0 :(得分:0)

问题是,在调用main时,您将无法获得选择信息。最好在ActionListener本身中处理它。

一旦实现了Swing组件,所有可能影响或依赖于该组件状态的代码都应该在事件派发线程中执行。

答案 1 :(得分:0)

代码工作正常。它是你的代码正在运行,没有任何东西阻止它。 cButton.launchButton()只是在运行后显示框架和代码。由于select被初始化为空格char,因此在程序启动时会打印“选择了错误的车辆”。您对按钮的操作正常。您的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");
    }

}