如何更改这些按钮的大小?
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class xog extends JFrame implements ActionListener {
private JPanel mainPanel;
JButton[][] butArray=new JButton[3][3];
private int counter1=0;
int size=3;
int firstrow,firstcol,secondrow,secomdcol;
public xog(){
setTitle("XO");
mainPanel=new JPanel();
for(int r=0; r<this.size; r++)
for(int c=0;c<this.size;c++){
this.butArray[r][c]=new JButton();
this.butArray[r][c].setSize(100, 100);
this.butArray[r][c].addActionListener(this);
this.mainPanel.add(this.butArray[r][c]);
}
validate();
getContentPane().add(mainPanel);
pack();
}
public void actionPerformed(ActionEvent e)
{
for(int r=0; r<size; r++)
for(int c=0;c<size;c++){
if(e.getSource()==butArray[r][c]){
counter1++;
if(counter1%2==0){
butArray[r][c].setText("x");
this.butArray[r][c].setBackground(Color.red);
}
if(counter1%2==1){
butArray[r][c].setText("o");
this.butArray[r][c].setBackground(Color.blue);
}
}
}
}
public static void main(String[] args)
{
java.awt.EventQueue.invokeLater(new Runnable(){
public void run()
{
new xog().setVisible(true);
}
});
}
}
答案 0 :(得分:0)
首先,setSize
(和setBounds
)毫无意义,因为Swing正在使用布局管理器(在您的情况下为FlowLayout
)来决定大小和位置应该布置组件。
其次,setPreferredSize
是一个非常糟糕的选择。为什么?按钮的首选大小将受到许多因素的影响,包括文本的大小/数量以及运行该程序的系统的当前字体度量和DPI呈现特征。
所有这些设置都可能发生变化,而且你会遇到一个基本上看起来像废话的程序。
使用Button#setMargin
,它会将按钮添加到按钮当前首选大小的按钮。
这种方法非常有用,因为它会影响按钮本身并将该信息提供给布局管理器,否则这些布局管理器可能无法自行提供填充支持
使用布局管理器,它允许您提供额外的大小提示,这些提示会添加到组件首选大小,例如GridBagLayout
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
// This will add 50 pixels to the preferred size's width and height
gbc.ipadx = 50;
gbc.ipady = 50;
JButton[][] butArray = new JButton[3][3];
int size = 3;
for (int r = 0; r < size; r++) {
for (int c = 0; c < size; c++) {
butArray[r][c] = new JButton();
add(butArray[r][c], gbc);
}
}
GridBagLayout
是最灵活,最复杂的布局之一,应根据您的所有需求决定使用,而不仅仅是需要为组件提供填充。