環顧四周後,我終於找到了如何實際調用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");
}
我不會直接調用paintComponent(),特別是從構造函數中調用。你應該調用repaint()來確保所有組件都被正確繪製。你非常奇怪地使用paintComponent(),用drawPanel的圖形調用類View的方法,所以我並不驚訝它不起作用。 – Kayaman
我剛剛在建議之後嘗試使用repaint()。我在該方法中使用的兩個System.out.println現在甚至沒有顯示在控制檯上。奇怪的是,我第一次嘗試對paintComponent()使用repaint()時,它給了我一個編譯器錯誤。 – Shaun