所以,我注意到在重写JFrame或JPanel的paint方法时,图形上下文提供的位置是相对于组件的。
例如:
public class Example extends JFrame {
JPanel panel1 = new JPanel() {
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.blue);
g.fillRect(0, 0, 25, 25);
}
};
JPanel panel2 = new JPanel() {
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.GRAY);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.blue);
g.fillRect(0, 0, 25, 25);
}
};
public Example() {
setTitle("Test");
setSize(800, 600);
setLocationRelativeTo(null);
setDefaultCloseOperation(3);
setLayout(null);
panel1.setBounds(0, 0, 400, 600);
add(panel1);
panel2.setBounds(400, 0, 400, 600);
add(panel2);
setVisible(true);
}
public static void main(String args[]) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
new Example();
}
});
}
}
结果:
绘制的矩形相对于组件位于x25,y25处,而不是屏幕或顶级窗口。
我本来想要自己实现这个,但是在图形类中没有看到任何让你这样做的方法。
答案 0 :(得分:3)
我认为您正在寻找方法Graphics.translate()
。您可以指定所有点都转换为的x和y值。当然,您应该在绘制后将其反转,以便超类不会受到更改的影响。
为了避免超类造成的问题,您还可以使用create()
对象的Graphics
方法,在新对象上绘制,以及调用dispose
(谢谢到HovercraftFullOfEels指出这一点)。