[英]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
的实例。 所以,我正在寻找一种方法,我可以拥有不同 swing 组件的 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
是显而易见的选择,因为在这种情况下,您需要“面板”行为。
另一种方法是将您的 class + 构造函数转换为创建JPanel
的简单方法,填充它,然后返回它。
其他要点:
Class 名称应始终以大写字母开头。 没有例外。
应谨慎选择 Class 名称:
ItemPanel
是一个显示“项目”的面板。Class
不是惯用的。 您不会称您的狗为“Fido Dog”......而且您在 Java SE 库1中看不到这样的名字。Class
后缀实际上具有误导性,因为它表明(例如) ItemClass
的实例是 Java class 的表示。 (它不是。它是用户界面组件的表示!)1 - 有一两个例外,但这不是重点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.