Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.awt.Graphics,如何定义位置?_Java_Swing_User Interface_Graphics - Fatal编程技术网

java.awt.Graphics,如何定义位置?

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);

因此,我注意到,当重写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处,而不是相对于屏幕或顶层窗口


我想自己实现这个,但是在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