2013-11-09 52 views
1

環顧四周後,我終於找到了如何實際調用paintComponent()方法。我現在遇到的問題是線g.drawRect(100, 100, 100, 6);實際上並未繪製矩形。我在這行代碼的上面和下面放了兩個System.out.println,看看是否真的到了那一行,並且確實如此。paintComponent()將不會繪製

這裏是類的構造函數。在的paintComponent()方法被調用末

View(Model m) 
{ 
    this.m = m; 

    setTitle("Word Guesssing"); 
    super.setSize(new Dimension (475, 500)); 


    drawPanel = new JPanel (new MigLayout()); 
    guessPanel = new JPanel (new MigLayout()); 
    wordPanel = new JPanel (new MigLayout()); 
    guessedLettersPanel = new JPanel (new MigLayout()); 



    setLetterTextFields(); //Adds the letter JTextFields to an ArrayList in the Model class. 
    addToGuessPanel(); //Method where components are added to the guessPanel. 
    addToWordPanel(); //Method where components are added to the wordPanel. 
    addToGuessedLettersPanel(); //Method where components are added to the guessedLettersPanel. 


    //Sets a boarder for each panel. 
    wordPanel.setBorder (new LineBorder(new Color(0, 0, 0))); 
    drawPanel.setBorder (new LineBorder(new Color(0, 0, 0))); 
    guessPanel.setBorder (new LineBorder(new Color(0, 0, 0))); 
    guessedLettersPanel.setBorder(new LineBorder(new Color(0, 0, 0))); 

    //Sets the sizes for each panel 
    drawPanel.setPreferredSize(new Dimension (475, 500)); 
    wordPanel.setPreferredSize (new Dimension(450, 50)); 
    guessPanel.setPreferredSize(new Dimension(350, 100)); 
    guessedLettersPanel.setPreferredSize(new Dimension(125, 600)); 


    setRadioButtonGroup(); 

    addToPane(); 

    setVisible(true); 
    setResizable(false); 

    paintComponent(drawPanel.getGraphics()); 
} 

這裏是的paintComponent()方法

public void paintComponent(Graphics g) 
{ 
    System.out.println("here 1"); 
    g.drawRect(100, 100, 100, 6); 
    System.out.println("here 2"); 
} 
+1

我不會直接調用paintComponent(),特別是從構造函數中調用。你應該調用repaint()來確保所有組件都被正確繪製。你非常奇怪地使用paintComponent(),用drawPanel的圖形調用類View的方法,所以我並不驚訝它不起作用。 – Kayaman

+0

我剛剛在建議之後嘗試使用repaint()。我在該方法中使用的兩個System.out.println現在甚至沒有顯示在控制檯上。奇怪的是,我第一次嘗試對paintComponent()使用repaint()時,它給了我一個編譯器錯誤。 – Shaun

回答

3

確保repaint()爲Kayaman建議,但可能是一個更大的問題是,在的paintComponent你不不要調用超類的paintComponent。嘗試將super.paintComponent(g)添加到該函數的頂部。

編輯:你應該有它擴展一個JPanel,然後將它添加到JFrame,如果你想它顯示出來。一個好的思路就是JFRame是窗口,但是JComponents(一個JPanel是一個JComponent)告訴窗口要畫什麼

+0

我試過了,它沒有工作。 super.paintComponent(g)給了我一個編譯器錯誤,並告訴我將其更改爲super.paintComponents(g) – Shaun

+0

「View」擴展了哪個類?爲了能夠使用paintComponent(),它的超類應該有paintComponent()... – mattdee123

+0

它擴展了JFrame – Shaun

相關問題