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

时间:2014-09-21 16:06:33

标签: 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);
            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();
            }
        });
    }
}


结果: enter image description here

绘制的矩形相对于组件位于x25,y25处,而不是屏幕或顶级窗口。

我本来想要自己实现这个,但是在图形类中没有看到任何让你这样做的方法。

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找方法Graphics.translate()。您可以指定所有点都转换为的x和y值。当然,您应该在绘制后将其反转,以便超类不会受到更改的影响。

为了避免超类造成的问题,您还可以使用create()对象的Graphics方法,在新对象上绘制,以及调用dispose (谢谢到HovercraftFullOfEels指出这一点)