如何更改滚动面板中按钮的大小

时间:2013-12-24 11:47:38

标签: java eclipse swing

我想改变按钮的大小。我想设置每个按钮的SQUARE类型视图,但不幸的是它给出了矩形外观。只有当我将行数设置为20或25时,才会得到方形外观。现在我的GUI看起来如下所示:they look like rectangle.

我试图从按钮[i] [j] .setMaximumSize(new Dimension(20,20))中更改它,其中buttons是数组的名称。我也尝试过按钮[i] [j] .setsize,但它对它没有任何影响。我从以下设置:bPanel.setLayout(new GridLayout(x,y))我认为这是问题的主要原因。任何人都可以告诉我如何将其设置为布局管理器?

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.event.*;
import javax.swing.JFrame;

import sun.util.calendar.Gregorian;

public class Final_GUI extends JFrame implements ActionListener {
JLabel label;
ButtonGroup cbg;
JRadioButton radio_1;
JRadioButton radio_2;
JRadioButton radio_3;
JCheckBox checkbox_1;
JCheckBox checkbox_2;
JCheckBox checkbox_3;
JScrollPane scrollpane_1;
JComboBox combobox_1;
JList list_1;
JScrollPane sp_list_1;
JComboBox combobox_2;
JButton Orange;
JButton Exit;
JLabel for_text;
int x=200;
int y=100;
int check [][]= new int [x][y];

JFrame frame = new JFrame();
   JButton[][] buttons = new JButton[x][y];
    JPanel mPanel = new JPanel();
    JPanel bPanel = new JPanel();
    JPanel cPanel = new JPanel();
    JTextArea scoreKeeper = new JTextArea();


    int[][] intArray = new int[x][y];

public Final_GUI() {

     butGen();
        score();


    Final_GUILayout customLayout = new Final_GUILayout();

    getContentPane().setFont(new Font("Helvetica", Font.PLAIN, 12));
    getContentPane().setLayout(customLayout);

    label = new JLabel("Shortest Path Finding Algorithm");
    getContentPane().add(label);

    cbg = new ButtonGroup();
    radio_1 = new JRadioButton("radio_1", false);
    cbg.add(radio_1);
    getContentPane().add(radio_1);

    radio_2 = new JRadioButton("radio_2", false);
    cbg.add(radio_2);
    getContentPane().add(radio_2);

    radio_3 = new JRadioButton("radio_3", false);
    cbg.add(radio_3);
    getContentPane().add(radio_3);

    checkbox_1 = new JCheckBox("checkbox_1");

    getContentPane().add(checkbox_1);

    checkbox_2 = new JCheckBox("checkbox_2");
    getContentPane().add(checkbox_2);

    checkbox_3 = new JCheckBox("checkbox_3");
    getContentPane().add(checkbox_3);


    bPanel.setLayout(new GridLayout(x,y));


    mPanel.setLayout(new BorderLayout());

   mPanel.add(bPanel, BorderLayout.CENTER);

   scrollpane_1 = new JScrollPane(mPanel);



    scrollpane_1.setViewportView(mPanel);
    getContentPane().add(scrollpane_1);

    combobox_1 = new JComboBox();
    combobox_1.addItem("Size1");
    combobox_1.addItem("Size2");
    getContentPane().add(combobox_1);

    DefaultListModel listModel_list_1 = new DefaultListModel();
    listModel_list_1.addElement("Black");
    listModel_list_1.addElement("Green");
    list_1 = new JList(listModel_list_1);
    sp_list_1 = new JScrollPane(list_1);
    getContentPane().add(sp_list_1);

    combobox_2 = new JComboBox();
    combobox_2.addItem("Additional Data");
    combobox_2.addItem("Additional Data2");
    getContentPane().add(combobox_2);

    Orange = new JButton("Orange");
    getContentPane().add(Orange);

    Exit = new JButton("Exit");

    getContentPane().add(Exit);

    for_text = new JLabel("Just For some text");
    getContentPane().add(for_text);

    setSize(getPreferredSize());

    addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
}

private void butGen()
{
    for(int i=0;i<x;i++)
    {
        for(int j=0;j<y;j++)
        {
            buttons[i][j] = new JButton(String.valueOf(i)+"x"+String.valueOf(j));
           buttons[i][j].setActionCommand("button" +i +"_" +j);
            buttons[i][j].addActionListener(this);

          buttons[i][j].setMaximumSize(new Dimension( 20, 20));

            bPanel.add(buttons[i][j]);
        }
    }
}   

public void actionPerformed(ActionEvent e)
{

    if(e.getActionCommand().contains("button"))
    {

        String str = e.getActionCommand().replaceAll("button", "");
        System.out.println(str);
        String[] v = str.split("_");
        int i = Integer.parseInt(v[0]);
        int j = Integer.parseInt(v[1]);

        intArray[i][j]++;

        if(check[i][j]!=1){
            buttons[i][j].setBackground(Color.black);
            check[i][j]=1;
        }
        else{
            buttons[i][j].setBackground(null);
            check[i][j]=0;
        }


    System.out.println(e.getActionCommand() +"  " +(i) +"  " +(j));

    score();
    if(checkbox_1.isSelected())
    {
        buttons[i][j].setBackground(Color.GREEN);
    }

}
    }
private void score()
{
    for(int i=0;i<x;i++)
        for(int j=0;j<y;j++)
    buttons[i][j].setText("");

    }

public static void main(String args[]) {
    Final_GUI window = new Final_GUI();

    window.setTitle("SHORTEST PATH FINDING ALGORITHM");
    window.setBackground(Color.black);
   // window.setSize(800, 300);
    window.setResizable(true);
    window.resize(200, 500);
    window.pack();
    window.show();
}
}

