我曾经有一个包含 2 个组件的 jframe,每个组件占据一半的宽度和全部的高度:
我通过 2 列 1 行的网格布局实现了这一点,效果很好。尽管现在我想在右侧的组件下方添加第三个组件:
有人知道我如何实现这一目标吗?
最佳答案
您可以尝试嵌套一些JPanel
,例如:
有一个带有 FlowLayout
的主 Pane ,它将容纳左 Pane 和右 Pane 。
右侧 Pane 有一个 BoxLayout
或 GridLayout
来容纳顶部和底部 Pane 。
在下面的示例代码中给出以下输出
我添加了一些边框颜色,以便您可以看到它是如何工作的,我添加了一些标签,因为我懒得重写每个 JPanel
的 getPreferredSize()
,但我认为这会让您了解如何从这里继续下去。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class LayoutExample {
private JFrame frame;
private JPanel pane;
private JPanel leftPane;
private JPanel rightPane;
private JPanel topPane;
private JPanel bottomPane;
public static void main (String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new LayoutExample().createAndShowGui();
}
});
}
public void createAndShowGui() {
frame = new JFrame("Layout Example");
pane = new JPanel();
leftPane = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 300);
}
};
rightPane = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 300);
}
};
topPane = new JPanel();
bottomPane = new JPanel();
pane.setLayout(new FlowLayout());
rightPane.setLayout(new GridLayout(2, 1, 5, 5));
rightPane.add(topPane);
rightPane.add(bottomPane);
pane.add(leftPane);
pane.add(rightPane);
pane.setBorder(BorderFactory.createLineBorder(Color.green));
leftPane.setBorder(BorderFactory.createLineBorder(Color.red));
topPane.setBorder(BorderFactory.createLineBorder(Color.black));
bottomPane.setBorder(BorderFactory.createLineBorder(Color.magenta));
frame.setContentPane(pane);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
<小时/>
注意:为了在上面的示例中在左右 Pane 上获得相同的尺寸,我必须重写 getPreferredSize()
方法,这是因为我使用了 FlowLayout,在这种情况下,为了避免这样做,最好使用 @LukkasRotter 在下面的答案中给出的 2 个建议中的任何一个。
关于java - java 布局的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39048263/