gpt4 book ai didi

java.awt.Frame.setBackground(Color arg0) 不显示粉红色

转载 作者:行者123 更新时间:2023-12-02 11:52:54 24 4
gpt4 key购买 nike

我正在尝试运行下面的程序,这些程序应显示背景色粉红色和字符串“这是一个测试”。白色

1) 测试.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);
}

}

预期结果:

全屏显示背景颜色粉红色和字符串“这是一个测试。”白色

实际结果:

全屏显示背景颜色黑色和字符串“这是一个测试。”白色。

我在 Windows 机器上的 eclipse 中运行它。

最佳答案

正如我在第一条评论中所说,有很多事情你不应该做:

  • 您不应该直接使用JFrame来进行一些自定义绘画。相反,请使用 JPanel。在这种情况下也不需要扩展 JFrame,您不会添加任何功能。

  • 要更改框架的背景颜色,您最好设置框架内容 Pane 的背景颜色。另外,要更改用于绘制字符串的颜色,您应该调用 Graphics.setColor ()

  • 不要重写 paint 方法。相反,重写 JComponent paintComponent 方法。另外,方法中的第一行应该调用父级绘制方法,以允许组件在执行其他操作之前正常绘制自身。

最后,尚不清楚您想在 Screen 类中做什么,但调用 Thread.sleep 实际上是一种不好的做法,对我来说所有这些代码没有多大意义。

启用全屏模式的最佳方法是在框架上调用 setExtendedState (JFrame.MAXIMIZED_BOTH)

这是我所说的一个有效示例:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
public class Test
{
public static void main (String [] a) {
SwingUtilities.invokeLater (new Runnable () {
@Override public void run () {
createAndShowGUI ();
}
});
}
private static void createAndShowGUI () {
JFrame frame = new JFrame ("App");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setContentPane (new DrawPanel (Color.PINK, Color.WHITE));
frame.pack ();
// frame.setExtendedState (JFrame.MAXIMIZED_BOTH); // You can use this instruction to have full screen mode.
frame.setLocationRelativeTo (null);
frame.setVisible (true);
}
}
class DrawPanel extends JPanel
{
Color foregroundColor;

public DrawPanel (Color backgroundColor, Color foregroundColor) {
setBackground (backgroundColor);
this.foregroundColor = foregroundColor;
}
@Override public Dimension getPreferredSize () {
return new Dimension (400, 400);
}
@Override protected void paintComponent (Graphics g) {
super.paintComponent (g);
g.setColor (foregroundColor);
g.setFont (new Font ("Arial", Font.PLAIN, 24));
g.drawString ("This is a test.", 200, 200);
}
}

屏幕截图:

enter image description here

关于java.awt.Frame.setBackground(Color arg0) 不显示粉红色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47767257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com