2015-07-21 141 views
0

*我试图打印一些东西,但背景为粉红色和白色文本。但文字颜色确实改变,但屏幕始终呈黑色。 *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); 

} 
} 

结果:

enter image description here

我一直在寻找互联网上,但什么也没有结束。如果有人能解决这个问题,请提前致谢。

+1

您认为'foreground'和'background'属性应用于何时?我想你可能想看看[在AWT和Swing中绘画](http://www.oracle.com/technetwork/java/painting-140037.html)和[执行自定义绘画](http:// docs .oracle.com/JavaSE的/教程/ uiswing /画/) – MadProgrammer

回答

1

问题1:JFrame延伸。通常这是不鼓励的,因为它会将你锁定到一个用例中(你不能真正将框架添加到其他任何东西),此外,你并没有真正为课程添加任何新功能。最好是在需要时简单创建实例

问题2:覆盖顶级容器(JFrame)的paint。这通常是由于以下原因而不鼓励的:打破油漆链(你已经完成)都很容易;它不是双缓冲(对闪烁的更新说你好);子组件可以被绘制而不需要父容器被重新绘制(你好奇怪的油漆更新和证书)。

最好创建一个自定义类,从一些延伸喜欢JPanel并重写它的paintComponent方法,有执行您的自定义的绘画(和呼叫super.paintComponent你做任何自定义涂装前)

更多细节

Painting in AWT and SwingPerforming Custom Painting

喜欢的东西...

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