Java 一个JFrame中的两个JPanel
我想在一个JFrame中使用两个JPanel,它们之间有一条不可见的水平线。我玩了一点,得到了这个:Java 一个JFrame中的两个JPanel,java,swing,jpanel,Java,Swing,Jpanel,我想在一个JFrame中使用两个JPanel,它们之间有一条不可见的水平线。我玩了一点,得到了这个: public class Application { public static void main(String[] args) { JFrame jframe = new JFrame(); jframe.setSize(500,700); jframe.setVisible(true); j
public class Application {
public static void main(String[] args)
{
JFrame jframe = new JFrame();
jframe.setSize(500,700);
jframe.setVisible(true);
jframe.setTitle("Title");
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setResizable(false);
JSplitPane splitPane = new JSplitPane();
JPanel leftPanel = new JPanel();
JPanel rightPanel = new JPanel();
splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setDividerLocation(250);
splitPane.setLeftComponent(leftPanel);
splitPane.setRightComponent(rightPanel);
jframe.add(splitPane);
}
}
现在,第一个问题是如何关闭面板之间线条的“可调整大小”?我如何让它“隐形”?也许可以使用其他东西而不是分割窗格
其次,如何仅使用JPanel
的一面?
(我正在开发一个应用程序,它可以让你在左手边画一个圆)
这似乎是一个简单的问题,但我对Java还比较陌生。看起来您可以使用GridLayout来完成这项工作。这是我的想法
public class Application {
public static void main(String[] args) {
JFrame jframe = new JFrame();
jframe.setTitle("Title");
jframe.setResizable(false);
//This creates one row and two equally divided columns
GridLayout gridLayout = new GridLayout(0, 2);
jframe.setLayout(gridLayout);
gridLayout.layoutContainer(jframe);
JPanel leftPanel = new JPanel();
leftPanel.add(new Label("Left side"));
jframe.add(leftPanel);
JPanel rightPanel = new JPanel();
rightPanel.add(new Label("Right side"));
jframe.add(rightPanel);
jframe.setSize(800, 500);
jframe.setVisible(true);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
下面是它的外观:
面板不会调整大小,也不会有可见的线条分隔它们。看起来您可以使用GridLayout来完成此操作。这是我的想法
public class Application {
public static void main(String[] args) {
JFrame jframe = new JFrame();
jframe.setTitle("Title");
jframe.setResizable(false);
//This creates one row and two equally divided columns
GridLayout gridLayout = new GridLayout(0, 2);
jframe.setLayout(gridLayout);
gridLayout.layoutContainer(jframe);
JPanel leftPanel = new JPanel();
leftPanel.add(new Label("Left side"));
jframe.add(leftPanel);
JPanel rightPanel = new JPanel();
rightPanel.add(new Label("Right side"));
jframe.add(rightPanel);
jframe.setSize(800, 500);
jframe.setVisible(true);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
下面是它的外观:
面板将不会调整尺寸,也不会有可见的线将它们分开。
正如前面所说的,在“MadProgrammer”中,你可以使用,但是当你将“分割”线放在两个面板的中间时,无论窗口大小如何调整,都可以使这两个面板具有相同的大小。
我没有尝试使用GridBagLayout
,但我做了一个示例,说明如何在不使用JSplitPane
的情况下实现此窗格分离
使用GridLayout
时,只需将元素添加到左窗格(在我的示例中,我使用JLabel
来区分它们),而在BorderLayout
中,您需要指定将绘制圆的面板向左对齐(WEST
常量)
但是,如果您使用BorderLayout
方法并将文本或元素添加到右侧窗格中,它们将向右对齐,您可以通过使用不同的样式“装箱”另一个窗格中的元素来解决此问题
在本例中,我没有调用pack()
,因为在本例中,两个面板(或JLabel
s)的大小不够高,无法显示差异:
使用pack()
:
调用setSize()
:
附加提示
main
方法中写入以下行来实现的:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Application().createAndShowGui();
}
});
正如前面提到的,在“MadProgrammer”中,你可以使用,但是当你将“分割”线放在两个面板的中间时,你可以使用这两个面板,无论窗口大小是否改变,都可以使两个面板具有相同的大小。 我没有尝试使用
GridBagLayout
,但我做了一个示例,说明如何在不使用JSplitPane
的情况下实现此窗格分离
使用GridLayout
时,只需将元素添加到左窗格(在我的示例中,我使用JLabel
来区分它们),而在BorderLayout
中,您需要指定将绘制圆的面板向左对齐(WEST
常量)
但是,如果您使用BorderLayout
方法并将文本或元素添加到右侧窗格中,它们将向右对齐,您可以通过使用不同的样式“装箱”另一个窗格中的元素来解决此问题
在本例中,我没有调用pack()
,因为在本例中,两个面板(或JLabel
s)的大小不够高,无法显示差异:
使用pack()
:
调用setSize()
:
附加提示
main
方法中写入以下行来实现的:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Application().createAndShowGui();
}
});
使用
GridBagLayout
或BorderLayout
代替使用GridBagLayout
或BorderLayout
代替谢谢,这就是我一直在寻找的。但这项任务似乎不像我想象的那么简单。我现在如何处理左侧?我有一个类DrawCircle,可以用鼠标单击来画一个圆。leftPanel.add(c)不起作用。@MassU:请理解此答案中的一些代码不符合Swing最佳实践,包括在组件上调用setSize(…)
,以及调用setVisible(true)在将所有组件添加到GUI之前,在JFrase>上,可以阻止一些组件的显示。请强烈考虑Frk酷的答案。当然,同意@气垫船充满鳗鱼。我的代码不遵循最佳格式。我没有编辑MasSU的代码。谢谢,这正是我正在寻找的。但是看来这项任务不是。和我想的一样简单。我现在如何使用左边?我有一个类DrawCircle,在这个类中,人们可以用鼠标单击来画一个圆。leftPanel.add(c)不起作用。@MassU:请理解,这个答案有一些代码不符合Swing最佳实践,包括调用setSize(…)
在组件上,同时调用setVisible(true)在将所有组件添加到GUI之前,请在JFrice上添加一些可以防止某些组件显示的东西。请强烈考虑Frk酷的答案。当然,同意@气垫船充满鳗鱼。我的代码没有遵循最佳格式。我没有编辑MasSU的代码。我的钱在这个答案上,非常感谢。但是现在我的应用程序eems相当麻烦。要么根本不显示圆圈,要么在完全不同的位置(以及在整个画面上)显示圆圈。我用新类编辑了我的帖子。@MassU这个问题是关于如何将两个JPanel放在同一个JFrame上的,这个问题在这个答案中得到了回答。请用你的新代码问另一个问题,以及你遇到的问题。另外,别忘了接受答案。我的钱在这个答案上哇,非常感谢。但是现在我的应用程序看起来非常有用四轮马车。两个圆圈都不显示