2016-06-24 5 views
0

私のプログラムではJLabelにマウスを置き、JLabelからマウスを削除するとJFrameを閉じると、私はJFrameを表示しようとします。JLabelにマウスを置くとJFrameを呼び出す方法と同じJFrameを閉じる方法JLabelからマウスを削除するとどうなりますか?

私はそれをどのように行うことができますか?

は私が道の下にしようとしたが、私は私が入れたときにどのようにJFrameを表示するために、私はメインコード

を持って継続的にウィンドウを点滅(ポップアップし、継続的に近い)これらの行//============間で

public class NewJFrame extends javax.swing.JFrame { 

    NewJFrame1 frame = new NewJFrame1(); 
    public NewJFrame() { 
    initComponents(); 

} 
    private void initComponents() { 

    jLabel1 = new javax.swing.JLabel(); 
    jTextField1 = new javax.swing.JTextField(); 
    jButton1 = new javax.swing.JButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
    //====================================================================== 
    jLabel1.addMouseListener(new MouseAdapter() 
     { 

      public void mouseEntered(MouseEvent e) 
      { 
       frame.setVisible(true); 
      } 
     }); 
     jLabel1.addMouseListener(new MouseAdapter() 
      { 
       public void mouseExited(MouseEvent e) 
       { 
        frame.setVisible(false); //Hide window 
       } 
      }); 
      jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
      jLabel1.setText("Testing "); 

    //====================================================================== 
    pack(); 
     } 
public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new NewJFrame().setVisible(true); 
     } 
    }); 

} 
public javax.swing.JLabel jLabel1; 
} 

を取得していますJLabelからマウスを削除すると、JLabelにマウスがあり、JFrameを閉じるにはどうすればいいですか? 以下のコードを削除すると、JLabelにマウスを置くとJLabelからマウスを削除すると、JFrameポップアップが表示されますが、JFrameポップアップを閉じる必要があります。

jLabel1.addMouseListener(new MouseAdapter() 
    { 
     public void mouseExited(MouseEvent e) 
     { 
      frame.setVisible(false); //Hide window 
     } 
    }); 
+0

単一の 'MouseAdapter'を使用して、' mouseEntered'と 'mouseExited'の両方をオーバーライドすることができます。 – Berger

+1

[mcve]を投稿すると、より良いヘルプが得られます。 – c0der

+0

私はすべての準備ができているが、同じ出力を与える準備ができている - @バーガー – honey1

答えて

1

JFrameにJLabel(および他のコンポーネント)を追加する必要があります。 これを実行してJLabelをJFrameに表示すると、JLabelのリスナーを使用できます。
EDITED:ここ
A.あなたは第二のJFrameを隠す/表示するには、いくつかの最小限の変更でコードです:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class NewJFrame extends javax.swing.JFrame { 


    javax.swing.JFrame frame ; 

    //this will not compile and not needed 
    //NewJFrame1 frame = new NewJFrame1(); 

    public NewJFrame() { 
     initComponents(); 

    } 
    private void initComponents() { 

     frame = getAJFrame(); 

     //set a layout manger 
     getContentPane().setLayout(new GridLayout(3, 1)); 
     setLocationRelativeTo(null); 
     jLabel1 = new javax.swing.JLabel(); 
     //add component 
     getContentPane().add(jLabel1); 

     JTextField jTextField1 = new javax.swing.JTextField(); 
     //add component 
     getContentPane().add(jTextField1); 

     JButton jButton1 = new javax.swing.JButton(); 
     //add component 
     getContentPane().add(jButton1); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     //====================================================================== 


     jLabel1.addMouseListener(new MouseAdapter() 
     { 

      @Override 
      public void mouseEntered(MouseEvent e) 
      { 
       frame.setVisible(true); 
       frame.pack(); 
      } 
     }); 

     jLabel1.addMouseListener(new MouseAdapter() 
     { 
      @Override 
      public void mouseExited(MouseEvent e) 
      { 
       frame.setVisible(false); //Hide window 
      } 
     }); 
     jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel1.setText("Testing "); 

     //====================================================================== 
     //set a size to the fram 
     setPreferredSize(new Dimension(200,100)); 
     pack(); 

    } 

    /** 
    *@return 
    */ 
    private JFrame getAJFrame() { 

     JFrame f = new JFrame("A JFrame"); 
     setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); 
     f.getContentPane().setPreferredSize(new Dimension(150,150)); 
     f.getContentPane().setBackground(Color.BLUE); 
     setVisible(false); 
     pack(); 
     return f; 
    } 

    public static void main(String args[]) { 

     java.awt.EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       NewJFrame frame = new NewJFrame(); 
       frame.setVisible(true); 
      } 
     }); 
    } 
    public javax.swing.JLabel jLabel1; 
} 

B. あなたは/非表示NewJFrame自体を表示しようとしている場合:あなたはされませんmouseEnteredを使用してJFrameを再び表示させることができます。 JFrame(およびその内部のJLabel)がsetVisible(false)の場合、マウスイベントは生成されません。 マウスがJLabelを終了するとフレームが非表示になります。別の手法を使用して再び見えるようにする必要があります。


私の答えが十分明確でないかどうか尋ねることをためらわずにください。

+0

あなたが言ったことのように私のコードを変更するにはどうすればいいですか?@ c0der – honey1

+0

2番目のJFrameを開いたり閉じたりしますか?またはNewJFrame()自体ですか? – c0der

+0

秒JFrame _ @ c0der – honey1

1
  1. あなたのコードは完全に間違っています。あなたは何を試してみますか?
  2. 問題は、ラベルの上に新しいJFrameを作成して、マウスのフォーカスが新しいJFrameに変わり、JLabelのリスナーが新しいウィンドウが消え去ると言うことです。これを修正するには、新しい位置を現在のウィンドウの外に設定します。

    public static void main(String[] args) { 
        EventQueue.invokeLater(() -> { 
         Main ex = new Main(); 
         ex.setVisible(true); 
        }); 
    } 
    

    次いでパネルにコンポーネントを追加:次に、新しいスプラッシュのJFrameを作成し、同様に現在の設定

    JPanel panel = new JPanel(); 
    this.add(panel); 
    
    JLabel jLabel1 = new JLabel("Label"); 
    JTextField jTextField1 = new JTextField("Field"); 
    JButton jButton1 = new JButton("Button"); 
    panel.add(jLabel1); 
    panel.add(jTextField1); 
    panel.add(jButton1); 
    

    ここ

  3. はメインメソッドのコードです。メインクラスはJFrameを継承しているので、キーワードthisを使用できます。

    JFrame frame = new JFrame(); 
    frame.setSize(300, 200); 
    frame.setVisible(false); 
    
    this.setTitle("Title"); 
    this.setSize(300, 200); 
    this.setLocationRelativeTo(null); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    

そして最後にリスナーがあなたのコードから仕事をしてみましょう。

関連する問題