我正在尝试使用嵌套的JPanel,然后我可以在我的应用程序的不同部分重用它,例如页面顶部的导航栏。我无法设置项目的方向,例如我希望按钮位于文本字段上方。
如果我单独创建它们并将它们直接添加到JPanel中,那么它们将作为一个整体出现在另一个之上,如下所示:
final JFrame frame = new JFrame("Nested Layout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel gui = new JPanel(new BorderLayout(5,5));
gui.setBorder( new TitledBorder("BorderLayout(5,5)") );
JButton button = new JButton("Button");
JButton button1 = new JButton("Button1");
gui.add(button, BorderLayout.NORTH);
gui.add(button1, BorderLayout.SOUTH);
frame.setContentPane(gui);
frame.pack();
frame.setLocationRelativeTo(null);
try {
// 1.6+
frame.setLocationByPlatform(true);
frame.setMinimumSize(frame.getSize());
} catch(Throwable ignoreAndContinue) {
}
frame.setVisible(true);
但是,如果我创建一个嵌套的JPanel并将其放在另一个JPanel中,那么我可以重用它,它们并排出来,如下所示:
final JFrame frame = new JFrame("Nested Layout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel gui = new JPanel(new BorderLayout(5,5));
gui.setBorder( new TitledBorder("BorderLayout(5,5)") );
JPanel container = new JPanel();
JButton button = new JButton("Button");
JButton button1 = new JButton("Button1");
container.add(button, BorderLayout.NORTH);
container.add(button1, BorderLayout.SOUTH);
gui.add(container);
frame.setContentPane(gui);
frame.pack();
frame.setLocationRelativeTo(null);
try {
// 1.6+
frame.setLocationByPlatform(true);
frame.setMinimumSize(frame.getSize());
} catch(Throwable ignoreAndContinue) {
}
frame.setVisible(true);
我尝试过设置componentsnetOrientation,
container.setComponentOrientation(ComponentOrientation.);
但没有垂直
的选项答案 0 :(得分:1)
我尝试过设置componentsnetOrientation
请注意问题与组件方向无关:这是布局管理器问题,如下所述。
但是,如果我创建一个嵌套的JPanel并将其放在另一个JPanel中,那么我可以重用它,它们并排出来
下面:
JPanel container = new JPanel();
...
container.add(button, BorderLayout.NORTH);
container.add(button1, BorderLayout.SOUTH);
面板的默认布局管理器为FlowLayout,它将忽略BorderLayout
个约束。您必须将BorderLayout设置为布局管理器,不仅要设置到gui
面板,还要设置为container
面板。
JPanel container = new JPanel(new BorderLayout());
...
container.add(button, BorderLayout.NORTH);
container.add(button1, BorderLayout.SOUTH);
答案 1 :(得分:0)
尝试为JPanel设置布局。包 java.awt 中有许多可用的布局。其中一些是BorderLayout,GridBagLayout,CardLayout,FlowLayout,GridLayout。
我刚刚为您的代码添加了一行,现在,它按照您想要的方式添加按钮:
final JFrame frame = new JFrame("Nested Layout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel gui = new JPanel(new BorderLayout(5,5));
gui.setBorder( new TitledBorder("BorderLayout(5,5)") );
JPanel container = new JPanel();
container.setLayout(new GridLayout(2,1)); // This is the line that I have added.
JButton button = new JButton("Button");
JButton button1 = new JButton("Button1");
container.add(button, BorderLayout.NORTH);
container.add(button1, BorderLayout.SOUTH);
gui.add(container);
frame.setContentPane(gui);
frame.pack();
frame.setLocationRelativeTo(null);
try {
// 1.6+
frame.setLocationByPlatform(true);
frame.setMinimumSize(frame.getSize());
} catch(Throwable ignoreAndContinue) {
}
frame.setVisible(true);
如果要添加更多按钮,可以编辑该行。 GridLayout的构造函数方法的第一个参数是垂直列的数量,第二个是水平列的数量。