1

我创建了一个名为 Test 的类,很可能是我出错的地方。

import javax.swing.JPanel;
import java.awt.*;
public class Test extends JPanel {

Graphics grap;
public void sun()
{
    super.paintComponent(grap);
    grap.setColor(Color.YELLOW);
    grap.fillOval(0,0,20,20);
}
}

如您所见,我想使用一种方法在面板的左上角绘制一个黄色的“椭圆”,但我没有使用 PaintComponent 方法。现在我尝试在我的 Paint 组件方法中实现它,该方法位于一个名为 Painting 的类中。

//import...;
public class Painting extends JPanel{

   protected void paintComponent(Graphics g)
   {
      Test test = new Test();

      test.sun();

   }

现在我创建了一个主窗口,它将创建一个面板并显示黄色椭圆形。

//import...
public class main extends JFrame{
    public static main(String [] args){

        JFrame window = new JFrame();
        window.add(new Painting());
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(100,100);
        window.setLocationRelativeTo(null);
        window.setVisible(true);

    }

}

但这不起作用。我有一种感觉,这是测试中的sun方法。我怎样才能让它工作?我查看了所有的 Java 书籍,但找不到任何可以提供帮助的东西。

请注意,我没有向方法中添加什么参数。

谢谢你,汤姆。

4

2 回答 2

2

这里需要注意几点:

  1. super.paintComponent除非在被覆盖的paintComponent方法本身内,否则永远不要自己调用。
  2. 如果您想做一些 Graphics 活动,请覆盖该paintComponent方法并在那里绘制图形
  3. 当您覆盖paintComponent方法时,方法中的第一条语句应该是super.paintComponent(g).

现在,按照以上所有要点,您的代码现在应该是这样的:

public class Test extends JPanel {

 public void paintComponent(Graphics grap)
 {
    super.paintComponent(grap);
    grap.setColor(Color.YELLOW);
    grap.fillOval(0,0,20,20);
 }
}

你的Painting班级应该是这样的:

public class Painting extends JPanel{
   Test test;
   public Painting()
   {
     test = new Test();
     setLayout(new BorderLayout());
     add(test);
   }
}
于 2013-03-31T16:20:30.203 回答
2

如果我想在不同的地方画 50 个椭圆,那么我会遇到大量代码的问题

然后,您将保留要绘制的椭圆的列表。请参阅自定义绘画方法,它在面板上绘制一堆矩形。代码所做的只是循环遍历 ArrayList 以绘制 Rectangle。只需要几行代码。

于 2013-03-31T17:28:14.933 回答