Java Swing:在JComponent/JPanel中使多个图像可单击
我想在Java Swing:在JComponent/JPanel中使多个图像可单击,java,swing,jpanel,bufferedimage,jcomponent,Java,Swing,Jpanel,Bufferedimage,Jcomponent,我想在JFrame中添加多个图像,并使每个图像都可以单击。由于监听器不能直接在Swing中的image上实现,所以我必须创建那些JComponent对象,并在这些组件上实现监听器 这种理解是正确的还是有更好的方法?有几种方法可以解决这个问题: 创建自己的类并将其扩展到JComponent class ClickableImage extends JComponent implements MouseListener { private BufferedImage img; //
JFrame
中添加多个图像,并使每个图像都可以单击。由于监听器不能直接在Swing中的image上实现,所以我必须创建那些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;
}
}
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);
}
}
//Within a MouseListener
for(ClickableImage ci : list)
if(ci.contains(e.getX(), e.getY()))
clickedImage = ci;
“有更好的方法吗?”一个
ActionListener
附加到许多按钮上,使用Event.getSource()
来找出单击了哪个按钮(因此也就是哪个图像),或者一个JList
来呈现所有图像。这里是..您可能还想看看JButton.setIcon(newImageIcon(…)…我还想使图像具有可伸缩性。我可以在按钮上实现mouselistener并更改鼠标事件上的按钮宽度吗?我还想使图像具有可伸缩性。我可以在按钮上实现mouselistener并更改鼠标事件上的按钮宽度吗?哪种方法更适合处理此问题?@RajTrivedi这两种方法对于可伸缩图像。在这两种情况下,您都需要重新绘制包含JButton的JPanel/JComponent。使用JButton的方法更容易,因为您可以使用可用的侦听器(如ActionListener)来检测单击,而不是手动遍历对象列表。