【发布时间】:2018-05-25 19:43:39
【问题描述】:
我正在尝试运行以下程序,这些程序应该显示背景颜色 PINK 和字符串“这是一个测试”。白色
1) Test.java
package Practice;
import java.awt.*;
import javax.swing.JFrame;
public class Test extends JFrame{
public static void main(String[] args){
DisplayMode dm = new DisplayMode(800,600,16,DisplayMode.REFRESH_RATE_UNKNOWN);
Test test = new Test();
test.run(dm);
}
public void run(DisplayMode dm){
setBackground(Color.PINK);
setForeground(Color.WHITE);
setFont(new Font("Arial", Font.PLAIN, 24));
Screen s = new Screen();
try{
s.setFullScreen(dm, this);
try{
Thread.sleep(5000);
}catch(Exception ex){
ex.printStackTrace();
}
}finally{
s.restoreScreen();
}
}
public void paint(Graphics g){
g.drawString("This is a test.", 200, 200);
}
}
2) Screen.java
package Practice;
import java.awt.*;
import javax.swing.JFrame;
public class Screen {
private GraphicsDevice videoCard;
public Screen(){
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
videoCard = env.getDefaultScreenDevice();
}
public void setFullScreen(DisplayMode dm, JFrame window){
window.setUndecorated(true);
window.setResizable(false);
videoCard.setFullScreenWindow(window);
if(dm != null && videoCard.isDisplayChangeSupported()){
try{
videoCard.setDisplayMode(dm);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public Window getFullScreenWindow(){
return videoCard.getFullScreenWindow();
}
public void restoreScreen(){
Window w = videoCard.getFullScreenWindow();
if(w != null){
w.dispose();
}
videoCard.setFullScreenWindow(null);
}
}
预期结果:
全屏显示背景颜色 PINK 和字符串“这是一个测试”。白色
实际结果:
全屏显示背景颜色黑色和字符串“这是一个测试”。白色。
我在 Windows 机器上的 Eclipse 中运行它。
【问题讨论】:
-
不要设置框架的背景和前景。绘制方法中的图形对象不处理框架背景或前景。您必须为图形对象设置颜色 (
g.setColor (Color.PINK);)。此外,从不 覆盖paint 方法(改用paintComponent),并且不要在您的框架类中这样做。您可以在扩展 JPanel 的类中完成所有绘画工作(在paintComponent方法中),然后将该面板添加到框架中。 -
@Ansharja 好吧,我目前只有这两个课程。设置图形对象后(g.setColor(Color.PINK);)。我也遇到了同样的问题。
-
您是否在 绘制字符串之前设置图形颜色?
-
我在之前和之后都试过了,但在之前的情况下:我的字体被改变了,而不是背景颜色。