在Swing中添加ActionEvent [英] Add ActionEvent in Swing

查看:133
本文介绍了在Swing中添加ActionEvent的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 类ImageComponent继承JComponent 
实现MouseListener,MouseMotionListener {
private final BufferedImage img;
私人点p1,p2;
$ b $ 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());
文件文件= 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);




$ b $ p
$ b

在这段代码中,它使用 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);

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

但它不工作..

解决方案

此答案仅供参考(请参阅原始问题/答案):

  public static void main(String [] args){
final JFrame fram e =新的JFrame(Test);
final ImageComponent imageComponent = new ImageComponent();
$ b 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。北);
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 
实现MouseListener,MouseMotionListener {
BufferedImage img;
Point p1,p2;
public ImageComponent(){
addMouseListener(this); addMouseMotionListener(本);
}
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){}
}


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);
}
}

Here in this code, it takes a file using JFileChooser directly. Now i want to add a button on which when i click, it should generates an ActionEvent and should open a JFileChooser from which i can choose a file and then it should show me that image on frame. How can i do that? I Have created something like that

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");
                }
            }

But it isn't working..

解决方案

This answer is just for reference (see the original 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);
}

And the 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) {}
}

这篇关于在Swing中添加ActionEvent的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