如何将自定义组件添加到JFrame?

时间:2019-03-26 12:41:44

标签: java swing jframe

在将新对象(自定义类TemplatesList)添加到JFrame时遇到问题。我之前在JFrame中添加了一个Picture对象,并且效果很好。但是,当我想添加自己的类的对象时,由于某种原因它会返回错误。 您能帮我找出问题吗?我会推荐。

错误提示: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的类:

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");

    }
}

1 个答案:

答案 0 :(得分:1)

您只能将类型Component的对象添加到JFrame。您的课程扩展了Object(默认情况下)。因此,您必须更改班级以使其看起来像

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类也将扩展Component

然后您可以使用:

TemplatesList lista = new TemplatesList();
frame.add(lista);