如何使用按钮按下操作在面板中显示图像

时间:2014-03-24 14:41:04

标签: java swing jbutton

我想通过按下按钮在面板上显示图像。我创建了一些代码

JButton btnNewButton = new JButton("next");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            if(i<files1.length){
                BufferedImage bi;
                try {
                    bi = ImageIO.read(new File(""+files1[i]));
                    System.out.println(files1[i]);
                    JLabel label = new JLabel(new ImageIcon(bi));
                    panel_1.add(label);
                    panel_1.repaint();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            else
                System.out.println("end of picture");
            i++;
        }
    });

但点击按钮图像后没有显示。

3 个答案:

答案 0 :(得分:1)

我的Java不是最好的。但显然我会说:

if(button.isPressed()) {
    Panel.visible;
}

我不知道确切的方法。这更像是一个建议。

答案 1 :(得分:1)

  

但点击按钮图像后没有显示。

看起来你错过了revalidate()。将组件添加到可见GUI时的基本代码是:

panel.add(....);
panel.revalidate(); // to invoke the layout manager
panel.repaint();

答案 2 :(得分:-1)

您只将部分代码置于非工作状态。尝试包括所有相关代码(在这种情况下包括面板和i的定义)或条带向下以显示什么不起作用。对我来说这很有效:

public class Test {

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        final JLabel label = new JLabel();
        JButton button = new JButton("next");

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                BufferedImage bi = null;
                try {
                    bi = ImageIO.read(new File("pathtofile"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
                label.setIcon(new ImageIcon(bi));
            }
        });

        frame.setContentPane(new JPanel());
        frame.getContentPane().add(button);
        frame.getContentPane().add(label);
        frame.pack();
        frame.setVisible(true);
    }
}

但是,请考虑JLabel不是为了以图库风格显示图像。考虑JScrollPane,如here所示。