2017-12-12 19 views
0

以下のプログラムを実行しようとしています。背景色PINKとStringを表示する必要があります。 "これはテストです"ホワイトjava.awt.Frame.setBackground(カラーarg0)が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と文字列 "これはテストです。"ホワイト

実際の結果で:

フルスクリーン表示の背景色BLACKと文字列「これはテストです」白で

私はWindowsマシン上でEclipseでこれを実行しています。

+0

は、フレームの背景と前景を設定しないでください。ペイントメソッドのGraphicsオブジェクトは、フレームの背景や前景を処理しません。グラフィックスオブジェクトに色を設定する必要があります( 'g.setColor(Color.PINK);)。また、** paintメソッドをオーバーライドしないでください(代わりに 'paintComponent'を使用してください)。フレームクラスでは行いません。JPanel( 'paintComponent'メソッド内)を継承するクラスでペイントして、そのパネルをフレームに追加することができます。 – Ansharja

+0

@Ansharjaまあ、私は現在、この2つのクラスだけがあります。グラフィックスオブジェクトを設定した後(g.setColor(Color.PINK);)私は同じ問題を抱えている。 – Anand

+0

文字列を描画する前にグラフィックスの色を設定していますか? – Ansharja

答えて

1

私が最初のコメントで言ったように、あなたがやるべきでないものがたくさんあります。

  • あなたは直接、いくつかのカスタムペイントを作るためにJFrameを使用しないでください。代わりにJPanelを使用します。この場合、JFrameを拡張する必要はありません。追加する機能はありません。

  • フレームの背景色を変更するには、フレームのコンテンツペインの背景色をよく設定する必要があります。また、文字列の描画に使用する色を変更するには、Graphics.setColor()を呼び出す必要があります。

  • paintメソッドをオーバーライドしないでください。代わりにJComponent'spaintComponentメソッドをオーバーライドします。また、メソッドの最初の行は、親塗装メソッドを呼び出して、コンポーネントが他の作業を行う前に通常塗りつぶすことができるようにする必要があります。

最後に、あなたがあなたの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

関連する問題