[英]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.