在我的Swing应用程序中,我希望有以下屏幕布局:
在这里使用BorderLayout
我们放置了三个面板:SOUTH,CENTER,NORTH。
为南面板和北面板选择哪种布局? North有两个组件(标签):左 -justified,右 -justified。 South在中心中有一个组件(按钮)。
我还想让整个屏幕在合理范围内重新调整大小。
在我看来,我必须使用GridLayout
来处理很多空单元格。或者,我可以在整个屏幕上使用单个GridBagLayout
(但这种方法会强制我使用比例宽度的标签和按钮)。
是否有更好的(也可能更容易)选项?
答案 0 :(得分:2)
您可以根据需要对JPanel
进行分层/嵌套,并为每个都提供自己独特的布局管理器。如果你深入挖掘兔子洞并将4个以上的经理深入分层,这有时会导致令人困惑的行为,但在这种情况下,它会使事情更加清晰。
使用JPanel
将您的两个标签添加到BorderLayout
,并将其指定到WEST
和EAST
位置。
将 {/ em> JPanel
添加到顶级NORTH
的{{1}}位置,该位置还有JPanel
。您的主面板会进入BorderLayout
。
为南方做一首类似的歌曲和舞蹈 - 将你的按钮放入一个JPanel,你可以使用你想要的任何布局管理器(CENTER
可能很好,你不必添加FlowLayout
胶水)然后将Box
放入顶级面板的JPanel
位置。完成! :)
答案 1 :(得分:1)
试试这个。
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);
}
});
}
}