我正在开发一个应该跟踪蓝光电影库存的程序。我将电影存储在一个对象数组中(该数组存储了名称,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大小时不会换行。难住了。
答案 0 :(得分:4)
看看How to Use Lists,它们将允许您在GUI的列表中显示arrbitraty对象
特别查看Creating a Model和Writing a Custom Cell Renderer
JLabel
默认情况下不包装内容。您可以使用JTextArea
设置为不可编辑的设置并修改背景颜色和边框,或者只需将JLabel
的文本包裹在<HTML>
标签中...添加一个不同的布局管理器; )