我有一个带有垂直BoxLayout的JPanel,对于一个元素,我希望能够使用另一个可以放置元素的BoxLayout。 代码将解释我正在尝试做什么:
private void prepareGUI() {
setBorder(new EmptyBorder(20, 0, 20, 0));
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
JLabel lblTitle = new JLabel("Downloading");
lblTitle.setFont(new Font("Arial", Font.PLAIN, 20));
lblTitle.setAlignmentX(Component.CENTER_ALIGNMENT);
add(lblTitle);
Component verticalStrut = Box.createVerticalStrut(20);
add(verticalStrut);
JProgressBar progressBar = new JProgressBar();
progressBar.setStringPainted(true);
progressBar.setBorder(null);
progressBar.setValue(50);
Dimension size = new Dimension(300, 25);
progressBar.setMinimumSize(size);
progressBar.setMaximumSize(size);
progressBar.setPreferredSize(size);
add(progressBar);
BoxLayout textLayout = new BoxLayout(this, BoxLayout.Y_AXIS);
JLabel lblTest_1 = new JLabel("Test 1!");
textLayout.add(lblTest_1);
JLabel lblTest_2 = new JLabel("Test 2!");
textLayout.add(lblTest_2);
add(textLayout);
}
现在很明显这是不可能的,因为BoxLayout不是一个容器(它甚至要求容器在构造时链接。 我的问题是实现我想要的最好的方法是什么?我应该创建另一个JPanel并将其放在第一个JPanel中吗?我在想,但似乎有点过于复杂,必须有一个更简单的方法吗?
答案 0 :(得分:3)
BoxLayout
不是容器,它是一个LayoutManager,因此,组件无法添加到BoxLayout
,因为框布局不会从抽象类Component
继承任何内容,它会添加到某个容器,如JPanel
或框架的容器....
所以,说:
是错误的 textLayout.add(lblTest_1);
甚至
add(textLayout);
因为此方法会将组件添加到框架的容器中,并且BoxLayout
不是组件。
我应该创建另一个JPanel并将其放在第一个JPanel中吗?
除了你所做的和避免null
布局之外,你可以自由地做任何事情,因为,如果需要的话,我更喜欢设计多个面板。