如何向 JFrame 添加自定义组件?
How to add a custom component to JFrame?
我在向 JFrame
添加新对象(我的自定义 class TemplatesList
)时遇到问题。我之前向 JFrame 添加了一个 Picture
对象,效果很好。但是当我想添加一个我自己的对象 class 时,它 returns 由于某种原因出错了。
你能帮我找出问题所在吗?我会感激的。
错误显示:cannot resolved method add(lista)
当我尝试添加时:
TemplatesList lista = new TemplatesList();
frame.add(lista);
代码如下:
import javax.swing.*;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JList;
public class ChoosingPage
{
static JFrame frame;
JLabel choose;
public ChoosingPage ()
{
frame = new JFrame ("Primark's templates");
frame.setSize(500,500);
frame.setLocation(50,50);
frame.setLayout(new FlowLayout(FlowLayout.CENTER));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setBackground(Color.WHITE);
frame.getContentPane().setBackground(Color.WHITE);
choose = new JLabel("choose your template");
choose.setSize(choose.getPreferredSize());
//choose.setLocation(20,20);
frame.add(choose);
Picture zdjecie = new Picture();
frame.add(zdjecie);
TemplatesList lista = new TemplatesList();
frame.add(lista);
frame.setVisible(true);
}
public static void main (String [] args)
{
new ChoosingPage();
}
}
和我想添加到 JFrame 的 class:
import javax.swing.*;
public class TemplatesList
{
private JComboBox faceCombo;
public TemplatesList()
{
faceCombo = new JComboBox();
faceCombo.setEditable(false);
faceCombo.addItem("change request");
faceCombo.addItem("Emergancy Change request");
faceCombo.addItem("problem request");
faceCombo.addItem("problem handover");
}
}
您只能将 Component
类型的对象添加到 JFrame。您的 class 扩展了 Object
(默认情况下)。所以你必须改变你的 class 看起来像
import javax.swing.*;
public class TemplatesList extends JComboBox<String>
{
public TemplatesList()
{
setEditable(false);
addItem("change request");
addItem("Emergancy Change request");
addItem("problem request");
addItem("problem handover");
}
}
作为 JComboBox
扩展 Component
。因此,通过扩展 JComboBox
,您的 TemplatesList
class 也扩展了 Component
.
那么你可以使用:
TemplatesList lista = new TemplatesList();
frame.add(lista);
我在向 JFrame
添加新对象(我的自定义 class TemplatesList
)时遇到问题。我之前向 JFrame 添加了一个 Picture
对象,效果很好。但是当我想添加一个我自己的对象 class 时,它 returns 由于某种原因出错了。
你能帮我找出问题所在吗?我会感激的。
错误显示:cannot resolved method add(lista)
当我尝试添加时:
TemplatesList lista = new TemplatesList();
frame.add(lista);
代码如下:
import javax.swing.*;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JList;
public class ChoosingPage
{
static JFrame frame;
JLabel choose;
public ChoosingPage ()
{
frame = new JFrame ("Primark's templates");
frame.setSize(500,500);
frame.setLocation(50,50);
frame.setLayout(new FlowLayout(FlowLayout.CENTER));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setBackground(Color.WHITE);
frame.getContentPane().setBackground(Color.WHITE);
choose = new JLabel("choose your template");
choose.setSize(choose.getPreferredSize());
//choose.setLocation(20,20);
frame.add(choose);
Picture zdjecie = new Picture();
frame.add(zdjecie);
TemplatesList lista = new TemplatesList();
frame.add(lista);
frame.setVisible(true);
}
public static void main (String [] args)
{
new ChoosingPage();
}
}
和我想添加到 JFrame 的 class:
import javax.swing.*;
public class TemplatesList
{
private JComboBox faceCombo;
public TemplatesList()
{
faceCombo = new JComboBox();
faceCombo.setEditable(false);
faceCombo.addItem("change request");
faceCombo.addItem("Emergancy Change request");
faceCombo.addItem("problem request");
faceCombo.addItem("problem handover");
}
}
您只能将 Component
类型的对象添加到 JFrame。您的 class 扩展了 Object
(默认情况下)。所以你必须改变你的 class 看起来像
import javax.swing.*;
public class TemplatesList extends JComboBox<String>
{
public TemplatesList()
{
setEditable(false);
addItem("change request");
addItem("Emergancy Change request");
addItem("problem request");
addItem("problem handover");
}
}
作为 JComboBox
扩展 Component
。因此,通过扩展 JComboBox
,您的 TemplatesList
class 也扩展了 Component
.
那么你可以使用:
TemplatesList lista = new TemplatesList();
frame.add(lista);