0

次のコードがあります。各アルファベットのボタンを作成し、どのアルファベットがクリックされたかを聞きたいです。ボタンを作成しました。ボタンがフレームからはみ出し、すべてのボタンを表示するにはフレームのサイズを手動で変更する必要があります。JFrame に setSize を使用しましたが、それでも期待どおりにフレームに収まりませんでした。

また、ボタンを作成してクリックするとボタン名(アルファベット)を取得するので、各ボタンにeventlistnerを付けたいと思います。

import javax.swing.*;

import java.awt.GridLayout;
import java.awt.event.*;

public class HangmanGUI {


        public static void main(String[] args){

            new HangmanGUI();

        }
        //constructor for Hangman
        /**
         * Instantiates a new hangman gui.
         */
        public HangmanGUI() {

            JFrame myframe= new JFrame();
            JPanel myPanel = new JPanel();

            myframe.setSize(600,400);

            for (char alphabet = 'A';alphabet<='Z';alphabet++){
                myPanel.add(new JButton(alphabet+""));
            }

            myframe.add(myPanel);
            myframe.pack();
            myframe.setTitle("Hangman Game");
            myframe.setVisible(true);
            myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        }

}

ここで他のより良い方法または悪いスタイルがあれば、親切に指摘してください。ありがとうございます

4

2 に答える 2

3

ボタンがフレームからはみ出し、

JPanel のデフォルトのレイアウト マネージャーは FlowLayout であるため、ボタンはパネルの外に流れます。

代わりに a を使用して、GridLayout各行に表示されるボタンの数を制御できるようにします。

JFrame に setSize を使用しましたが、それでも期待どおりにフレームに収まりませんでした。

pack() は setSize() を元に戻します。setSize() の代わりに pack() を使用して、レイアウト マネージャーに仕事を任せる方がよいでしょう。

于 2013-10-15T19:57:58.353 に答える
0

また、ボタンを作成してクリックするとボタン名(アルファベット)を取得するので、各ボタンにeventlistnerを付けたいと思います。

すべてのボタンで動作が同じになる場合は、次のように単一のActionListenerを実装します。

ActionListener actionListener = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() instanceof JButton){
            JButton pressedButton = (JButton) e.getSource();
            String buttonsName = pressedButton.getName();
            String buttonsText = pressedButton.getText();
            // do something with those
        }
    }
};

JButton a = new JButton("A");
a.addActionListener(actionListener);
JButton b = new JButton("B");
b.addActionListener(actionListener);
....

注:推奨される読み物: EventObject.getSource()

于 2013-10-15T20:38:19.743 に答える