如何向 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);