1 个 JFrame 中的 2 个不同大小的 JPanel
2 Different sized JPanels in 1 JFrame
我知道还有其他类似的问题,但是 none 这些解决方案对我有用,或者我不知道如何实施这些解决方案。
我正在制作一个非常基本的房间素描器,我有一个带有 jlabels 的侧面板,我将来会拖到更大的 jpanel 上。但是我如何制作一个侧面 JPanel,我可以用它来点击家具并将其拖到那里?
我的代码如下所示:
public class maj11 {
JSplitPane splitPaneV;
JSplitPane splitPaneH;
JFrame frame;
JPanel panel, panel2;
JLabel l1, l2, l3, l4, l5, l6, l7, l8, l9, l10;
ImageIcon b1, b2, b3, b4, b5, b6, b7, b8, b9, b10;
public static void main(String[] args) {
new maj11();
}
public maj11() {
b1 = new ImageIcon("/Users/a/Desktop/nyabilder/toa.png");
b2 = new ImageIcon("/Users/a/Desktop/nyabilder/badkar.png");
b3 = new ImageIcon("/Users/a/Desktop/nyabilder/bank.png");
b4 = new ImageIcon("/Users/a/Desktop/nyabilder/disk.png");
b5 = new ImageIcon("/Users/a/Desktop/nyabilder/dusch.png");
b6 = new ImageIcon("/Users/a/Desktop/nyabilder/fridge.png");
b7 = new ImageIcon("/Users/a/Desktop/nyabilder/soffa.png");
b8 = new ImageIcon("/Users/a/Desktop/nyabilder/spis.png");
b9 = new ImageIcon("/Users/a/Desktop/nyabilder/wall.png");
b10 = new ImageIcon("/Users/a/Desktop/nyabilder/window.png");
l1 = new JLabel(b1);
l2 = new JLabel(b2);
l3 = new JLabel(b3);
l4 = new JLabel(b4);
l5 = new JLabel(b5);
l6 = new JLabel(b6);
l7 = new JLabel(b7);
l8 = new JLabel(b8);
l9 = new JLabel(b9);
l10 = new JLabel(b10);
frame = new JFrame("Room Designer");
panel = new JPanel();
panel2 = new JPanel();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 600);
// frame.pack();
panel.setLayout(new GridLayout(5, 2, 10, 10));
panel.setSize(200, 600);
//panel2.setLayout(new BorderLayout());
panel.add(l1);
panel.add(l2);
panel.add(l3);
panel.add(l4);
panel.add(l5);
panel.add(l6);
panel.add(l7);
panel.add(l8);
panel.add(l9);
panel.add(l10);
frame.add(panel);
}
}
现在的输出是:imgur
我希望它是:imgur
以正确的顺序创建 Swing GUI 会很有帮助。
在main
方法中必须调用SwingUtilities
invokeLater
方法将Swing组件的创建和执行放在Event Dispatch Thread.
然后创建一个JFrame
。创建 JFrame
的方法必须按特定顺序调用。
然后创建您的 JPanels
。我通常在单独的 class.
中创建一个 JPanel
在 JPanel 中按行、列顺序创建您的 Swing 组件。将与每个 Swing 组件相关的方法调用放在一起。
将您的 GUI 代码分开可以帮助您发现错误并帮助您组织代码以使其更易于理解。
我把 ModelingPanel
涂成了橙色,所以你可以看出 IconPanel
和 ModelingPanel
之间的区别。您必须在代码中重新添加您的家具图标。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Maj11 implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Maj11());
}
@Override
public void run() {
JFrame frame = new JFrame("Room Designer");
frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
IconPanel iconPanel = new IconPanel();
frame.add(iconPanel.getPanel(),
BorderLayout.BEFORE_LINE_BEGINS);
ModelingPanel modelingPanel =
new ModelingPanel();
frame.add(modelingPanel.getPanel(),
BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public class IconPanel {
private JPanel panel;
public IconPanel() {
createPartControl();
}
private void createPartControl() {
panel = new JPanel();
panel.setLayout(
new GridLayout(5, 2, 10, 10));
panel.setPreferredSize(
new Dimension(200, 600));
JLabel l1 = new JLabel(" ");
panel.add(l1);
JLabel l2 = new JLabel(" ");
panel.add(l2);
JLabel l3 = new JLabel(" ");
panel.add(l3);
JLabel l4 = new JLabel(" ");
panel.add(l4);
JLabel l5 = new JLabel(" ");
panel.add(l5);
JLabel l6 = new JLabel(" ");
panel.add(l6);
JLabel l7 = new JLabel(" ");
panel.add(l7);
JLabel l8 = new JLabel(" ");
panel.add(l8);
JLabel l9 = new JLabel(" ");
panel.add(l9);
JLabel l10 = new JLabel(" ");
panel.add(l10);
}
public JPanel getPanel() {
return panel;
}
}
public class ModelingPanel {
private JPanel panel;
public ModelingPanel() {
createPartControl();
}
private void createPartControl() {
panel = new JPanel();
panel.setBackground(Color.ORANGE);
panel.setPreferredSize(
new Dimension(600, 600));
}
public JPanel getPanel() {
return panel;
}
}
}
我知道还有其他类似的问题,但是 none 这些解决方案对我有用,或者我不知道如何实施这些解决方案。
我正在制作一个非常基本的房间素描器,我有一个带有 jlabels 的侧面板,我将来会拖到更大的 jpanel 上。但是我如何制作一个侧面 JPanel,我可以用它来点击家具并将其拖到那里?
我的代码如下所示:
public class maj11 {
JSplitPane splitPaneV;
JSplitPane splitPaneH;
JFrame frame;
JPanel panel, panel2;
JLabel l1, l2, l3, l4, l5, l6, l7, l8, l9, l10;
ImageIcon b1, b2, b3, b4, b5, b6, b7, b8, b9, b10;
public static void main(String[] args) {
new maj11();
}
public maj11() {
b1 = new ImageIcon("/Users/a/Desktop/nyabilder/toa.png");
b2 = new ImageIcon("/Users/a/Desktop/nyabilder/badkar.png");
b3 = new ImageIcon("/Users/a/Desktop/nyabilder/bank.png");
b4 = new ImageIcon("/Users/a/Desktop/nyabilder/disk.png");
b5 = new ImageIcon("/Users/a/Desktop/nyabilder/dusch.png");
b6 = new ImageIcon("/Users/a/Desktop/nyabilder/fridge.png");
b7 = new ImageIcon("/Users/a/Desktop/nyabilder/soffa.png");
b8 = new ImageIcon("/Users/a/Desktop/nyabilder/spis.png");
b9 = new ImageIcon("/Users/a/Desktop/nyabilder/wall.png");
b10 = new ImageIcon("/Users/a/Desktop/nyabilder/window.png");
l1 = new JLabel(b1);
l2 = new JLabel(b2);
l3 = new JLabel(b3);
l4 = new JLabel(b4);
l5 = new JLabel(b5);
l6 = new JLabel(b6);
l7 = new JLabel(b7);
l8 = new JLabel(b8);
l9 = new JLabel(b9);
l10 = new JLabel(b10);
frame = new JFrame("Room Designer");
panel = new JPanel();
panel2 = new JPanel();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 600);
// frame.pack();
panel.setLayout(new GridLayout(5, 2, 10, 10));
panel.setSize(200, 600);
//panel2.setLayout(new BorderLayout());
panel.add(l1);
panel.add(l2);
panel.add(l3);
panel.add(l4);
panel.add(l5);
panel.add(l6);
panel.add(l7);
panel.add(l8);
panel.add(l9);
panel.add(l10);
frame.add(panel);
}
}
现在的输出是:imgur
我希望它是:imgur
以正确的顺序创建 Swing GUI 会很有帮助。
在
main
方法中必须调用SwingUtilities
invokeLater
方法将Swing组件的创建和执行放在Event Dispatch Thread.然后创建一个
JFrame
。创建JFrame
的方法必须按特定顺序调用。然后创建您的
JPanels
。我通常在单独的 class. 中创建一个 在 JPanel 中按行、列顺序创建您的 Swing 组件。将与每个 Swing 组件相关的方法调用放在一起。
JPanel
将您的 GUI 代码分开可以帮助您发现错误并帮助您组织代码以使其更易于理解。
我把 ModelingPanel
涂成了橙色,所以你可以看出 IconPanel
和 ModelingPanel
之间的区别。您必须在代码中重新添加您的家具图标。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Maj11 implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Maj11());
}
@Override
public void run() {
JFrame frame = new JFrame("Room Designer");
frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
IconPanel iconPanel = new IconPanel();
frame.add(iconPanel.getPanel(),
BorderLayout.BEFORE_LINE_BEGINS);
ModelingPanel modelingPanel =
new ModelingPanel();
frame.add(modelingPanel.getPanel(),
BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public class IconPanel {
private JPanel panel;
public IconPanel() {
createPartControl();
}
private void createPartControl() {
panel = new JPanel();
panel.setLayout(
new GridLayout(5, 2, 10, 10));
panel.setPreferredSize(
new Dimension(200, 600));
JLabel l1 = new JLabel(" ");
panel.add(l1);
JLabel l2 = new JLabel(" ");
panel.add(l2);
JLabel l3 = new JLabel(" ");
panel.add(l3);
JLabel l4 = new JLabel(" ");
panel.add(l4);
JLabel l5 = new JLabel(" ");
panel.add(l5);
JLabel l6 = new JLabel(" ");
panel.add(l6);
JLabel l7 = new JLabel(" ");
panel.add(l7);
JLabel l8 = new JLabel(" ");
panel.add(l8);
JLabel l9 = new JLabel(" ");
panel.add(l9);
JLabel l10 = new JLabel(" ");
panel.add(l10);
}
public JPanel getPanel() {
return panel;
}
}
public class ModelingPanel {
private JPanel panel;
public ModelingPanel() {
createPartControl();
}
private void createPartControl() {
panel = new JPanel();
panel.setBackground(Color.ORANGE);
panel.setPreferredSize(
new Dimension(600, 600));
}
public JPanel getPanel() {
return panel;
}
}
}