GUI布局

class Final_GUILayout implements LayoutManager {

public Final_GUILayout() {
}

public void addLayoutComponent(String name, Component comp) {
}

public void removeLayoutComponent(Component comp) {
}

public Dimension preferredLayoutSize(Container parent) {
    Dimension dim = new Dimension(0, 0);

    Insets insets = parent.getInsets();
    dim.width = 1053 + insets.left + insets.right;
    dim.height = 621 + insets.top + insets.bottom;

    return dim;
}

public Dimension minimumLayoutSize(Container parent) {
    Dimension dim = new Dimension(0,0);
    return dim;
}

public void layoutContainer(Container parent) {
    Insets insets = parent.getInsets();

    Component c;
    c = parent.getComponent(0);
    if (c.isVisible()) {c.setBounds(insets.left+368,insets.top+24,304,64);}
    c = parent.getComponent(1);
    if (c.isVisible()) {c.setBounds(insets.left+8,insets.top+120,72,24);}
    c = parent.getComponent(2);
    if (c.isVisible()) {c.setBounds(insets.left+8,insets.top+144,72,24);}
    c = parent.getComponent(3);
    if (c.isVisible()) {c.setBounds(insets.left+8,insets.top+168,72,24);}
    c = parent.getComponent(4);
    if (c.isVisible()) {c.setBounds(insets.left+88,insets.top+120,72,24);}
    c = parent.getComponent(5);
    if (c.isVisible()) {c.setBounds(insets.left+88,insets.top+144,72,24);}
    c = parent.getComponent(6);
    if (c.isVisible()) {c.setBounds(insets.left+88,insets.top+168,72,24);}
    c = parent.getComponent(7);//Panel
    if (c.isVisible()) {
        c.setBounds(insets.left+168,insets.top+120,704,488);
        }
    c = parent.getComponent(8);
    if (c.isVisible()) {c.setBounds(insets.left+880,insets.top+120,160,160);}
    c = parent.getComponent(9);
    if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+232,128,216);}
    c = parent.getComponent(10);
    if (c.isVisible()) {c.setBounds(insets.left+880,insets.top+296,160,216);}
    c = parent.getComponent(11);
    if (c.isVisible()) {c.setBounds(insets.left+904,insets.top+528,112,24);}
    c = parent.getComponent(12);
    if (c.isVisible()) {c.setBounds(insets.left+888,insets.top+568,144,32);}
    c = parent.getComponent(13);
    if (c.isVisible()) {c.setBounds(insets.left+16,insets.top+472,120,48);}
}

}

2 个答案:

答案 0 :(得分:3)

GridLayout通过为每个组件提供相等的空间,使每个组件填充每个单元格来工作。

请查看How to use GridLayout了解详情。

如果你想要一个LayoutManager为你提供最好的控制,但是(除非你另有说明)使用组件首选/最小/最大尺寸提示,你应该考虑尝试像{{{ 1}}而不是

请查看How to use GridBagLayout了解详情

答案 1 :(得分:0)

使用GridBagLayout,您可以设置内部组件的大小。

另一种方法是创建一个从JButton类继承的自定义按钮,并覆盖方法SetSize(int width,int height)和设置width = height。

您可以这样做:

public class SquareButton extends JButton{

    @Override
    public void setSize(int width, int height) {

        super.setSize(width, width);
    }   
}

有了这个,你定义了一个JButton的新类,它继承了JButton的所有方法,但是这个SquareButton类的所有实例都具有相同的宽度和高度。

也许你不需要这样做,但我认为它有效。另一方面,使用这个新类,您无法为按钮设置其他大小关系。

另一种方法是在新的SquareButton类中创建一个新方法来设置所需的大小(或关系宽度/高度),而不是覆盖SetSize(int width, int height)