【问题标题】:Add ActionEvent in Swing [closed]在 Swing 中添加 ActionEvent [关闭]
【发布时间】:2012-02-16 10:34:43
【问题描述】:
class ImageComponent extends JComponent 
        implements MouseListener, MouseMotionListener {
    private final BufferedImage img;
    private Point p1, p2;

    public ImageComponent(File file) throws IOException {
        img = ImageIO.read(file);
        setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
        addMouseListener(this);
        addMouseMotionListener(this);
    }
    @Override protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), this);
        if (p1 != null && p2 != null)
            g.drawLine(p1.x, p1.y, p2.x, p2.y);
    }
    @Override public void mousePressed(MouseEvent e) {
        p1 = e.getPoint();
    }
    @Override public void mouseDragged(MouseEvent e) {
        mouseReleased(e);
    }
    @Override public void mouseReleased(MouseEvent e) {
        p2 = e.getPoint();
        repaint();
    }
    @Override public void mouseMoved(MouseEvent e) {}
    @Override public void mouseClicked(MouseEvent e) {}
    @Override public void mouseEntered(MouseEvent e) {}
    @Override public void mouseExited(MouseEvent e) {}

    public static void main(String[] args) throws Exception {

        JFileChooser chooser=new JFileChooser();
        chooser.setCurrentDirectory(new File(" "));
        chooser.showOpenDialog(new JFrame());
        File file=chooser.getSelectedFile();
        final ImageComponent image = new ImageComponent(file);

        JFrame frame = new JFrame("Test");
        frame.add(new JScrollPane(image));

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        frame.setVisible(true);
}
}

在这段代码中,它直接使用JFileChooser 获取一个文件。 现在我想添加一个按钮,当我单击该按钮时,它应该生成一个ActionEvent 并且应该打开一个JFileChooser 从中我可以选择一个文件,然后它应该在框架上显示该图像。我怎样才能做到这一点? 我创造了类似的东西

JButton open_button=new JButton("Add File");
open_button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                try {
                    JFileChooser chooser = new JFileChooser();
                    chooser.setCurrentDirectory(new File("."));
                    chooser.showOpenDialog(new JFrame());
                    File file = chooser.getSelectedFile();
                    ImageComponent image=new ImageComponent(file);


                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(null, "IOException Occured");
                }
            }

但它不起作用..

【问题讨论】:

  • 如果你知道你的答案,那就闭嘴把它放在这里,否则没有必要对我所知道的以及我应该如何提出任何问题发表任何评论..
  • 请删除此问题,因为答案已在您上一个问题 (SO answer) 的 cmets 中提供。

标签: java image swing graphics


【解决方案1】:

这个答案仅供参考(见原文question/answer):

public static void main(String[] args) {
    final JFrame frame = new JFrame("Test");
    final ImageComponent imageComponent = new ImageComponent();

    frame.add(new JButton(new AbstractAction("Load") {
        @Override
        public void actionPerformed(ActionEvent e) {
            JFileChooser c = new JFileChooser(new File("."));
            if (c.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) {
                try {
                    imageComponent.set(ImageIO.read(c.getSelectedFile()));
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }), BorderLayout.NORTH);
    frame.add(new JScrollPane(imageComponent), BorderLayout.CENTER);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}

还有ImageComponent:

static class ImageComponent extends JComponent 
        implements MouseListener, MouseMotionListener {
    BufferedImage img; 
    Point p1, p2;
    public ImageComponent() {
        addMouseListener(this); addMouseMotionListener(this);
    }
    public void set(BufferedImage img) {
        this.img = img;
        setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
        repaint();
    }
    @Override protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (img != null)
            g.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), this);
        if (p1 != null && p2 != null)
            g.drawLine(p1.x, p1.y, p2.x, p2.y);
    }
    @Override public void mousePressed(MouseEvent e) {
        p1 = e.getPoint();
    }
    @Override public void mouseDragged(MouseEvent e) {
        mouseReleased(e);
    }
    @Override public void mouseReleased(MouseEvent e) {
        p2 = e.getPoint();
        repaint();
    }
    @Override public void mouseMoved(MouseEvent e) {}
    @Override public void mouseClicked(MouseEvent e) {}
    @Override public void mouseEntered(MouseEvent e) {}
    @Override public void mouseExited(MouseEvent e) {}
}

【讨论】:

    【解决方案2】:

    在frame(In JFrame) 对象中添加按钮,并为 Java 中的按钮单击添加ActionListener

    http://leepoint.net/notes-java/GUI/components/20buttons/10jbutton.html

    【讨论】:

    • 谢谢,我已经根据这个编辑了我的帖子,但仍然无法正常工作..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2017-05-11
    • 2015-01-20
    • 1970-01-01
    相关资源
    最近更新 更多