代码之家  ›  专栏  ›  技术社区  ›  Jonathan

在方法中使用awt.Graphics

  •  1
  • Jonathan  · 技术社区  · 13 年前

    我创建了一个名为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);
    
        }
    
    }
    

    但这并不奏效。我有一种感觉,这是测试中的太阳法。我该怎么做?我查阅了所有的java书籍,找不到任何有帮助的东西。

    请注意,我不想在方法中添加什么参数。

    非常感谢。 汤姆。

    2 回复  |  直到 13 年前
        1
  •  2
  •   Vishal K    13 年前

    这里需要注意的几点:

    1. 从不打电话 super.paintComponent 除了在被否决的范围内 paintComponent 方法本身。
    2. 如果要执行一些图形活动,请覆盖 油漆组件 方法并在那里绘制图形
    3. 当您正在覆盖时 油漆组件 方法,则该方法中的第一个语句应该是 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);
       }
    }
    
        2
  •  2
  •   camickr    13 年前

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

    然后,您将保留一个要绘制的椭圆列表。看见 Custom Painting Approaches 它在面板上画了一堆矩形。所有代码所做的就是循环使用ArrayList来绘制矩形。只需要几行代码。