【问题标题】:java boxlayout space after adding jpanel添加jpanel后的java boxlayout空间
【发布时间】:2013-04-13 12:39:53
【问题描述】:

我有容器 jpanel,我在其中使用了 boxlayout 管理器,我所做的是在其中添加另一个面板,其中添加的面板包含使用 flowlayout 管理器的标签和文本字段。每次我在其中添加一个面板时,它都会在另一个添加面板之后创建一个烦人的大空间。我想减少我尝试使用 setsize 和 setpreferredsize 方法调整面板的间距。这是我的代码:

  JPanel global = new JPanel();
  global.setLayout(new BoxLayout(global, BoxLayout.Y_AXIS));
  global.setPreferredSize(new Dimension(500,312));
  global.setSize(500,312);
  global.setBounds(8, 5, 500, 312);
  global.setBorder(BorderFactory.createLineBorder(Color.black));
  global.setBackground(Color.white);
  //Elements of global

  JLabel label1 = new JLabel("Global Settings");
  label1.setAlignmentX(Component.CENTER_ALIGNMENT);
  label1.setFont(new Font("tahoma", Font.BOLD, 17));
  global.add(label1);
  global.add(new JSeparator());


  //Name Field
  JPanel c = new JPanel();
  c.setSize(100, 1);
  c.setPreferredSize(new Dimension(100,1));
  c.setLayout(new FlowLayout());
  JLabel label = new JLabel("Display Name");
  JTextField text = new JTextField(20);
  text.setPreferredSize(new Dimension(20,25));
  c.add(label);
  c.add(text);
  global.add(c);

  //Hostname Field
  JPanel c1 = new JPanel();
  c1.setSize(100, 1);
  c1.setPreferredSize(new Dimension(100,1));
  c1.setLayout(new FlowLayout());
  JLabel label2 = new JLabel("Host Name");
  JTextField text1 = new JTextField(20);
  text1.setPreferredSize(new Dimension(20,25));
  c1.add(label2);
  c1.add(text1);
  global.add(c1);

【问题讨论】:

    标签: java swing layout jpanel boxlayout


    【解决方案1】:

    BoxLayout 是一个相当激进的LayoutManager,并不总是尊重其中组件的首选大小。相反,我们必须设置BoxLayout 组件的最大尺寸,以防止它们被拉伸。此外,我们需要通过Box.createVerticalGlue() 添加一个Box - 这是一个被拉伸的特殊组件(而不是其他组件)。

    这是重写的代码:

        JPanel global = new JPanel();
        global.setLayout(new BoxLayout(global, BoxLayout.Y_AXIS));
        global.setPreferredSize(new Dimension(500, 312));
        global.setSize(500, 312);
        global.setBounds(8, 5, 500, 312);
        global.setBorder(BorderFactory.createLineBorder(Color.black));
        global.setBackground(Color.white);
        // Elements of global
    
        JLabel label1 = new JLabel("Global Settings");
        label1.setAlignmentX(Component.CENTER_ALIGNMENT);
        label1.setFont(new Font("tahoma", Font.BOLD, 17));
        global.add(label1);
        JSeparator sep = new JSeparator();
        sep.setMaximumSize(new Dimension((int) sep.getMaximumSize().getWidth(), 50));
        global.add(sep);
    
        // Name Field
        JPanel c = new JPanel();
        c.setMaximumSize(new Dimension((int) c.getMaximumSize().getWidth(), 50));
        JLabel label = new JLabel("Display Name");
        JTextField text = new JTextField(20);
        text.setPreferredSize(new Dimension(20, 25));
        c.add(label);
        c.add(text);
        global.add(c);
    
        // Hostname Field
        JPanel c1 = new JPanel();
        c1.setMaximumSize(new Dimension((int) c1.getMaximumSize().getWidth(), 50));
        JLabel label2 = new JLabel("Host Name");
        JTextField text1 = new JTextField(20);
        text1.setPreferredSize(new Dimension(20, 25));
        c1.add(label2);
        c1.add(text1);
        global.add(c1);
        global.add(Box.createVerticalGlue());
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2014-10-28
    • 2012-01-10
    • 2012-02-10
    • 2015-05-06
    相关资源
    最近更新 更多