摆弄Java图形,这工作_once_

时间:2014-08-05 18:04:08

标签: java swing graphics

我正在尝试更直接地绘制JPanel,因此代码如下:

import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
public class px{
    JFrame F=new JFrame();
    JPanel P=new JPanel();
    public px(){
        P.setPreferredSize(new Dimension(400,300));
        F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        F.add(P);
        F.pack();
        F.setResizable(false);
        F.setVisible(true);
    }
    public void sq(int x,int y,int c){
        Graphics2D G=(Graphics2D)P.getGraphics();
        G.setPaint(Color.red);
        G.fill(new Rectangle(x*10,y*10,10,10));
        P.paint(P.getGraphics());
        F.revalidate();
    }
    public static void main (String[]args){
        px X=new px();
        X.sq(1,1,0);
    }
}

然而这个该死的小红色广场只出现过一次,可能是运行时错误或编译错误。

1 个答案:

答案 0 :(得分:2)

  • 覆盖自定义绘图的paintComponent() JPanel方法,您可以将Graphics对象作为方法参数。

  • 请勿忘记以重写super.paintComponent()方式致电paintComponent()

  • 在自定义绘画的情况下,覆盖getPreferredSize()以设置JPanel的首选大小。

  

有关详细信息,请阅读Lesson: Performing Custom Painting并尝试示例代码。

注意:遵循Java命名约定。

示例代码:

class MyPanel extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        ...
        // custom painting code goes here
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(..., ...);
    }
}