当我使用eclipse运行我的程序时,只显示一个按钮(左上角)但是当我在终端中使用javac时(大多数时候)所有按钮都显示出来!这真让我烦恼。有人可以帮忙吗?谢谢!
这是我的建设者:
public TicTacToe(){
super("Farm Tic-Tac-Toe");
setSize(450,750);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cont = getContentPane();
cont.setLayout(null);
int newLine = 0;
int lineCount = 0;
for(int i = 0; i < buttons.length; i++){
buttons[ i] = new JButton(blank);
if(i == 3 || i == 6){
newLine++;
lineCount = 0;
}
buttons[ i].setBounds(lineCount*150,newLine*150,150,150);
cont.add(buttons[ i]);
buttons[ i].addActionListener(this);
lineCount++;
}
}
这是动作监听器......
public void actionPerformed(ActionEvent e){
for(int i = 0; i < buttons.length; i++){
if(e.getSource()==buttons[ i]){
if(turn%2==0){
buttons[ i].setName("x");
buttons[ i].setIcon(x);
buttons[ i].removeActionListener(this);
}
else{
buttons[ i].setName("o");
buttons[ i].setIcon(o);
}
buttons[ i].removeActionListener(this);
}
}
turn++;
checkWin();
}
请不要过多地告诉我我的代码设计是如何糟糕的,因为我(不是初学者,但是)不太擅长Java。
答案 0 :(得分:4)
在将所有组件添加到GUI之前,您正在调用setVisible(true)
,因此不会全部显示它们。不要这样做。而是在添加所有组件后调用setVisible(true)
。
另外
答案 1 :(得分:1)
Eclipse GUI仅呈现以某些非常具体的方式绘制的按钮。如果您的代码以不同方式执行(例如,使用循环),Eclipse将无法绘制它。
另外,使用LayoutManager
,请勿执行.setLayout(null)
答案 2 :(得分:1)
问题的解决方案非常简单......
第一个是缺少布局管理器,另一个是显示UI的顺序(正如已经说明的那样)
public class SimpleTicTacToe {
public static void main(String[] args) {
new SimpleTicTacToe();
}
public SimpleTicTacToe() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new GamePane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class GamePane extends JPanel {
public GamePane() {
setLayout(new GridLayout(3, 3));
for (int index = 0; index < 9; index++) {
add(new JButton());
}
}
}
}
花点时间阅读Creating a GUI With JFC/Swing以掌握基本知识。