Java 嵌套 class 不响应 MouseListener 事件
Java nested class dont react to MouseListener events
在 Java 中,我尝试创建一个 class 以在 JFrame 中显示两个 JPanel 组件,并在其中一个组件中添加一个 Mouselistener。
我创建了一个主要的 JPanel 并在其中嵌套了一个名为 drawRec(JPanel 类型)的私有 class,用于绘制一个矩形,该矩形应该处理他上方的鼠标事件,但是当我单击时,没有任何反应。这是我的代码:
public class Exercise2 extends JPanel {
private drawRec square;
public static void main(String[] args) {
JFrame wind = new JFrame();
Exercise2 content = new Exercise2();
wind.setContentPane(content);
wind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
wind.setLocation(100, 100);
wind.setSize(new Dimension(500,500));
wind.setVisible(true);
}
Exercise2() {
setBackground(Color.BLACK);
square = new drawRec();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
square.draw(g, 100, 90);
}
private class drawRec extends JPanel implements MouseListener {
drawRec() {
addMouseListener(this);
}
private void draw(Graphics g, int x, int y) {
g.setColor(Color.BLUE);
g.fillRect(x, y, 50, 20);
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
System.out.println("Test");
}
public void mouseReleased(MouseEvent e) {}
}
}
提前致谢
您的框架不包含 drawRec
面板。它包含一个 Exercise2
面板,该面板调用 drawRec.draw()
来绘制其内容。如果单击,则单击 Exercise2
面板,该面板没有鼠标侦听器。
也许你应该合并这两个 类。至少你必须将鼠标监听器添加到一个真正添加到框架中的组件。
最短的修复可能是:
Exercise2() {
setBackground(Color.BLACK);
square = new drawRec();
this.addMouseListener(square); // add this line
}
在那种情况下,您仍然没有将 drawRec
用作面板(因为您没有将它添加到任何内容),但您可以将它用作 Exercise2
面板的鼠标侦听器。
在 Java 中,我尝试创建一个 class 以在 JFrame 中显示两个 JPanel 组件,并在其中一个组件中添加一个 Mouselistener。 我创建了一个主要的 JPanel 并在其中嵌套了一个名为 drawRec(JPanel 类型)的私有 class,用于绘制一个矩形,该矩形应该处理他上方的鼠标事件,但是当我单击时,没有任何反应。这是我的代码:
public class Exercise2 extends JPanel {
private drawRec square;
public static void main(String[] args) {
JFrame wind = new JFrame();
Exercise2 content = new Exercise2();
wind.setContentPane(content);
wind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
wind.setLocation(100, 100);
wind.setSize(new Dimension(500,500));
wind.setVisible(true);
}
Exercise2() {
setBackground(Color.BLACK);
square = new drawRec();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
square.draw(g, 100, 90);
}
private class drawRec extends JPanel implements MouseListener {
drawRec() {
addMouseListener(this);
}
private void draw(Graphics g, int x, int y) {
g.setColor(Color.BLUE);
g.fillRect(x, y, 50, 20);
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
System.out.println("Test");
}
public void mouseReleased(MouseEvent e) {}
}
}
提前致谢
您的框架不包含 drawRec
面板。它包含一个 Exercise2
面板,该面板调用 drawRec.draw()
来绘制其内容。如果单击,则单击 Exercise2
面板,该面板没有鼠标侦听器。
也许你应该合并这两个 类。至少你必须将鼠标监听器添加到一个真正添加到框架中的组件。
最短的修复可能是:
Exercise2() {
setBackground(Color.BLACK);
square = new drawRec();
this.addMouseListener(square); // add this line
}
在那种情况下,您仍然没有将 drawRec
用作面板(因为您没有将它添加到任何内容),但您可以将它用作 Exercise2
面板的鼠标侦听器。