0

少し助けが必要です。失業した後、プログラミングに戻ったばかりです。

Java を学習しようとしていますが、問題が発生しました。

問題は、ボタンを押してユーザーに入力を求めるメソッドを呼び出したいことです。これにより、メソッドを呼び出したクラスに選択が返されます。

    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 と表示され、次にドイツ車または日本車のどちらが選択されたかが示されますが、間違った車が選択されています。

4

2 に答える 2

0

コードは正常に動作します。コードが実行されており、それを止めるものは何もないということです。はcButton.launchButton()、実行後のフレームとコードを表示するだけです。はスペース char に初期化されるためselect、プログラムの起動時に「Incorrect Car Selected」が出力されます。ボタンに対するアクションは正しく機能しています。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");
    }

}
于 2012-08-13T22:31:09.087 に答える
0

問題は、メインが呼び出された時点で選択情報がないことです。これは ActionListener 自体で処理することをお勧めします。

また

Swing コンポーネントが認識されると、そのコンポーネントの状態に影響を与える可能性のある、またはその状態に依存する可能性のあるすべてのコードを、イベント ディスパッチ スレッドで実行する必要があります。

于 2012-08-13T22:27:24.970 に答える