簡體   English   中英

Java圖形表現奇怪

[英]Java graphics behaving strange

我正在制作一個程序,您可以在其中單擊包含圖像的JLabel,並且圓圈將出現在JLabel上。 這對我的macintosh / java6來說是完美的,但是當我使用Windows / java7時,會發生各種奇怪的事情。 在圖像的某些部分上,您無法繪制圓。 就像圖片中間的一個看不見的正方形。 有時圈子會消失,並在不同的時間回來。 每次我畫一個新的圓時,所有的圓都會在標簽的頂部重畫。

public void paint(JComponent label) {
    Graphics g = label.getGraphics();
    for (T node : nodes.keySet()) {
        Point p = nodes.get(node);
        Color color;
        if (p.selected) {
            color = Color.RED;
        } else {
            color = Color.BLUE;
        }
        g.setColor(color);
        g.fillOval(p.x, p.y, circleRadius*2, circleRadius*2);
        g.setColor(Color.BLACK);
        g.setFont(new Font("Helvetica", 20, 20));
        g.drawString((String) node, p.x, p.y);
    }       
}

有誰知道這可能是什么原因?

永遠不要使用getGraphics(),它可以返回null,充其量只是最后一個繪制周期的快照

一旦重塗發生,塗在其上的任何東西都將被刪除。

相反,如Legend所建議的那樣,創建一個自定義標簽並覆蓋paintComponent並在此處執行繪畫

請記住,繪畫是無狀態的,這意味着在每次重新繪畫時,您都必須重建狀態

看一看自定義繪畫

去除油漆(JComponent j); 方法,然后嘗試使用以下JLabel。 根據需要進行調整以適應您的需求。

final JLabel jLabel = new JLabel("!X!") {
    @Override
    public void paintComponent(final Graphics g) {
        super.paintComponent(g);
        for (T node : nodes.keySet()) {
            Point p = nodes.get(node);
            Color color;
            if (p.selected) {
                color = Color.RED;
            } else {
                color = Color.BLUE;
            }
            g.setColor(color);
            g.fillOval(p.x, p.y, circleRadius*2, circleRadius*2);
            g.setColor(Color.BLACK);
            g.setFont(new Font("Helvetica", 20, 20));
            g.drawString((String) node, p.x, p.y);
        }              
    }
};

暫無
暫無

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

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