• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

在Swing中添加ActionEvent

java 来源:Parth 8次浏览
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,我可以从中选择一个文件,然后它应该在框架上向我显示该图像。我怎样才能做到这一点? 我创建了类似的东西在Swing中添加ActionEvent

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

但它不工作..


===========解决方案如下:

此答案仅供参考(请参阅原始的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) {} 
} 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)