我有一个很好的问题,因为我有3个班级:
public class GButton extends JComponent implements MouseMotionListener, MouseListener{
int x, y , w, h; //the coordinates of button
Graphics2D g2d;
public GButton(int x, int y){
this.x = x; this.y = y;
this.w = 200; this.h = 100;
... //add listeners, loading some information etc
}
@Override
public void paintComponent(Graphics g){
g2d = (Graphics2D) g;
...//loading and draw on g2d
g2d.drawString("asidoaisjdiajsoidj",x,y);
}
//code with using events of mouse and so on
}
当我添加按钮时,按钮的纹理比y低50px!接下来的按钮增加了与y的差异。为什么?我知道,因为我用帮助MouseMove事件检查它。图像或类似的东西不是很糟糕。为什么它不起作用,它在其他地方画画?更简单的方法来获得相同的效果?请回答:)
答案 0 :(得分:1)
然而,你在地面上编码有点薄。
Graphics
上下文的引用。它被重用了;它可能会在油漆循环之间发生变化。您需要绘制到传递给组件的图形上下文super.paintComponent
,这非常重要。我无法百分百肯定,但您认为您需要在按钮出现在屏幕上的x / y位置进行绘制,这是不正确的。 Graphics
上下文已被翻译,因此位置0x0是对象的左上角。
我建议你需要花点时间阅读
答案 1 :(得分:0)
永远不要保留对Graphics
(以及2D)的全局引用。
如果确实需要,请在每张图纸的末尾调用g2d.dispose()
,在下次要使用时获取新的图形上下文。