簡體   English   中英

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

[英]java.awt.Graphics, how to define position?

所以,我注意到當重寫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,而不是屏幕或頂級窗口。

我本來想要自己實現這個,但是在圖形類中沒有看到任何讓你這樣做的方法。

我想你正在尋找Method Graphics.translate() 您可以指定所有點都轉換為的x和y值。 當然,您應該在繪制后將其反轉,以便超類不受更改的影響。

為了避免超類所產生的問題,您還可以使用Graphics對象的create()方法,在新對象上繪制,以及調用dispose (感謝HovercraftFullOfEels指出這一點)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM