我正在使用Java中的Swing GUI小部件处理应用程序,并且在面板中垂直拉伸面板时遇到问题。我的主面板使用BorderLayout,问题出在中心区域。我正在使用带有BoxLayout.X_AXIS的Panel,并且在其中插入了带有BoxLayout.Y_AXIS的其他Panel。我无法从上到下垂直拉伸。我也希望内容从顶部到底部开始。我已经尝试使用GridLayout并且它完全符合我的要求,但是我受宽度限制,因为所有列都是相同的大小,我希望某些面板具有更小的宽度。我查看了API,教程,并搜索了Googled以获得答案。任何帮助都会很棒!
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);
}
}
答案 0 :(得分:0)
我已经尝试过使用GridLayout并且它完全符合我的要求,但是我受宽度限制,因为所有列都是相同的大小,我希望某些面板具有更小的宽度
您可以尝试使用GridBagLayout
。每列将是列中最大组件的宽度。
阅读How to Use GridBagLayout上Swing教程中的部分,了解更多信息和工作示例。
另一种选择可能是使用JTable
。 JTable允许您以行/列格式显示数据。上面的教程还有一个关于How to Use Tables
的部分。