У меня есть код, который создает полноэкранный значок в java и устанавливает цвет фона в розовый, а цвет переднего плана - красный. Однако каждый раз, когда я запускаю его, он никогда не меняет цвет фона на красный, а просто отслеживает его. Я поставил код ниже.
Основная java:
import java.awt.*;
import javax.swing.*;
@SuppressWarnings({ "serial" })
public class bob extends JFrame{
public static void main(String[] args) {
DisplayMode dm = new DisplayMode(800,600,16, DisplayMode.REFRESH_RATE_UNKNOWN);
bob b = new bob();
b.run(dm);
}
public void run(DisplayMode dm){
setBackground(Color.PINK);
setForeground(Color.RED);
setFont(new Font("Arial", Font.PLAIN, 24));
screen s = new screen();
try{
s.setFullScreen(dm, this);
try{
Thread.sleep(5000);
}catch(Exception ex){}
}finally{
s.restoreScreen();
}
}
public void paint(Graphics g){
g.drawString("This is gonna be awesome", 200, 200);
}
}
И вот экранный класс:
import java.awt.*;
import javax.swing.*;
public class screen2 {
private GraphicsDevice vc;
public screen2(){
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
vc = env.getDefaultScreenDevice();
}
public void setFullScreen(DisplayMode dm, JFrame window){
window.setUndecorated(true);
window.setResizable(false);
vc.setFullScreenWindow(window);
if(dm != null && vc.isDisplayChangeSupported()){
try{
vc.setDisplayMode(dm);
}catch(Exception ex){}
}
}
public Window getFullScreenWindow(){
return vc.getFullScreenWindow();
}
public void restoreScreen(){
Window w = vc.getFullScreenWindow();
if(w != null){
w.dispose();
}
vc.setFullScreenWindow(null);
}
}
у кого есть идеи?
public void paint(Graphics g){
g.drawString("This is gonna be awesome", 200, 200);
}
Картина фона выполнена в методе paint()
. Ваш метод super.paint(g)
и не super.paint(g)
поэтому фон никогда не окрашивается.
Однако это НЕ способ делать обычную роспись. Вы НЕ должны переопределять метод paint() для JFrame. Если вы хотите сделать обычную картину, переопределите метод paintComponent()
JPanel
а затем добавьте панель в фрейм.
Прочтите раздел из учебника Swing по пользовательской живописи для получения дополнительной информации.
Редактировать:
После добавления super.paint(g) будут раскрашены дочерние компоненты кадра. Это означает, что панель содержимого окрашивается, а панель содержимого окрашена над рамкой, поэтому вы не увидите фон кадра, поэтому вам также нужно добавить:
//setBackground(Color.PINK);
getContentPane().setBackground(Color.PINK);
and it worked for him
- я сомневаюсь в этом именно по той причине, которую я уже дал вам. Хотя мой первоначальный ответ был неполным. Смотрите редактирование. Кроме того, имена классов должны начинаться с заглавной буквы. При размещении кода на форуме соблюдайте соглашения Java.
Картина фона выполнена в функции краски. Итак, вы должны вызвать super.paint(g)
в начале функции paint.
Кроме того, вам необходимо переопределить функцию setBackground.
Таким образом, код становится:
public void paint(Graphics g){
super.paint(g);
g.drawString("This is gonna be awesome", 200, 200);
}
public void setBackground(Color color){
super.setBackground(color);
getContentPane().setBackground(color);
}
setOpaque(true)
.