Не могу установить цвет на JPanel в Java - PullRequest
0 голосов
/ 26 февраля 2019

Я только что начал с Графика в Java, и я уже застрял.Я пытался установить цвет 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 голосов
/ 26 февраля 2019

Я полагаю, что решение работает, однако вы, как вы сказали в своем вопросе, устанавливаете фон в классе JFrame и классе JPanel.если вы удалите setBackground из класса JFrame, вы должны увидеть только прямоугольник, который вы рисуете.Попробуйте следующее решение и дайте нам знать, если оно работает.

Класс 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);

     }
  }
0 голосов
/ 26 февраля 2019

Все здесь, кажется, упускают тот факт, что цвет должен быть установлен перед рисованием.

Я установлю основной фон в СИНИЙ для демонстрационных целей.

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);
    }
}
0 голосов
/ 26 февраля 2019

Я думаю, что вам не хватает super.paintComponent(g); в вашем методе painComponent.

...