Java 南面板和北面板使用哪种布局管理器?
在Swing应用程序中,我希望有以下屏幕布局: 使用Java 南面板和北面板使用哪种布局管理器?,java,swing,layout-manager,Java,Swing,Layout Manager,在Swing应用程序中,我希望有以下屏幕布局: 使用BorderLayout这里我们放置了三个面板:南、中、北 要为南面板和北面板选择哪些布局?North有两个组件(标签):左对齐和右对齐。南方在中心有一个组件(按钮) 我还希望在合理的范围内重新调整整个屏幕的大小 在我看来,我将不得不使用GridLayout来处理这两个有大量空单元格的问题。或者,我可以在整个屏幕上使用一个GridBagLayout(但这种方法将迫使我使用具有比例宽度的标签和按钮) 是否有更好(可能更容易)的选项?您可以根据需
BorderLayout
这里我们放置了三个面板:南、中、北
要为南面板和北面板选择哪些布局?North有两个组件(标签):左对齐和右对齐。南方在中心有一个组件(按钮)
我还希望在合理的范围内重新调整整个屏幕的大小
在我看来,我将不得不使用GridLayout
来处理这两个有大量空单元格的问题。或者,我可以在整个屏幕上使用一个GridBagLayout
(但这种方法将迫使我使用具有比例宽度的标签和按钮)
是否有更好(可能更容易)的选项?您可以根据需要分层/嵌套
JPanel
s,并为每个面板提供自己独特的布局管理器。这有时会导致混乱的行为,如果你进入兔子洞太深,把东西分层4+层,但在这种情况下,它使事情更干净
将两个标签添加到带有边框布局的JPanel
,并将它们指定到西部
和东部
位置
将JPanel
添加到顶级JPanel
的NORTH
位置,该位置也具有边框布局。主面板进入中心
为南方做一个类似的歌舞表演-将你的按钮放入一个JPanel,使用你想要的任何布局管理器(FlowLayout
可能很好,你不必添加Box
glue),然后将JPanel
放入顶层面板的south
位置。完成!:) 试试这个
- 北边界布局
- 南水北调
带水平胶的A可能更容易选择。@JBNizet我刚意识到它对North有效,回来后你已经建议过了。但仍然不确定南方是什么。南方是一个胶水,后面是一个按钮,后面是胶水。@JBNizet-对南方来说,FlowLayout.CENTER
不是更容易吗?再说一次,为什么我在发布我的问题之前没有想到呢???我想是的,是的。测试它。是的,我已经为整个屏幕选择了BorderLayout
。您建议对North也使用BorderLayout
,这非常有趣。一些我根本没有考虑过的东西。就嵌套而言,我的主面板已经有3层了。是的,到目前为止,这似乎是最简单的配置。
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.border.*;
public class TestLayout {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
Logger.getLogger(TestLayout.class.getName()).log(Level.SEVERE, null, ex);
}
JButton northLeft = new JButton("Button");
JButton northRight = new JButton("Button");
JButton south = new JButton("Button");
JTextArea text = new JTextArea(10, 40);
JPanel northPanel = new JPanel(new BorderLayout());
northPanel.setBorder(new EmptyBorder(10, 0, 10, 0));
JPanel northWest = new JPanel();
northWest.add(northLeft);
JPanel northEast = new JPanel();
northEast.add(northRight);
northPanel.add(northWest, BorderLayout.WEST);
northPanel.add(northEast, BorderLayout.EAST);
JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
southPanel.setBorder(new EmptyBorder(10, 0, 10, 0));
southPanel.add(south);
JPanel main = new JPanel(new BorderLayout());
main.setBorder(new TitledBorder("BorderLayout"));
main.add(northPanel, BorderLayout.NORTH);
main.add(text);
main.add(southPanel, BorderLayout.SOUTH);
JOptionPane.showMessageDialog(null, main);
}
});
}
}