无法在Java中将颜色设置为JPanel

时间:2019-02-25 22:24:26

标签: java swing jpanel

我刚开始使用Java中的Graphics,但已经陷入困境。我试图将JPanel的颜色设置为红色,但是似乎没有任何效果!我们非常感谢您的帮助。

JFrame类:

import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Color;


public class redBoxFrame{

    public static void main(String[]args){
        JFrame f = new JFrame();
        f.setSize(400, 200);
        f.setTitle("A red box");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new redBoxPanel();
        p.setBackground(Color.RED);
        f.add(p);
        f.setVisible(true);
  }

} 

JPanel类:

   import java.awt.Graphics;
   import javax.swing.JPanel;
   import java.awt.Color;

  public class redBoxPanel extends JPanel {

     public void paintComponent(Graphics g){
     g.fillRect(0, 0, 100, 100);
     g.setColor(Color.RED);

     }
  }

如您所见,我都尝试在JFrame类和JPanel类中声明颜色,但是它们似乎都不起作用。 谢谢!

3 个答案:

答案 0 :(得分:0)

我认为您在painComponent方法中缺少super.paintComponent(g);

答案 1 :(得分:0)

我相信解决方案是有效的,但是正如您在问题中所说的那样,您可以在JFrame类和JPanel类中设置背景。 如果从JFrame类中删除setBackground,则应该只看到正在绘制的矩形。请尝试以下解决方案,让我们知道它是否有效。

JFrame类:

import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Color;


public class redBoxFrame{

    public static void main(String[]args){
        JFrame f = new JFrame();
        f.setSize(400, 200);
        f.setTitle("A red box");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new redBoxPanel();
        f.add(p);
        f.setVisible(true);
  }

} 

JPanel类:

  import java.awt.Graphics;
  import javax.swing.JPanel;
  import java.awt.Color;

  public class redBoxPanel extends JPanel {

     public void paintComponent(Graphics g){
     super.paintComponent(g);
     g.fillRect(0, 0, 100, 100);
     g.setColor(Color.RED);

     }
  }

答案 2 :(得分:0)

这里的每个人似乎都错过了在图纸之前设置颜色的事实。

出于演示目的,我将主要背景设置为蓝色。

public static void main(String[] args) {
    //...
    JPanel p = new redBoxPanel();
    // BLUE bg. This covers the whole panel.
    p.setBackground(Color.BLUE);
    //...
}

现在是红色框!

public static class redBoxPanel extends JPanel {
    @Override public void paintComponent(Graphics g) {
        // You need to call the superclass' paintComponent() so that the 
        // setBackground() you called in main() is painted.
        super.paintComponent(g);

        // You need to set the colour BEFORE drawing your rect
        g.setColor(Color.RED);

        // Now that we have a colour, perform the drawing
        g.fillRect(0, 0, 100, 100);

        // More, for fun
        g.setColor(Color.GREEN);
        g.drawLine(0, 0, 100, 100);
    }
}