我怎样才能像这样组织我的框架?
How can i organize my frame like this?
我希望我的相框有 3 个看起来像那样的面板
我是 JPanel
的新手,我不会组织它,所以如果有人能提供帮助,我将不胜感激
您必须使用 LayoutManager
。
网上有很多关于 SWING 和布局管理器的信息。
检查
或者仅 google 用于 SWING 和布局。
先看看 Laying Out Components Within a Container。虽然您可以使用 GridBagLayout
,但您可以简单地使用一系列使用 BorderLayouts
的复合容器
例如...
JPanel left = new JPanel(new BorderLayout());
left.add(new TestPane(), BorderLayout.NORTH);
left.add(new TestPane());
JPanel main = new JPanel(new BorderLayout());
main.add(left);
main.add(new TestPane(), BorderLayout.EAST);
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JPanel left = new JPanel(new BorderLayout());
left.add(new TestPane(), BorderLayout.NORTH);
left.add(new TestPane());
JPanel main = new JPanel(new BorderLayout());
main.add(left);
main.add(new TestPane(), BorderLayout.EAST);
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(main);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setBorder(new LineBorder(Color.RED));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
我更喜欢使用 BorderLayout
来排列我的面板。我设置了 3 个面板:东(宽 100px)、北(高 100px)和中心:
public class Frame1 extends JFrame {
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanelEast = new JPanel();
JPanel jPanelCenter = new JPanel();
JPanel jPanelNorth = new JPanel();
BorderLayout borderLayout2 = new BorderLaout();
JPanel jPanelCentral = new JPanel();
public Frame1() {
try {
jbInit();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
void jbInit() throws Exception {
this.getContentPane().setLayout(borderLayout1);
jPanelEast.setBackground(Color.red);
jPanelEast.setForeground(Color.black);
jPanelEast.setMinimumSize(new Dimension(10, 10));
jPanelEast.setOpaque(true);
jPanelEast.setPreferredSize(new Dimension(100, 10));
jPanelCenter.setLayout(borderLayout2);
jPanelNorth.setBackground(Color.lightGray);
jPanelNorth.setMinimumSize(new Dimension(10, 10));
jPanelNorth.setOpaque(true);
jPanelNorth.setPreferredSize(new Dimension(10, 100));
this.getContentPane().add(jPanelEast, BorderLayout.EAST);
this.getContentPane().add(jPanelCenter, BorderLayout.CENTER);
jPanelCenter.add(jPanelNorth, BorderLayout.NORTH);
jPanelCenter.add(jPanelCentral, BorderLayout.CENTER);
}
public static void main(String[] args) {
Frame1 frame1 = new Frame1();
}
}
我希望我的相框有 3 个看起来像那样的面板
我是 JPanel
的新手,我不会组织它,所以如果有人能提供帮助,我将不胜感激
您必须使用 LayoutManager
。
网上有很多关于 SWING 和布局管理器的信息。
检查
或者仅 google 用于 SWING 和布局。
先看看 Laying Out Components Within a Container。虽然您可以使用 GridBagLayout
,但您可以简单地使用一系列使用 BorderLayouts
例如...
JPanel left = new JPanel(new BorderLayout());
left.add(new TestPane(), BorderLayout.NORTH);
left.add(new TestPane());
JPanel main = new JPanel(new BorderLayout());
main.add(left);
main.add(new TestPane(), BorderLayout.EAST);
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JPanel left = new JPanel(new BorderLayout());
left.add(new TestPane(), BorderLayout.NORTH);
left.add(new TestPane());
JPanel main = new JPanel(new BorderLayout());
main.add(left);
main.add(new TestPane(), BorderLayout.EAST);
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(main);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setBorder(new LineBorder(Color.RED));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
我更喜欢使用 BorderLayout
来排列我的面板。我设置了 3 个面板:东(宽 100px)、北(高 100px)和中心:
public class Frame1 extends JFrame {
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanelEast = new JPanel();
JPanel jPanelCenter = new JPanel();
JPanel jPanelNorth = new JPanel();
BorderLayout borderLayout2 = new BorderLaout();
JPanel jPanelCentral = new JPanel();
public Frame1() {
try {
jbInit();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
void jbInit() throws Exception {
this.getContentPane().setLayout(borderLayout1);
jPanelEast.setBackground(Color.red);
jPanelEast.setForeground(Color.black);
jPanelEast.setMinimumSize(new Dimension(10, 10));
jPanelEast.setOpaque(true);
jPanelEast.setPreferredSize(new Dimension(100, 10));
jPanelCenter.setLayout(borderLayout2);
jPanelNorth.setBackground(Color.lightGray);
jPanelNorth.setMinimumSize(new Dimension(10, 10));
jPanelNorth.setOpaque(true);
jPanelNorth.setPreferredSize(new Dimension(10, 100));
this.getContentPane().add(jPanelEast, BorderLayout.EAST);
this.getContentPane().add(jPanelCenter, BorderLayout.CENTER);
jPanelCenter.add(jPanelNorth, BorderLayout.NORTH);
jPanelCenter.add(jPanelCentral, BorderLayout.CENTER);
}
public static void main(String[] args) {
Frame1 frame1 = new Frame1();
}
}