Swing:在JComponent / JPanel中可以单击多个图像

时间:2015-09-09 13:25:24

标签: java swing jpanel bufferedimage jcomponent

我想在JFrame中添加多个图像,并使每个图像都可以点击。由于无法在Swing中直接在图像上实现侦听器,因此我必须创建那些JComponent个对象并在这些组件上实现侦听器。

这种理解是正确的还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

有几种方法可以解决这个问题:

  1. 创建自己的类并将其扩展为JComponent

    class ClickableImage extends JComponent implements MouseListener
    {
        private BufferedImage img;
    
        //Include all the overridden methods for MouseListener
        @Override public void mouseClicked(MouseEvent e){
            //To do upon clicking on image;
        }
    }
    
  2. 您可以在JButton上设置图像。为那些JButton添加一个ActionListener。

  3. 对图像使用BufferedImage,通过鼠标光标位置检测单击该图像。

    class ClikableImage extends Rectangle{
        private BufferedImage img;
        //You can include any other class members you need.
    
        public MyClickableImage(int x, int y, int width, int height){
            setBounds(x, y, width, height);
        } 
    }
    
  4. 要检测单击特定图像,请遍历ClickableImage列表并检查ClickableImage是否包含鼠标光标坐标。

    //Within a MouseListener
    for(ClickableImage ci : list)
        if(ci.contains(e.getX(), e.getY()))
            clickedImage = ci;