2016-08-16 7 views
0

私はJavaコーディングで本当の初心者です。ちょっとしたプロジェクトのために、私は次のコードを手で触れないようにしたいと思います。フレームの背後にあるもの(およびその内容)をクリックすることができます。しかし、私はそれを行う方法を知らない!私はどこでも検索しましたが、何も見つかりませんでした。JFrameを無形にするにはどうすればよいですか?

import java.awt.*; 
import java.swing.*; 

public class swag { 
    static Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
public static void main(String[] args)throws Exception{ 
    JLabel lb = new JLabel(); 
    lb.setFont(new Font("Century Gothic",Font.PLAIN,50)); 
    lb.setHorizontalAlignment(SwingConstants.CENTER); 
    lb.setForeground(Color.WHITE); 
    lb.setBackground(Color.BLACK); 

    JFrame f = new JFrame(); 
    f.setSize(dim.width,100); 
    f.setDefaultCloseOperation(f.EXIT_ON_CLOSE); 
    f.setUndecorated(true); 
    f.add(lb); 
    f.setVisible(true); 

    int r=255;int g=0;int b=0; 
    int a=80;int t=15; 
    while(true){ 
     while(true){ 
      lb.setText((System.currentTimeMillis()+"")); 
      f.setBackground(new Color(r--,g++,0,a)); 
      Thread.sleep(t); 
     if(r==0&&g==255){break;} 
    } while(true){ 
      lb.setText((System.currentTimeMillis()+"")); 
      f.setBackground(new Color(0,g--,b++,a)); 
      Thread.sleep(t); 
     if(g==0&&b==255){break;} 
    } while(true){ 
      lb.setText((System.currentTimeMillis()+"")); 
      f.setBackground(new Color(r++,0,b--,a)); 
      Thread.sleep(t); 
     if(b==0&&r==255){break;} 
     }}} 
}//class 

注:JFrameとのglass paneについてはまだ効率に:)

+2

あなたはフレームがイベントに透明にしたい場合は、私はそれが可能だとは思わないが、最高のあなたが行うことができますが、それはだならば、クリックした場所の画面を検出するために、 'java.awt.Robot'クラスを使用していますフレームの上にそれを再生するロボットを使用してください。 – 11thdimension

+0

私はそれについて考えましたが、一度すべての青い印刷コードが出たら、私はそれをより効率的にするつもりです。私はそれがそれらのリスナーとBの多くを取ると思います。 – jazzboy

+0

私はあなたのBが何を意味するかわかりませんが、はい、それは2リスナー、マウスとキーボードを取るだろう。私の経験では、Robotは信頼できません。ロボットをロードしたウィンドウが最小化されると、時にはそれが聞こえなくなります。最良の解決策は、C/C++で何かを実装し、それを使ってイベントを検出し、JNIでJavaでロードすることです。 – 11thdimension

答えて

1

読むに働いていません。これを使用すると、UIコンポーネントを表示できますが、すべてのユーザー操作をブロックできます。

例:

public class FreezePane extends JComponent { 
    public FreezePane() { 
     // trap mouse, key, and focus events 
     addMouseListener(new MouseAdapter()); 
     addMouseMotionListener(new MouseMotionAdapter()); 
     addKeyListener(new KeyAdapter()); 
     addFocusListener(new FocusListener() { 
      // do not let any component take focus while visible 
      public void focusLost(FocusEvent e) { 
       requestFocusInWindow(); 
      } 
      public void focusGained(FocusEvent e) {} 
     } 
    } 
} 

それからちょうど窓ガラスを設定し、それを目に見えるよう。

JFrame frame = new JFrame(); 
frame.setGlassPane(new FreePane()); 
frame.getGlassPane().setVisible(true); 
+0

しかし、すべてのユーザーのやりとりをブロックします。 != GlassPaneはKeyEventを保護しません.KeyEventを消費するために必要です – mKorbel

関連する問題