[英]java GUI multiple buttons output display error?
我是 Java 的初学者。 这是我的第一个项目。 每次运行代码时,代码的 GUI 都会不断变化。 有时 output 甚至没有完全加载。 这是用于初始化棋盘 8X8 jbuttons 的代码。
我已经放下了图片,请查看下面的超链接。
是否有任何解决方案每次执行代码时都显示相同的 output?
package chess;
import game.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.*;
public class board{
static JButton [][] spots =new JButton [8][8];
public static void main(String[] args){
board b =new board();
b.initializeboard(spots);
}
public void initializeboard(JButton [][] spots){
JFrame f = new JFrame("CHESS");
f.setVisible(true);
f.setSize(800,800);
GridLayout layout =new GridLayout(8,8,1,1);
f.setLayout(layout);
for(int ver=0;ver<8;ver++){
for(int hor=0;hor<8;hor++){
JButton button = new JButton();
if((ver+hor)%2==0){
button.setBackground(Color.WHITE); }
else{
button.setBackground(new Color(255,205,51)); }
pieces p =new pieces();
spots[ver][hor] = button;
p.setButton(button);
f.add(button);
}
}
} //initialize board
} // close board
我是 Java 的初学者。
首先,class 名称应该以大写字符开头。 你有没有在 JDK 中看到一个不以大写字符开头的 class? 从教科书或教程中的代码示例中学习。
是否有任何解决方案每次执行代码时都显示相同的 output?
在使框架可见之前,应将所有组件添加到框架中。
当框架可见时,将调用布局管理器并为组件指定大小/位置。 如果将组件添加到可见面板,则需要在面板上调用revalidate()
和repaint()
以确保调用布局管理器。
必须承认我不确定你为什么会得到这种随机行为。 一些组件正在获取大小/位置,而其他组件即使没有调用布局管理器也没有。
我建议你重组你的代码,比如:
JPanel chessboard = new JPanel( new GridLayout(8, 8, 1, 1) );
// add buttons to the panel
JFrame frame = new JFrame("CHESS")
frame.add(chessboard, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
其他的建议:
相反,您可以在循环之外创建一个变量:
Dimension buttonSize = new Dimension(100, 100)
然后,当您创建您使用的按钮时:
button.setPreferredSize( buttonSize );
现在,当调用 pack() 方法时,会将框架调整为添加到框架中的所有组件的首选大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.