【问题标题】:Integer not written to label整数未写入标签
【发布时间】:2015-08-04 09:41:45
【问题描述】:
if (combostyle.getSelectedItem().equals(" ") || (comboSize.getSelectedItem().equals(" ")) || (comboclr.getSelectedItem().equals(" ")) ) {
    lblqtot.setText(String.valueOf("Please complete the form"));           
}

else if (comboquant.getSelectedItem().equals("15")) {
    int totals = Integer.parseInt(lblTotal.getText());
    int quantity = 15;

            int total = totals * quantity;
            String total2 = String.valueOf(total);

            lblqtot.setText(total2);
            label1.setText(total2);
              repaint();
              this.repaint();
              super.repaint();
                   }
}    

存在一个问题,即总计 (lblqtot) 的标签未使用 total2 的值写入 - 基本上,我有一个总价格需要乘以组合框,所以如果组合框选择(对于数量)等于 15,然后将总数乘以 15 得出总计。 希望这是有道理的......

但目前,标签绝对没有任何反应,但我没有收到任何错误?

【问题讨论】:

  • 如果你是一个绝对的新手,你应该从头开始,而不是从 GUI 开始。话虽这么说:这段代码是执行,还是第一个 if 块执行,(或者这个条件返回 false)?什么是标签1?它设置为可见吗?您可能想显示更多代码和上下文。
  • 你确定total有值吗?
  • 这是在哪个线程上运行的?有一个用于更新 UI 的特定线程。
  • @PhilMarsh 不幸的是,没有简单的捷径。如果你的任务是做一个最小的 GUI;好吧,那是你的任务。这意味着:从基础教程开始,构建超小型应用程序;并开始添加您需要的东西以完成您的任务。当您遇到困难时,请提供一个不起作用的代码的最小示例。从这里,您很可能会更新 jlabel 内容;但您不会强制 UI 重新绘制。
  • @PhilMarsh:不想告诉你,但你的教育充其量是糟糕的。一开始就写gui?在有 Swing 替代品的情况下使用 awt 组件....希望你不介意我告诉这个,不过,看起来你真的很喜欢它,但不要将你的学习过程限制在这位老师的课程中。

标签: java swing user-interface awt


【解决方案1】:

问题可能出在您的 JLabel 上 - 即使您为其分配了新值,它也不会更新。 JLabel 存在于 JFrame 中,一旦创建,它往往会保持其元素的原样。您需要做的是刷新框架:

frame.invalidate(); frame.validate(); frame.repaint();

【讨论】:

  • 非静态方法 invalidate() 不能从静态上下文转换?
  • @PhilMarsh 看来你写了类似 JFrame.invalidate() 的东西......这不起作用。您需要在您创建的 JFrame object 上调用这些方法。长话短说:您应该更好地在接下来的几个小时里阅读 AWT/Swing 教程。否则,您会期望这里的人教您完成工作所需的每一个步骤。你真的认为这是你(和其他人)时间的最佳利用方式吗?
  • 阅读第 9 章 - “带有 Swing 的用户界面组件”:dcc.ufrj.br/~comp2/TextosJava/CJ1.pdf;顺便说一句,我建议阅读整本书
【解决方案2】:

您的问题是您调用getSelectedItem(),它返回一个Object。您可以将其转换为int(例如((Integer)comboquant.getSelectedItem()).intValue() == 15),或者如果项目的索引对应于它的值,那么您可以使用getSelectedIndex()(或getSelectedIndex() + 1,如果您从1开始)。

或者,如果您使用列表中的int 值管理一个数组,那么您可以这样做:arr[comboStyle.getSelectedIndex()]

【讨论】:

  • 马拉卡:我不太确定。如果你看: Object c = new Integer(15); sop(c.equals(15));它会打印真实的。这可能是问题所在,不是这么说,但自动装箱应该会解决这个问题。
  • @Stultuske 不,我认为如果是对象,它会类似于:((XXX)xxx.getSelectedItem()).getValue()
  • 正如我所说,确实有可能。但是,按照您的设置,getItem() 返回一个 Object,getValue() 返回 String 表示形式。
  • @Stultuske 这取决于类XXX,您首先需要转换对象(示例中为XXX)然后调用正确的方法。
  • 嗯...不,它没有。 JComboBox 的 getSelectedItem() 方法(我们正在谈论的)返回一个对象(docs.oracle.com/javase/7/docs/api/javax/swing/…)这很重要,因为这是被问到的。实际上,对于 getValue(),这取决于类型,但由于这并不真正相关(基于 OP 的代码),我只是选择了前面已经提到的示例。
猜你喜欢
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多