【发布时间】:2018-10-30 16:57:18
【问题描述】:
以下代码创建了 12 个面板,每个面板上都有一个标签和一个按钮。
public MainFormWithPanel() {
InventoryFileReader reader = new InventoryFileReader();
ArrayList<Car> cars = reader.getAllCars();
setLayout(new GridLayout(0,4));//set rows to zero so it fills rows first
for(int i = 0; i < cars.size(); i++){
InventoryItemPanel panel = new InventoryItemPanel();
panel.setLabel(cars.get(i).getYear(), cars.get(i).getMake(),
cars.get(i).getModel(),cars.get(i).getMiles(), cars.get(i).getPrice());
add(panel);
}
pack();
initComponents();
}
下面这个类包含我在上面使用的 setLabel 方法,但它不返回我从汽车传递的值。
public class InventoryItemPanel extends JPanel{
public int year;
public String make;
public String model;
public int miles;
public int price;
JLabel label = setLabel(year, make, model, miles, price);
Button button = new Button("View More Details");
public InventoryItemPanel(){
setLayout(new GridLayout(2,1));
add(label);
add(button);
}
public JLabel setLabel(int year, String make, String model, int miles, int price){
Locale locale = new Locale("en", "US");
NumberFormat formatter = NumberFormat.getCurrencyInstance(locale);
return new JLabel("<html>"+ year + " " + make +
" " + model + "<br> " + + miles
+ " miles" + "<br>" + formatter.format(price)+"</html>");
}
}
代码的输出是:
0 null null
0 miles
$0.00
真正的输出应该是什么时候:
2012 Toyota Corolla
70000 Miles
$12,000.00
我应该如何在 MainFormWithPanel 类中实现 InventoryItemPanel 类的 setLabel 方法?
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建 minimal reproducible example。使用edit 链接改进您的问题 - 不要通过 cmets 添加更多信息。谢谢!
-
你只是把你的代码的一部分。我的建议:不要使用 12 个面板。在示例框架中使用 one 面板。然后考虑“复制”它。 (如果您只有 一个 代码,您也可以更轻松地将其提供给我们)。确保你让它工作。为什么你们总是认为“嗯,杂耍很难,所以让我们开始练习 5 个球......而不是说 1 或 2 个”?!
-
我试试看能不能缩短。
标签: java swing methods jpanel awt