Я не могу изменить цвет фона 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);
}
}
}
}
}
Я попытался несколькими способами, но я не могу изменить цвет, он всегда белый, как я могу это сделать?
Попробуй это. Нарисуйте прямоугольник, заполненный цветом фона.
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);
}
});
}
}
Проверьте этот ответ, чтобы изменить цвет фона
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 );
}
} );
}
}
Ссылка Робин ответ.
Не уверен, что это сработает для вас, но попробуйте
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);
Что касается вашего MyPanel
похоже, что вы не установили размер так, чтобы он не был виден.
И для вашего jFrame
поскольку вы переопределяете краску, почему бы не попробовать установить g.setBackground(Color.BLACK);
,
panel.setBackground(Color.BLACK);
должно сработать. Покажите свой класс MyPanelJFrame
и хотя заголовок этого вопроса может вводить в заблуждение, предполагая, что MyPanel OP следует примеру MyFrame и расширяетJPanel
этот вопрос, по-видимому, касается изменения цветаJPanel
не работающего по своей сути.