Java 将不同swing组件的类实例添加到JPanel
我正在尝试创建一个显示在JPanel上的不同项目的网格,如下所示:Java 将不同swing组件的类实例添加到JPanel,java,swing,jframe,Java,Swing,Jframe,我正在尝试创建一个显示在JPanel上的不同项目的网格,如下所示: JPanel secondPanel=newjpanel(); 第二小组:立根(345,40640700); setBackground(新java.awt.Color(90,90100)); //这里第二个面板是一个网格布局。因此,这些项目以网格形式显示。 secondPanel.setLayout(新网格布局(3,3,50,50)); 添加框架(第二个面板); //以下内容用作不同JPanel的示例。我用它来演示项目布局是什
JPanel secondPanel=newjpanel();
第二小组:立根(345,40640700);
setBackground(新java.awt.Color(90,90100));
//这里第二个面板是一个网格布局。因此,这些项目以网格形式显示。
secondPanel.setLayout(新网格布局(3,3,50,50));
添加框架(第二个面板);
//以下内容用作不同JPanel的示例。我用它来演示项目布局是什么样的。
添加(新的JPanel());
添加(新的JPanel());
添加(新的JPanel());
添加(新的JPanel());
添加(新的JPanel());
添加(新的JPanel());
添加(新的JPanel());
添加(新的JPanel());
添加(新的JPanel());
但是,每个项目都具有相同的属性。它们都有一个选择框。它们都有一个JPanel,它们都有一段文本等等。我认为创建一个包含所有这些值的类,然后将这些值添加到JPanel中会更容易,每个值都是一个单独的实例
类别:
import javax.swing.JPanel;
导入javax.swing.JCheckBox;
导入javax.swing.JLabel;
公共类itemClass{
itemClass(字符串名称,双重成本){
JPanel box=新的JPanel();
JLabel namelab=新的JLabel();
nameLabel.setText(名称);
JCheckBox selectBox=新的JCheckBox(“$”+成本);
set前台(新java.awt.Color(80,80,90));
盒子。设置尺寸(50,50);
框。添加(选择框);
}
}
在这里,我尝试创建类实例,并使用add
方法将它们添加到该面板:
for(int i=0;i<9;i++){
第二个面板。添加(新项目类别(“T恤”,20));
}
这里的问题是,
add
方法不接受itemClass
的实例。因此,我正在寻找一种方法,可以拥有一类不同的swing组件,然后将它们添加到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
类需要扩展一些扩展JComponent
的类。扩展JPanel
是显而易见的选择,因为在这种情况下,您需要“面板”行为
另一种方法是将类+构造函数转换为一个简单的方法,创建JPanel
,填充它,然后返回它
其他要点:
- 他们应该描述(或至少暗示)课程的目的;e、 g.
是一个显示“项目”的面板ItemPanel
- 在名称末尾添加
不是惯用法。你不叫你的狗“菲多狗”。。。在Java SE库中,你看不到这样的名称1李>Class
- 实际上,
后缀实际上是误导性的,因为它表明(比如)Class
的实例是Java类的表示。(它不是。它是用户界面组件的表示!)ItemClass
1-有一两个例外,但这与问题无关。你可以这样写:
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
类需要扩展一些扩展JComponent
的类。扩展JPanel
是显而易见的选择,因为在这种情况下,您需要“面板”行为
另一种方法是将类+构造函数转换为一个简单的方法,创建JPanel
,填充它,然后返回它
其他要点:
- 他们应该描述(或至少暗示)课程的目的;e、 g.
是一个显示“项目”的面板ItemPanel
- 在名称末尾添加
不是惯用法。你不叫你的狗“菲多狗”。。。在Java SE库中,你看不到这样的名称1李>Class
- 实际上,
后缀实际上是误导性的,因为它表明(比如)Class
的实例是Java类的表示。(它不是。它是用户界面组件的表示!)ItemClass
1-有一两个例外,但这与问题无关。这是可行的,但是,我的IDE提示我添加
private static final long serialVersionUID=8013287075740780359L代码>。这个UID
的目的是什么?我还注意到this.setForeground(新的java.awt.Color(80,80,90))
和这个。setSize(50,50)
不会改变任何东西。我说的是“像这样的东西”。我的目标是让你克服概念上的障碍,而不是解决你所有的问题。但是UID是关于序列化的。如果这与您相关,那么请阅读这篇文章,但是,我的IDE提示我添加private static final long serialVersionUID=8013287075740780359L代码>。这个UID
的目的是什么?我还注意到this.setForeground(新的java.awt.Color(80,80,90))
和这个。setSize(50,50)
不会改变任何东西。我说的是“像这样的东西”。我的目标是让你克服概念上的障碍,而不是解决你所有的问题。但是UID是关于序列化的。如果这与您相关,那么请尽快阅读以获得更好的帮助,添加or。要更快获得更好的帮助,请添加or。