在GUI中显示对象数组

时间:2014-05-05 01:22:41

标签: java arrays swing user-interface jframe

我正在开发一个应该跟踪蓝光电影库存的程序。我将电影存储在一个对象数组中(该数组存储了名称,ID,光盘数量和每部电影的价格)。我知道ArrayLists是一种更有效的方法来存储数组中的对象,但是为了这个赋值,我需要使用一个数组。我以前有这个程序打印到控制台没有问题,但我正在尝试将此程序添加到GUI。我已经为GUI编写了一个类,但我无法弄清楚如何将数组添加到JPanel和JFrame。

这是我的GUI类:

class TextInFrame extends JFrame {

    private JLabel greeting;
    private JLabel inventoryUnsorted;
    private JPanel panel;

    public TextInFrame(){
        super("Blu-ray Movie Inventory");
        setLayout(new FlowLayout());
        JFrame.setDefaultLookAndFeelDecorated(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        pack();
        setVisible(true);

        panel = new JPanel();
        greeting = new JLabel(BluRay.programGreeting());
        add(greeting);
        greeting.setVerticalTextPosition(JLabel.BOTTOM);
        greeting.setHorizontalTextPosition(JLabel.CENTER);
        panel.add(greeting);
        this.add(panel);
   }
}

以下是我的主要方法的一部分,其中包含

public class Inventory {

public static void main(String[] args) {

    TextInFrame window = new TextInFrame();
    window.setSize(600, 600);

    BluRay[] movies = new BluRay[5];

    movies[0] = new BluRay("Man of Steel", "48461", 24, 17.99);
    movies[1] = new BluRay("Fast Five", "84624", 10, 12.99);
    movies[2] = new BluRay("Batman Begins", "15483", 19, 13.98);
    movies[3] = new BluRay("X-Men", "48973", 6, 15.99);
    movies[4] = new BluRay("The Outsiders", "01893", 16, 9.98);

    String[] stringArray = Arrays.copyOf(movies, movies.length, String[].class);


    // loop to print through the BluRay movies array
    for (String string : stringArray) {
        System.out.println(string);
    }

每当我尝试将数组添加到JLabel或JPanel中时,我都会收到错误“BluRay []无法转换为String”。我完全不知道如何在GUI中获取此信息。我也遇到了JPanel问候语的问题。调整JFrame大小时不会换行。难住了。

1 个答案:

答案 0 :(得分:4)

看看How to Use Lists,它们将允许您在GUI的列表中显示arrbitraty对象

特别查看Creating a ModelWriting a Custom Cell Renderer

JLabel默认情况下不包装内容。您可以使用JTextArea设置为不可编辑的设置并修改背景颜色和边框,或者只需将JLabel的文本包裹在<HTML>标签中...添加一个不同的布局管理器; )

example