【发布时间】:2013-12-18 11:31:03
【问题描述】:
我有一个 JPanel 的子类,其中包含一个 JComponent 对象数组。然后我使用paint(Graphics g) 方法将JComponent 对象在面板中彼此相邻放置。所有这些 JComponent 对象都实现了 MouseMostionListener,我使用 addMouseMotionListener(this); 初始化了监听器,我也有方法 mouseMoved(MouseEvent m) 和 mouseDragged(MouseEvent m)。所有组件都已正确绘制,但从未调用过 mouseMoved(MouseEvent m) 和 mouseDragged(MouseEvent m)。任何想法为什么?
这是我的代码: JPanel 子类
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Image;
import javax.swing.ImageIcon;
import java.awt.Graphics;
import java.util.ArrayList;
public class ExamplePanel extends JPanel
{
ArrayList<ExampleComponent> components;
public ExamplePanel()
{
components = new ArrayList<ExampleComponent>();
}
public void paint(Graphics g)
{
for(ExampleComponent c : components)
g.drawImage(c.getImage(), 0, 30, 50, 75, null);
}
public void addComponent(ExampleComponent j)
{
components.add(j);
repaint();
}
public static void main(String[] args)
{
JFrame app = new JFrame("Staff Prototype");
app.setSize(700,200);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setResizable(false);
ExamplePanel s = new ExamplePanel();
app.getContentPane().add(s);
s.addComponent(new ExampleComponent());
app.setVisible(true);
}
}
JComponent 子类:
import java.awt.Image;
import javax.swing.JComponent;
import javax.swing.ImageIcon;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
public class ExampleComponent extends JComponent implements MouseMotionListener
{
Image image;
public ExampleComponent()
{
ImageIcon icon = new ImageIcon("image.png");
image = icon.getImage();
addMouseMotionListener(this);
}
public Image getImage()
{
return image;
}
public void mouseMoved(MouseEvent m)
{
System.out.println("Mouse Moved");
}
public void mouseDragged(MouseEvent m)
{
System.out.println("Mouse Dragged");
}
}
【问题讨论】:
-
展示你如何构建你的 GUI。
-
我创建了一个 JFrame,将面板添加到其中,然后将 JComponent 对象添加到数组列表中。
标签: java swing jpanel draggable jcomponent