【问题标题】:Code is not working for swing image button代码不适用于摆动图像按钮
【发布时间】:2013-12-06 03:04:48
【问题描述】:

我已经编写了这段代码来显示图像而不是按钮跟随 This answer

我的代码是:

JButton btnCalender;
    try {
        
        BufferedImage calendarIcon = ImageIO.read(new File("Calendar_0.jpg"));
        btnCalender = new JButton("Calendar", new ImageIcon(calendarIcon));
        btnCalender.setBorder(BorderFactory.createEmptyBorder());
        btnCalender.setContentAreaFilled(false);
        btnCalender.setBounds(244, 177, 129, 36);
        frmOptions.getContentPane().add(btnCalender);
        btnCalender.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    

但是图片没有显示。按钮区域为空白。所有图像都在项目文件夹中。 为什么会这样?请给我解决方案。谢谢。

编辑: 找到解决方案。 我的图像分辨率太大了。我已将其压缩为 144*144。 现在它正在工作。

【问题讨论】:

  • 对我来说没有问题。
  • 您是否从任何 IDE 运行它?为什么要将图像保存在源文件夹中?
  • 是的。所有图像都在 src 文件夹中。我也将这些图像放在项目文件夹中。但不工作。 IDE 与 windowbuilder 相得益彰。
  • 看起来路径不正确。对于调试 porpuses,请尝试绝对设置路径图像。

标签: java swing jbutton


【解决方案1】:

您发布的代码看起来不错。如果没有其余代码,很难确定,但您遇到的问题似乎与实际将按钮放在 GUI 上有关。

仔细检查没有发现/加载图像的任何 IOExceptions。

【讨论】:

  • 没有 I/O 异常。我已经检查过了。图像也在项目文件夹中。但现在仍然没有结果。
  • 请发布一个 SSCCE,因为还有其他事情发生,您当时不包括在内。
【解决方案2】:

您是否尝试过添加:

btnCalender.setContentAreaFilled(false);

【讨论】:

    【解决方案3】:

    尝试像这样移除边框和内容区域:

    BufferedImage calendarIcon = ImageIO.read(new File("Calendar_0.jpg"));
    btnCalender = new JButton("Back", new ImageIcon(calendarIcon));
    btnCalender.setBorder(BorderFactory.createEmptyBorder());
    btnCalender.setContentAreaFilled(false);
    

    【讨论】:

    • 我已经尝试过这段代码,它对我有用,请检查图像是否存在并且在 rigth 目录中
    【解决方案4】:

    您可以尝试两件事,首先确保您已为 contentPane 指定了布局“精确定位”
    frmOptions.getContentPane().setLayout(null);
    并且确保在添加 jbutton 后重新绘制您的 contentPane像这样的组件
    frmOptions.getContentPane().repaint();
    请记住在将按钮添加到 contentPane 之后放置它!

    【讨论】:

      【解决方案5】:
      JFrame f = new JFrame("This is a test");
          f.setSize(400, 150);
          Container content = f.getContentPane();
          BufferedImage calendarIcon = ImageIO.read(new File("C:\\Documents and Settings\\sugandhan\\Desktop\\suganthan.jpg"));
          content.add(new JButton("Calendar", new ImageIcon(calendarIcon)));
          f.setVisible(true);
      

      请检查你的图片路径

      【讨论】:

        【解决方案6】:

        首先,您不需要缓冲图像来执行此操作,其次您必须像这样更正图像的链接:

        JFrame frmOptions = new JFrame();

        JButton btnCalender = new JButton("Calendar", new ImageIcon(
                "./src/Calendar_0.jpg"));
        btnCalender.setBorder(BorderFactory.createEmptyBorder());
        btnCalender.setContentAreaFilled(false);
        btnCalender.setBounds(244, 177, 129, 36);
        
        btnCalender.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        frmOptions.getContentPane().add(btnCalender);
        frmOptions.setDefaultCloseOperation(3);
        frmOptions.pack();
        frmOptions.setLocationRelativeTo(null);
        frmOptions.setVisible(true);
        

        希望对你有帮助,如果有请补上 ;) Salam

        【讨论】:

          猜你喜欢
          • 2019-08-16
          • 1970-01-01
          • 2017-04-09
          • 1970-01-01
          • 2021-11-30
          • 2020-01-20
          • 2017-11-09
          • 2023-01-26
          • 2012-11-15
          相关资源
          最近更新 更多