java swing 界面重绘_拖动鼠标时Java Swing重绘

当我将鼠标拖过它时,我很难让自定义面板重新绘制自己.

基本上,我在自定义面板上绘制自由形式的线条,并附带以下处理程序:

MouseInputAdapter mia = new MouseInputAdapter() {

@Override

public void mousePressed(MouseEvent e) {

if(_app_split_right_buttons_radioInkBtn.isSelected()) {

_app_split_right_journal.StartLine();

_app_split_right_journal.AddLineSegment(e.getX(), e.getY());

}

_app_split_right_journal.repaint();

}

@Override

public void mouseReleased(MouseEvent e) {

if(_app_split_right_buttons_radioInkBtn.isSelected()) {

_app_split_right_journal.AddLineSegment(e.getX(), e.getY());

_app_split_right_journal.EndLine();

}

_app_split_right_journal.repaint();

}

@Override

public void mouseDragged(MouseEvent e) {

if(_app_split_right_buttons_radioInkBtn.isSelected()) {

_app_split_right_journal.AddLineSegment(e.getX(), e.getY());

}

_app_split_right_journal.repaint();

}

};

_app_split_right_journal.addMouseListener(mia);

_app_split_right_journal.addMouseMotionListener(mia);

但是,在我拖动鼠标时,我似乎无法重新绘制它,只有在我释放它之后(线条正确绘制).奇怪的是,如果在我拖动的中间,我右键单击,当我拖动时,该线将突然开始绘制.

任何帮助,将不胜感激.

编辑:为清楚起见,StartLine()/ AddLineSegment()/ EndLine()函数只是将点添加到Point对象的ArrayList,并且重写了repaint()函数以循环这些点并在每个点之间绘制线段.代码如下:

public void DrawShapes(Graphics g) {

g.setColor(Color.black);

for(Geometry.Shape shape : _shapeList) {

if(shape instanceof Geometry.Line) {

ArrayList points = ((Line) shape).GetPointList();

Point p1 = points.get(0);

for(int i=1; i

Point p = points.get(i);

g.drawLine(p1.x, p1.y, p.x, p.y);

p1 = p;

}

}

}

编辑:想出来.这是因为我在循环列表中循环,但是我忘记了在我释放鼠标并调用EndLine()之前,我没有添加我正在绘制到该列表的行.我必须在repaint()方法中放置单独的代码来绘制我当前在绘图中间的形状.代码添加到repaint():

if(_currentShape instanceof Geometry.Line) {

ArrayList points = ((Line)_currentShape).GetPointList();

Point p1 = points.get(0);

for(int i=1; i

Point p = points.get(i);

g.drawLine(p1.x, p1.y, p.x, p.y);

p1 = p;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值