java.awt.Graphics,如何定义位置?
因此,我注意到,当重写JFrame或JPanel的paint方法时,提供的图形上下文的位置是相对于组件的 例如:java.awt.Graphics,如何定义位置?,java,swing,user-interface,graphics,Java,Swing,User Interface,Graphics,因此,我注意到,当重写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);
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处,而不是相对于屏幕或顶层窗口
我想自己实现这个,但是在graphics类中还没有看到任何方法可以让你实现这个 我想你正在寻找方法。可以指定所有点转换为的x和y值。当然,应该在绘制后将其反转,以便超类不受更改的影响
为了避免超类产生的问题,您还可以使用
Graphics
对象的create()
方法,在新对象上绘制,并调用dispose
(感谢HovercraftFullOfEels指出这一点).如果您向我们展示一张图片,并更详细地描述您想要实现的目标,也许会更好。同样,您希望的输出是什么?我有一种感觉,您的程序可以使用非GUI组件(不扩展JPanel或JComponent的类)轻量级图形对象,它可以提供给单个图形JPanel。顺便说一句,我的应用程序使用的是定制组件,而不是那些不受欢迎的投票者,只是一个好奇的用户。组件通过渲染(Graphics g)方法绘制,输入通过连接到画布的侦听器接收。调用paint(Graphics g)
method override可能会有危险。是的,这正是我需要的,谢谢。还有@Hovercraft,这只是一个例子,我的实际应用程序使用了一种缓冲策略,画布在EDT之外绘制。@HovercraftFullOfEels谢谢,我包括了它。另一个选项是通过create()
克隆图形对象,然后在完成后处理新的图形对象。当我看到paint(…)
Overrided和null布局被使用时,我也总是畏缩不前。噢,谢谢你,我想这会在其他地方派上用场的。。。是的,但这只是我在2分钟内写的一个简单的例子:p