在放置在JTabbedPane中的JPanel上绘制对象

时间:2014-05-04 14:39:02

标签: java swing graphics mouselistener

过去两天我一直试图在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}}

1 个答案:

答案 0 :(得分:1)

x1和y1将始终等于x和y,因为鼠标释放始终发生在最近鼠标拖动的位置(或非常接近)。这意味着您的椭圆的宽度始终为零,高度为零。

如果您的目标是创建用户拖动区域大小的椭圆,则必须保存mousePressed事件的位置。然后,您应该在mouseDragged中更新对角(您的情况下为x1和y1)。

您不应更新mouseReleased事件中的任何坐标。相反,您应该保留一个布尔标志(在私有字段中),指示拖动正在进行中。发生mousePressed时将其设置为true,并在发生mouseReleased时将其设置为false。您的mouseDragged方法应该只在设置该标志时更新椭圆的坐标。