我有以下代码,其中我为每个字母表创建按钮,我想要听哪个字母被点击。我创建了按钮。但我有两个问题,按钮溢出框架,我必须手动调整框架大小以查看所有按钮。我使用setSize for JFrame,但它仍然不符合我的预期。
我还希望将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);
}
}
这里有任何其他更好的方式或一些不好的风格 - 请指出。万分感谢
答案 0 :(得分:3)
按钮溢出框架,
JPanel的默认布局管理器是FlowLayout,因此按钮从面板流出。
而是使用GridLayout
,以便您可以控制每行显示的按钮数量。
我使用了setSize for JFrame,但它仍然不符合我的预期。
pack()撤消setSize()。最好使用pack()而不是setSize(),让布局管理器完成它们的工作。
答案 1 :(得分: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()