【问题标题】:How do I use the public variables and methods in this class?如何在这个类中使用公共变量和方法?
【发布时间】: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


【解决方案1】:

尝试修改行:

    add(panel);

MainFormWithPanel 到:

    add(panel.setLabel(cars.get(i).getYear(), cars.get(i).getMake(), 
       cars.get(i).getModel(),cars.get(i).getMiles(), cars.get(i).getPrice()));

【讨论】:

  • 遇到类型不兼容的错误,但还是值得一试,谢谢。
  • 啊,是的,因为面板是 InventoryItemPanel 而不是 JLabel。我已经编辑了上面的答案。只要您的 add 方法可以将 JLabel 作为参数,它就应该可以工作。
  • 王牌!实例变量不会存储任何东西,所以一旦你触发它们,它们就会消失,除非你直接对它们做些什么。请设置为接受作为答案并投票:)
猜你喜欢
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
相关资源
最近更新 更多