多个JPanels - 所有按钮大小相同

时间:2014-10-24 20:23:34

标签: java jpanel size jbutton miglayout

我有一个主面板,里面有多个面板。每个“子”面板包含一个(或多个)JButton。由于我同时显示所有面板,我想让所有按钮尺寸相同(以保持一致性)。

此代码说明了我的问题:

public class Test
{
   public static void main(String[] args)
   {
      JFrame f = new JFrame();
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.setSize(new Dimension(200, 200));

      // 1st Panel
      JPanel panel1 = new JPanel(new MigLayout());
      panel1.add(new JButton("button in panel 1"));

      // 2nd Panel
      JPanel panel2 = new JPanel(new MigLayout());
      panel2.add(new JButton("2nd button"));

      JPanel parent = new JPanel(new MigLayout("wrap"));
      parent.add(panel1, "pushx, growx");
      parent.add(new JSeparator(), "pushx, growx");
      parent.add(panel2, "pushx, growx");

      f.add(parent);
      f.setVisible(true);
   }
}

“面板1中的按钮”的大小与其他面板中的按钮不同。是否有一种“简单”的方法来使用布局设置其大小? (硬编码大小为 NOT 一个选项)。

1 个答案:

答案 0 :(得分:0)

我认为您没有仔细阅读该文档,以证明我编写代码的用法。您不应该复制该链接中显示的相同代码段。他们已指定您更新的组件必须传递到updateComponentTreeUI()方法。您可以通过将“large”替换为“small”或“mini”来替换大小。

import javax.swing.*;
import java.awt.*;
public class Demo {

    /**
     * @param args
     */
    JFrame frame ;
    JButton btn;
    public Demo()
    {
        frame = new JFrame("Example");
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,400);
        frame.setLayout(new FlowLayout());
        btn = new JButton("Example");
        btn.putClientProperty("JComponent.sizeVariant", "large");
        SwingUtilities.updateComponentTreeUI(btn);
        frame.add(btn);
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try
        {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        Demo d = new Demo();
    }

}