无法得到这个爆破的矩形! (java swing)

时间:2014-10-24 17:48:29

标签: java swing graphics

第一课:

public class Bar extends JComponent {

    // instance variables - replace the example below with your own
    private static boolean litUp = false;
    private static boolean vertical = true;
    private static int positionX;
    private static int positionY;
    private static int sizeX;
    private static int sizeY;
    private static Color color;

    public void paintComponent(Graphics g) {

        System.out.println("I am being called");
        positionX = 50;
        positionY = 30;
        vertical = true;

        if(vertical == true) {
            sizeX = 10;
            sizeY = 30;
            if(litUp == true)
            {
                color = Color.red;
            }
            else
            {
                color = Color.black;
            }
        } else{

            sizeX = 30;
            sizeY = 10;
            if(litUp == true)
            {
                color = Color.red;
            }
            else
            {
                color = Color.black;
            }
        }
        g.fillRect(positionX, positionY, sizeX, sizeY);
        g.setColor(color);
        super.paintComponent(g);
    }
}

第二课:

public class TestingBar {

    public static void main(String[] args) {

        final int FRAME_WIDTH = 317;
        final int FRAME_HEIGHT = 415;

        //created frame and panel. Panel layout is taken away from the flow layout.
        final JFrame myFrame = new JFrame();
        myFrame.setTitle("Tester Window (v2)");
        myFrame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
        final JPanel myPanel = new JPanel();
        myPanel.setLayout(null);

        final Bar testBar = new Bar();

        //myPanel.add(testBar);
        myFrame.getContentPane().add(testBar);
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setVisible(true);

        myPanel.add(testBar);
    }
}

这只是给我一个空JFrame。并且paintComponent方法中从不使用print语句。我很难过。

PS:他们不会在没有打字的情况下发布这个帖子,所以我会谈谈海龟。我不明白他们是如何在野外生存的。他们不能跑,他们的炮弹真的不那么难,他们只能从前面攻击,如果他们被翻转,他们就会无限期地瘫痪。你认为现在自然选择会把它们从游泳池里拿出来。

也许他们因为如此可爱而幸免于难。我的意思是,只要看一下试图吃樱桃番茄的小乌龟的视频。这是可爱的缩影。

4 个答案:

答案 0 :(得分:1)

我认为你应该调用super.paintComponent(g);在功能的开头。它可能会覆盖你的矩形。

答案 1 :(得分:1)

您正在向您的框架添加testBar,然后再将myPanel添加到您的框架中删除myPanel(一个组件只能有一个父组件)。但由于myPanel没有被添加到任何东西,它永远不会被调用。

注释掉这一行会解决这个问题,但您可能打算对//myPanel.add(testBar); 做一些有意义的事情,所以请检查您的设计。

{{1}}

答案 2 :(得分:1)

我将你的Bar类变成了JPanel并改为使用paint方法而且它工作正常,但其他注释是正确的,你没有将面板添加到框架,只是条形对象:

    //created frame and panel. Panel layout is taken away from the flow layout.
    final JFrame myFrame = new JFrame();
    myFrame.setTitle("Tester Window (v2)");
    myFrame.setSize(FRAME_WIDTH,FRAME_HEIGHT);

    final Bar testBar = new Bar();

    myFrame.getContentPane().add(testBar);
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    myFrame.setVisible(true);

并在栏中:

 public class Bar extends JPanel
 {
 //....

     public void paint(Graphics g)
     {
          g.setColor(Color.black);
          g.fillRect(20,20,20,20);
     }
 }

答案 3 :(得分:1)

首先调用super.paintComponents。您可能也想将g​​转换为Graphics2D对象。

public void paintComponent(Graphics g) {
  super.paintComponent(g);
  Graphics2D g2 = (Graphics2D)g;

订单错误 - 设置颜色,然后绘制矩形(使用g2):

g2.setColor(color);
g2.fillRect(positionX, positionY, sizeX, sizeY);