【问题标题】:Display image when JcomboBox item is selected选择 JcomboBox 项时显示图像
【发布时间】:2014-05-21 22:38:48
【问题描述】:

我想要做的是在从组合框中选择指定项目时显示图像,知道组合框的项目发生变化并且数量不固定。此代码显示了我如何添加取决于我的“for”的项目

for (int j = 1; j <= 6; j++) {
    if (condition) {
    System.out.println(result); 
        combo.addItem("component N°" + j);
    }
}

我需要的是在选择一个项目时显示某个图像!我真的不知道该怎么做。我已经尝试使用 actionlistener 执行 actionperformed,但我不知道如何将选择的项目与我的图像关联起来。

我使用这种方法将图像显示到JPanel

public static void display(String path, JPanel panel) {
    BufferedImage image = null;
    try {
        image = ImageIO.read(new File(path));
    } catch (IOException e2) {

        e2.printStackTrace();
    }
    Image dimg = image.getScaledInstance(panel.getWidth(), panel.getHeight(),
            Image.SCALE_SMOOTH);
    panel.add(new JLabel(new ImageIcon(dimg)));

}

【问题讨论】:

  • 您希望如何将图像与组合框的值关联起来?图像的名称是从所选项目派生的吗?
  • 例如,如果我从 JcomboBox 中选择(组件 N° 2),那么我需要显示的图像是 image2.png (j=2)
  • combo 中的内容与图片有什么关系?如果您不知道这是如何工作的,那么我们的建议将无济于事。一种可能性是设计一个Object,其中包含String 和对要加载的图像的引用。 String 被用作组合框中显示的内容和图像,以便您可以加载/显示它
  • @MadProgrammer 我正在尝试调查此问题,但 OP 正在分块共享代码。我已经浪费了一个多小时来解决它,但我不知道 OP 在做什么。现在请你继续。我要去睡觉了。欲了解更多信息,请阅读我的帖子的 cmets。
  • 1) 为了尽快获得更好的帮助,请发布MCVE(最小完整且可验证的示例)。 2)不要在同一个空间添加多个标签,而只添加一个。保留对它的引用。在执行操作时,为单个标签设置一个新图标。

标签: java swing


【解决方案1】:

例如,如果我从 JcomboBox 中选择(组件 N° 2),那么我需要显示的图像是 image2.png (j=2)

只需添加ActionListener 并从所选项目中检索号码。您可以使用JLabel 来显示图像。只需致电setIcon() 即可更改图标。

示例代码:

//final JLabel label = new JLabel();

final ComboBox<String> jComboBox = new JComboBox<String>();
jComboBox.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String value=(String)jComboBox.getSelectedItem();
        int digit =Integer.valueOf(value.replaceAll("component N°","").trim());
        String imageName="image"+digit+".png";

        // show the image  
        // label.setIcon(...);          
    }
});

请看我的另一篇文章。它可能会帮助您形成正确的图像路径。


我只显示了一张图片,但是当我更改组合框项目时,什么都没有发生

EDIT(在添加新图像之前删除已添加的图像)

 public static void display(String path, JPanel panel){
    ...
    panel.removeAll();                          // Remove already added image
    panel.add(new JLabel(new ImageIcon(dimg))); // Add new image
    panel.revalidate();
    panel.repaint();
 }

【讨论】:

    【解决方案2】:

    要使用 JCombobox,您需要使用 ItemStateChanged 方法。在该方法中,您可以获得选定的索引。然后从索引中就可以得到索引中的数据。现在您有了选择的数据,可以做您想做的事了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多