垂直扩展面板内的面板

时间:2018-05-15 19:24:14

标签: java swing jpanel

我正在使用Java中的Swing GUI小部件处理应用程序,并且在面板中垂直拉伸面板时遇到问题。我的主面板使用BorderLayout,问题出在中心区域。我正在使用带有BoxLayout.X_AXIS的Panel,并且在其中插入了带有BoxLayout.Y_AXIS的其他Panel。我无法从上到下垂直拉伸。我也希望内容从顶部到底部开始。我已经尝试使用GridLayout并且它完全符合我的要求,但是我受宽度限制,因为所有列都是相同的大小,我希望某些面板具有更小的宽度。我查看了API,教程,并搜索了Googled以获得答案。任何帮助都会很棒!

附件是代码和布局的屏幕截图。 enter image description here

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.util.*;
import java.awt.Color;

public class Colors
{
private JFrame frame;
private JPanel contentPane;

public static void main (String[] args){
    Colors gui = new Colors();
    gui.start();
}

public void start(){
    frame = new JFrame("Words");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    contentPane = (JPanel)frame.getContentPane();
    contentPane.setLayout(new BorderLayout(8,8));
    center();
    east();
    frame.pack();
    frame.setVisible(true);
}

private void center(){
    JPanel centerPanel = new JPanel();
    centerPanel.setLayout(new BoxLayout(centerPanel,BoxLayout.X_AXIS));
    //centerPanel.setLayout(new GridLayout(1,3));
    centerPanel.setPreferredSize(new Dimension(300,0));
    centerPanel.setBackground(Color.BLUE);

    JLabel oneLabel,twoLabel,threeLabel;

    JPanel panelOne = new JPanel();
    panelOne.setLayout(new BoxLayout(panelOne,BoxLayout.Y_AXIS));
    panelOne.setBackground(Color.CYAN);
    oneLabel = new JLabel("  First Label First Column  ");
    panelOne.add(oneLabel);
    twoLabel = new JLabel("  Second Label First Column  ");
    panelOne.add(twoLabel);
    threeLabel = new JLabel("  Third Label First Column  ");
    panelOne.add(threeLabel);
    centerPanel.add(panelOne);

    JPanel panelTwo = new JPanel();
    panelTwo.setLayout(new BoxLayout(panelTwo,BoxLayout.Y_AXIS));
    panelTwo.setBackground(Color.YELLOW);
    oneLabel = new JLabel("  10  ");
    panelTwo.add(oneLabel);
    twoLabel = new JLabel("  20  ");
    panelTwo.add(twoLabel);
    threeLabel = new JLabel("  30  ");
    panelTwo.add(threeLabel);
    centerPanel.add(panelTwo);

    JPanel panelThree = new JPanel();
    panelThree.setLayout(new BoxLayout(panelThree,BoxLayout.Y_AXIS));
    panelThree.setBackground(Color.GREEN);
    oneLabel = new JLabel("  10  ");
    panelThree.add(oneLabel);
    twoLabel = new JLabel("  20  ");
    panelThree.add(twoLabel);
    threeLabel = new JLabel("  30  ");
    panelThree.add(threeLabel);
    centerPanel.add(panelThree);

    contentPane.add(centerPanel, BorderLayout.CENTER);
}

private void east(){
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
    panel.setPreferredSize(new Dimension(100,150));
    panel.setBackground(Color.RED);

    JPanel labelPanel = new JPanel();
    labelPanel.setBackground(Color.WHITE);
    labelPanel.setMaximumSize(new Dimension(26,24));
    panel.add(labelPanel);

    labelPanel = new JPanel();
    labelPanel.setBackground(Color.GREEN);
    labelPanel.setMaximumSize(new Dimension(26,24));
    panel.add(labelPanel);

    contentPane.add(panel, BorderLayout.EAST);
}      
}

1 个答案:

答案 0 :(得分:0)

  

我已经尝试过使用GridLayout并且它完全符合我的要求,但是我受宽度限制,因为所有列都是相同的大小,我希望某些面板具有更小的宽度

您可以尝试使用GridBagLayout。每列将是列中最大组件的宽度。

阅读How to Use GridBagLayout上Swing教程中的部分,了解更多信息和工作示例。

另一种选择可能是使用JTable。 JTable允许您以行/列格式显示数据。上面的教程还有一个关于How to Use Tables的部分。