【问题标题】:paintComponent() wont drawpaintComponent() 不会绘制
【发布时间】: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


【解决方案1】:

确保按照 Kayaman 的建议使用 repaint(),但可能更大的问题是在paintComponent 中您不调用超类的paintComponent。尝试将super.paintComponent(g) 添加到该函数的顶部。

编辑:你应该让它扩展一个 JPanel,然后如果你想让它出现,就将它添加到 JFrame 中。考虑这个问题的一个好方法是 JFRame 是窗口,但是 JComponents(一个 JPanel 是一个 JComponent)告诉窗口要绘制什么

【讨论】:

  • 我试过了,没用。 super.paintComponent(g) 给我一个编译器错误并告诉我将其更改为 super.paintComponents(g)
  • View 扩展了什么类?为了让你能够使用paintComponent(),它的超类应该有paintComponent()...
  • 它正在扩展 JFrame
  • 如果您想绘制 JPanel,您应该扩展它,请参阅我的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
相关资源
最近更新 更多