我正在嘗試將其添加MouseHandler到我的DrawPanel類中以最終具有更新滑鼠位置的狀態標簽,但是在使用列印陳述句時,它似乎根本沒有注冊任何滑鼠輸入。
private class DrawPanel extends JPanel {
public DrawPanel() {
JPanel mousePanel = new JPanel();
this.add(mousePanel);
MouseHandler handler = new MouseHandler();
mousePanel.addMouseListener(handler);
mousePanel.addMouseMotionListener(handler);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
}
private class MouseHandler extends MouseAdapter implements MouseMotionListener {
@Override
public void mousePressed(MouseEvent event) {
System.out.print("Pressed");
}
@Override
public void mouseReleased(MouseEvent event) {
System.out.print("Released");
}
@Override
public void mouseDragged(MouseEvent event) {
System.out.print("Dragged");
//lblStatus.setText(String.format("(%d,%d)",event.getX(),event.getY()));
}
@Override
public void mouseMoved(MouseEvent event) {
System.out.print("Moved");
//System.out.print("(" event.getX() "," event.getY() ")");
//lblStatus.setText(String.format("(%d,%d)",event.getX(),event.getY()));
}
}
}
uj5u.com熱心網友回復:
您正在創建并添加另一個 JPanel,即 mousePanel,并將其添加到 DrawPanel JPanel,這是一個使用默認 FlowLayout 的容器。這使得 mousePanel 的大小成為其首選大小,即 [0, 0] 表示正在添加 mousePanel 組件,但它太小而無法看到或無法執行任何重要操作。但是為什么你甚至有或需要這個額外的 JPanel?
解決方法:去掉mousePanel,不需要它。而是將滑鼠處理程式添加到this.
附帶問題,無需實作 MouseMotionListener。MouseAdapter 已經實作了這個介面。
例如:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FooSwing02 extends JPanel {
private JLabel statusLabel = new JLabel("");
public FooSwing02() {
setPreferredSize(new Dimension(800, 650));
add(new JLabel("Mouse Location:"));
add(statusLabel);
MyMouse myMouse = new MyMouse();
addMouseListener(myMouse);
addMouseMotionListener(myMouse);
}
private class MyMouse extends MouseAdapter {
@Override
public void mouseMoved(MouseEvent event) {
Point p = event.getPoint();
String text = String.format("[d, d]", p.x, p.y);
statusLabel.setText(text);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("GUI");
frame.add(new FooSwing02());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523035.html
標籤:爪哇摇摆鼠标监听器
上一篇:帶有組合框的Jtable
