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,因此按钮从面板流出。

而是使用 aGridLayout这样您就可以控制每行显示多少个按钮。

我为 JFrame 使用了 setSize,但它仍然不符合我的预期。

pack() 撤销 setSize()。最好使用 pack() 而不是 setSize() 并让布局管理器完成他们的工作。

于 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 回答