过去两天我一直试图在JPanel
上绘制物体。当我尝试在JPanel
上放置JTabbedPane
时没有放置JPanel
的对象时,代码正在运行。但现在对我来说很忙碌。请帮助我。
使用MouseMotionListener
panel[i].addMouseMotionListener(this);
JTabbedPane
将面板添加到tp.addTab("Tab1",panel[i]);
mouseDragged
public void mouseDragged(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint();
}
事件具有以下代码
public void mouseReleased(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
repaint();
}
mouseReleased事件
public void paint( Graphics g )
{
super.paint(g);
// I even tried to add the following line but it didn't work too
/// g=panel[tp.getSelectedIndex()].getGraphics();
Graphics2D gtd=(Graphics2D) g;
gtd.fillOval(x, y, x1-x, y1-y); //x1-x: For width of Oval; y1-y: for height
}
绘画功能(必须自动调用)具有以下行
{{1}}
答案 0 :(得分:1)
x1和y1将始终等于x和y,因为鼠标释放始终发生在最近鼠标拖动的位置(或非常接近)。这意味着您的椭圆的宽度始终为零,高度为零。
如果您的目标是创建用户拖动区域大小的椭圆,则必须保存mousePressed事件的位置。然后,您应该在mouseDragged中更新对角(您的情况下为x1和y1)。
您不应更新mouseReleased事件中的任何坐标。相反,您应该保留一个布尔标志(在私有字段中),指示拖动正在进行中。发生mousePressed时将其设置为true,并在发生mouseReleased时将其设置为false。您的mouseDragged方法应该只在设置该标志时更新椭圆的坐标。