将不同 swing 组件的 class 个实例添加到 JPanel
Adding a class instance of different swing components to a JPanel
我正在尝试创建一个显示在 JPanel 上的不同项目的网格,如下所示:
JPanel secondPanel = new JPanel();
secondPanel.setBounds(345,40,640,700);
secondPanel.setBackground(new java.awt.Color(90,90,100));
// Here secondPanel is given a gridlayout. So the items appear in a gridded look.
secondPanel.setLayout(new GridLayout(3,3,50,50));
frame.add(secondPanel);
// The following are used as an example of different JPanels. I am using this to give a demonstration of how the item layout would sort of look like.
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
但是,每个项目都具有相同的属性。它们都有一个 select 框。他们都有一个 JPanel,他们都有一段文本等。我认为创建一个包含所有这些值的 class 会更容易,然后将它们添加到 JPanel,每个都是一个单独的实例.
Class:
import javax.swing.JPanel;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
public class itemClass {
itemClass(String name, double cost){
JPanel box = new JPanel();
JLabel nameLabel = new JLabel();
nameLabel.setText(name);
JCheckBox selectBox = new JCheckBox("$ "+cost);
box.setForeground(new java.awt.Color(80,80,90));
box.setSize(50, 50);
box.add(selectBox);
}
}
我在这里尝试创建 class 个实例并使用 add
方法将它们添加到该面板:
for (int i = 0; i < 9; i ++) {
secondPanel.add(new itemClass("T-Shirt",20));
}
这里的问题是 add
方法不接受 itemClass
的实例。所以,我正在寻找一种方法,我可以拥有 class 不同的摆动组件,然后将它们添加到 secondPanel
面板。
你可以这样写:
import javax.swing.JPanel;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
public class ItemPanel extends JPanel {
ItemPanel(String name, double cost){
JLabel nameLabel = new JLabel();
nameLabel.setText(name);
this.add(nameLabel); // added this!
JCheckBox selectBox = new JCheckBox("$ " + cost);
this.setForeground(new java.awt.Color(80, 80, 90));
this.setSize(50, 50);
this.add(selectBox);
}
}
关键是您的 ItemPanel
class 需要扩展一些扩展 JComponent
的 class。扩展 JPanel
是显而易见的选择,因为在这种情况下您需要 "panel" 行为。
另一种方法是将您的 class + 构造函数变成一个简单的方法,创建一个 JPanel
,填充它,然后 returns 它。
其他要点:
Class 名称应始终 以大写字母开头。没有例外。
Class 名字慎选:
- 他们应该描述(或至少暗示)class 的目的;例如
ItemPanel
是一个显示 "item". 的面板
- 在名称末尾添加
Class
不符合习惯。你不会叫你的狗 "Fido Dog" ...而且你不会在 Java SE 库 1 中看到这样的名字。
- 事实上,
Class
后缀实际上是误导性的,因为它 建议 实例 的(例如)ItemClass
是 Java class 的 表示 。 (不是。它是用户界面组件的表示!)
1 - 有一两个例外,但这不是重点。
我正在尝试创建一个显示在 JPanel 上的不同项目的网格,如下所示:
JPanel secondPanel = new JPanel();
secondPanel.setBounds(345,40,640,700);
secondPanel.setBackground(new java.awt.Color(90,90,100));
// Here secondPanel is given a gridlayout. So the items appear in a gridded look.
secondPanel.setLayout(new GridLayout(3,3,50,50));
frame.add(secondPanel);
// The following are used as an example of different JPanels. I am using this to give a demonstration of how the item layout would sort of look like.
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
secondPanel.add(new JPanel());
但是,每个项目都具有相同的属性。它们都有一个 select 框。他们都有一个 JPanel,他们都有一段文本等。我认为创建一个包含所有这些值的 class 会更容易,然后将它们添加到 JPanel,每个都是一个单独的实例.
Class:
import javax.swing.JPanel;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
public class itemClass {
itemClass(String name, double cost){
JPanel box = new JPanel();
JLabel nameLabel = new JLabel();
nameLabel.setText(name);
JCheckBox selectBox = new JCheckBox("$ "+cost);
box.setForeground(new java.awt.Color(80,80,90));
box.setSize(50, 50);
box.add(selectBox);
}
}
我在这里尝试创建 class 个实例并使用 add
方法将它们添加到该面板:
for (int i = 0; i < 9; i ++) {
secondPanel.add(new itemClass("T-Shirt",20));
}
这里的问题是 add
方法不接受 itemClass
的实例。所以,我正在寻找一种方法,我可以拥有 class 不同的摆动组件,然后将它们添加到 secondPanel
面板。
你可以这样写:
import javax.swing.JPanel;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
public class ItemPanel extends JPanel {
ItemPanel(String name, double cost){
JLabel nameLabel = new JLabel();
nameLabel.setText(name);
this.add(nameLabel); // added this!
JCheckBox selectBox = new JCheckBox("$ " + cost);
this.setForeground(new java.awt.Color(80, 80, 90));
this.setSize(50, 50);
this.add(selectBox);
}
}
关键是您的 ItemPanel
class 需要扩展一些扩展 JComponent
的 class。扩展 JPanel
是显而易见的选择,因为在这种情况下您需要 "panel" 行为。
另一种方法是将您的 class + 构造函数变成一个简单的方法,创建一个 JPanel
,填充它,然后 returns 它。
其他要点:
Class 名称应始终 以大写字母开头。没有例外。
Class 名字慎选:
- 他们应该描述(或至少暗示)class 的目的;例如
ItemPanel
是一个显示 "item". 的面板
- 在名称末尾添加
Class
不符合习惯。你不会叫你的狗 "Fido Dog" ...而且你不会在 Java SE 库 1 中看到这样的名字。 - 事实上,
Class
后缀实际上是误导性的,因为它 建议 实例 的(例如)ItemClass
是 Java class 的 表示 。 (不是。它是用户界面组件的表示!)
- 他们应该描述(或至少暗示)class 的目的;例如
1 - 有一两个例外,但这不是重点。