如何更改这些按钮的大小?

时间:2018-02-17 20:33:49

标签: java swing graphics jbutton

如何更改这些按钮的大小?

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); 
        }
        });     
    }
}

1 个答案:

答案 0 :(得分:0)

首先,setSize(和setBounds)毫无意义,因为Swing正在使用布局管理器(在您的情况下为FlowLayout)来决定大小和位置应该布置组件。

其次,setPreferredSize是一个非常糟糕的选择。为什么?按钮的首选大小将受到许多因素的影响,包括文本的大小/数量以及运行该程序的系统的当前字体度量和DPI呈现特征。

所有这些设置都可能发生变化,而且你会遇到一个基本上看起来像废话的程序。

你可以......

使用Button#setMargin,它会将按钮添加到按钮当前首选大小的按钮。

Margins

这种方法非常有用,因为它会影响按钮本身并将该信息提供给布局管理器,否则这些布局管理器可能无法自行提供填充支持

你可以......

使用布局管理器,它允许您提供额外的大小提示,这些提示会添加到组件首选大小,例如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

GridBagLayout是最灵活,最复杂的布局之一,应根据您的所有需求决定使用,而不仅仅是需要为组件提供填充。

请参阅How to Use GridBagLayout

相关问题