2015-05-14 158 views
1

所以我在JPanel的一個實現類中有這個類。drawLine()方法沒有畫任何東西

private static class Line extends JComponent { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public void paintComponent(Graphics g) { 
     System.out.println("Pozvan paintComponent()"); 
     g.setColor(Color.YELLOW); 
     g.drawLine(20, 20, 100, 20); 
     super.paintComponent(g); 
    } 
    } 

這是一個代碼片段它創建線的一個實例:

 Line line = new Line(); 
     line.setOpaque(true); 
     add(line); 

我真的不知道我在做什麼錯在這裏。當我畫一個矩形時,一切都很好地畫出來。

+3

如果'super.paintComponent(g);'是'public void paintComponent(Graphics g){' – mKorbel

+2

'內的第一條代碼行,那麼會發生什麼情況並檢查寬度/高度以確保Line組件不是0大小 – StanislavL

+0

我同意Stas,因爲JComponent的大小可以是0 – mKorbel

回答

1

當我將高度設置爲遠程大數字它的工作原理。

Swing組件的默認大小是(0,0)。由於大小爲0,因此沒有任何內容可以繪製。

g.drawLine(20, 20, 100, 20); 

使用上述信息,這意味着您的組件需要大小(120,40)。也就是說,寬度= 20 + 100和高度= 20 + 20,以便組件被上漆。

I added line.setBounds(20, 20, 80, 50); 

只有你行的一部分將被畫,因爲你的寬度設置爲80,而不是120

閱讀從Custom Painting Swing的教程部分獲取更多信息和示例。