Как изменить цвет фона JFrame [дубликата]

1

Я не могу изменить цвет фона JFrame или JPanel внутри JFrame, это мой код:

public class MyFrame extends JFrame {

    public MyFrame(){
        setSize(600,600);
        setResizable(false);
        panel = new MyPanel();
        panel.setBackground(Color.BLACK);
        //getContentPane().setBackground(Color.BLACK); doesn't work
        getContentPane().add(panel);
        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent ev){
                System.exit(-1);
            }
            public void windowClosed(WindowEvent ev){
                System.exit(-1);
            }
        });
    }

 public void paint(Graphics g){
        super.paint(g);
        g.clearRect(0,0,600,600);
        synchronized (this){
            if (positions!=null){
                for (int i=0; i<positions.length; i++){
                    P2d p = positions[i];
                    //int x0 = (int)(180+p.x*180);
                    //int y0 = (int)(180-p.y*180);
                    g.drawOval((int)p.x,(int)p.y,5,5);
                }
            }
        }
    }
}

Я попытался несколькими способами, но я не могу изменить цвет, он всегда белый, как я могу это сделать?

  • 0
    panel.setBackground(Color.BLACK); должно сработать. Покажите свой класс MyPanel
  • 0
    @kleopatra вопрос, который вы связали, имеет дело с JFrame и хотя заголовок этого вопроса может вводить в заблуждение, предполагая, что MyPanel OP следует примеру MyFrame и расширяет JPanel этот вопрос, по-видимому, касается изменения цвета JPanel не работающего по своей сути.
Теги:
swing
jframe

4 ответа

0
Лучший ответ

Попробуй это. Нарисуйте прямоугольник, заполненный цветом фона.

  • используйте SwingUtilities.invokeLater() или EventQueue.invokeLater()
  • использовать paintComponent() метод для пользовательской покраски
  • не нарисуйте JFrame напрямую.
  • используйте setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) чтобы закрыть JFrame

Образец кода:

public class MyFrame extends JFrame {

    public MyFrame() {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                setSize(new Dimension(600, 600));
                setResizable(false);
                JPanel panel = new JPanel() {
                    @Override
                    public void paintComponent(Graphics g) {
                        super.paintComponent(g);

                        g.clearRect(0, 0, 600, 600);
                        Color prevColor = g.getColor();

                        g.setColor(Color.BLUE); // background color
                        g.fillRect(0, 0, 600, 600); // fill a rectangle with background color
                        g.setColor(prevColor);

                        // your custom painting
                        ...
                    }
                };
                getContentPane().add(panel);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setVisible(true);
            }
        });
    }
}
  • 0
    @kleopatra Вы читали ссылку?
  • 0
    @kleopatra Я отредактировал свой пост.
Показать ещё 5 комментариев
0

Проверьте этот ответ, чтобы изменить цвет фона

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

public class ColoredFrame {

  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        JFrame frame = new JFrame( "TestFrame" );
        frame.getContentPane().setBackground( Color.PINK );
        //frame contains nothing, so set size
        frame.setSize( 200, 200 );
        frame.setVisible( true );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      }
    } );
  }
}

Ссылка Робин ответ.

0

Не уверен, что это сработает для вас, но попробуйте

 JPanel panel = new JPanel();
 panel.setBackground(Color.BLACK);

или вы можете попробовать установить цвет в JFrame и оставить цвет из панели

 JFrame frame = new JFrame();
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.setTitle("MyFirstFrame");
 frame.setBackground(Color.BLACK);
 frame.setLocation(0,0);
 frame.setSize(150,150);
-2

Что касается вашего MyPanel похоже, что вы не установили размер так, чтобы он не был виден.
И для вашего jFrame поскольку вы переопределяете краску, почему бы не попробовать установить g.setBackground(Color.BLACK); ,

  • 0
    Определение размеров является исключительной задачей LayoutManager (который по умолчанию представляет собой borderLayout на contentPane, который определяет размер центрального компонента для заполнения контейнера). Плюс переопределение рисования рамки - неправильный подход - пользовательское рисование должно быть обработано в компоненте paint, например, MyPanel

Ещё вопросы

Сообщество Overcoder
Наверх
Меню