如何改变这些按钮的大小?
How to change the size of these buttons?
如何改变这些按钮的大小?
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);
}
});
}
}
首先,setSize
(和 setBounds
)是没有意义的,因为 Swing 正在使用布局管理器(在您的情况下是 FlowLayout
),它决定大小和大小应该在哪里布置组件。
其次,setPreferredSize
是一个很糟糕的选择。为什么?按钮的首选大小会受到许多因素的影响,包括文本的 size/amount 和当前字体指标以及程序 运行 所在系统的 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
是可用的最灵活和最复杂的布局之一,应根据您的所有需求做出使用决定,而不仅仅是为组件提供填充的需要。
如何改变这些按钮的大小?
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);
}
});
}
}
首先,setSize
(和 setBounds
)是没有意义的,因为 Swing 正在使用布局管理器(在您的情况下是 FlowLayout
),它决定大小和大小应该在哪里布置组件。
其次,setPreferredSize
是一个很糟糕的选择。为什么?按钮的首选大小会受到许多因素的影响,包括文本的 size/amount 和当前字体指标以及程序 运行 所在系统的 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
是可用的最灵活和最复杂的布局之一,应根据您的所有需求做出使用决定,而不仅仅是为组件提供填充的需要。