Java图形中的背景颜色2D始终是黑色
问题描述:
*我试图打印一些东西,但背景为粉红色和白色文本。但文字颜色确实改变,但屏幕始终呈黑色。 *Java图形中的背景颜色2D始终是黑色
import java.awt.*;
import javax.swing.JFrame;
public class Screen {
private GraphicsDevice vc;
public Screen(){
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 void restoreScreen(){
Window w=vc.getFullScreenWindow();
if(w!=null){
w.dispose();
}
vc.setFullScreenWindow(null);
}
}
现在主要的方法:
import javax.swing.JFrame;
import java.awt.*;
public class myGuiMain extends JFrame {
public static void main(String arg[]){
// Screen.java
DisplayMode dm = new DisplayMode(800,600,16,DisplayMode.REFRESH_RATE_UNKNOWN);
myGuiMain m = new myGuiMain();
m.run(dm);
}
public void run(DisplayMode dm){
setForeground(Color.WHITE);
setBackground(Color.PINK);
setFont(new Font("Arial",Font.PLAIN,25));
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);
}
}
结果:
我一直在寻找互联网上,但什么也没有结束。如果有人能解决这个问题,请提前致谢。
答
问题1:从JFrame
延伸。通常这是不鼓励的,因为它会将你锁定到一个用例中(你不能真正将框架添加到其他任何东西),此外,你并没有真正为课程添加任何新功能。最好是在需要时简单创建实例
问题2:覆盖*容器(JFrame
)的paint
。这通常是由于以下原因而不鼓励的:打破油漆链(你已经完成)都很容易;它不是双缓冲(对闪烁的更新说你好);子组件可以被绘制而不需要父容器被重新绘制(你好奇怪的油漆更新和证书)。
最好创建一个自定义类,从一些延伸喜欢JPanel
并重写它的paintComponent
方法,有执行您的自定义的绘画(和呼叫super.paintComponent
你做任何自定义涂装前)
更多细节
见 Painting in AWT and Swing和 Performing Custom Painting喜欢的东西...
import java.awt.Color;
import java.awt.Dimension;
import java.awt.DisplayMode;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Window;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class myGuiMain {
public static void main(String arg[]) {
new myGuiMain();
}
public myGuiMain() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
DisplayMode dm = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
try {
Screen.setFullScreen(dm, frame);
try {
Thread.sleep(5000);
} catch (Exception ex) {
}
} finally {
Screen.restoreScreen();
}
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setForeground(Color.WHITE);
setBackground(Color.PINK);
setFont(new Font("Arial", Font.PLAIN, 25));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(600, 400);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(getForeground());
g2d.drawString("This is gonna be awesome", 200, 200);
g2d.dispose();
}
}
public static class Screen {
public static void setFullScreen(DisplayMode dm, JFrame window) {
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice vc = env.getDefaultScreenDevice();
window.setUndecorated(true);
window.setResizable(false);
vc.setFullScreenWindow(window);
if (dm != null && vc.isDisplayChangeSupported()) {
try {
vc.setDisplayMode(dm);
} catch (Exception ex) {
}
}
}
public static void restoreScreen() {
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice vc = env.getDefaultScreenDevice();
Window w = vc.getFullScreenWindow();
if (w != null) {
w.dispose();
}
vc.setFullScreenWindow(null);
}
}
}
您可能还想看看2D Graphics
您认为'foreground'和'background'属性应用于何时?我想你可能想看看[在AWT和Swing中绘画](http://www.oracle.com/technetwork/java/painting-140037.html)和[执行自定义绘画](http:// docs .oracle.com/JavaSE的/教程/ uiswing /画/) – MadProgrammer