【发布时间】:2013-11-09 14:49:11
【问题描述】:
看了一圈,终于知道怎么调用paintComponent()方法了。我现在遇到的问题是g.drawRect(100, 100, 100, 6); 线实际上并没有绘制矩形。我在这行代码的上方和下方放了两个System.out.println,看看是否真的到达了那行,它确实到达了。
这是类的构造函数。最后调用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类的方法,所以我并不奇怪它不起作用。
-
我只是在你建议后尝试使用 repaint()。我在方法中拥有的两个 System.out.println 现在甚至没有显示在控制台上。奇怪的是,我第一次尝试对 paintComponent() 使用 repaint() 时,它给了我一个编译器错误。
标签: java swing jframe paintcomponent