2016-07-30 21 views
1

Wenn ein JPanel auf nicht sichtbar eingestellt ist, ist es immer noch "anfassbar"? Wie ich habe eine JPanel auf meinem Rahmen und das Panel hat Tasten zum Beispiel. Wenn ich das Feld so einstellen würde, dass es NICHT sichtbar ist, wenn ich auf einen Knopf drücke, wenn es sichtbar wäre, würde der Knopf dann noch funktionieren?JPanel Sichtbarkeit

Ich bitte um besser zu verstehen, setVisible nicht tatsächlich zu erreichen, was oben gesagt wird.

+1

Warum haben Sie es nicht selbst getestet? – Flown

+0

Mögliches Duplikat von [JPanel, welcher der Listener für die Sichtbarkeit geeignet ist, wird geändert] (http://stackoverflow.com/questions/10880326/jpanel-which-one-of-listeners-isproper-for-visibility-is- geändert) – SkyWalker

+0

@Flown Ich verstehe, warum Sie das sagen würden. Ich habe versucht, es ein paar Mal zu testen, und ich wollte nur die Ergebnisse bestätigen, die ich hatte. Marvin Judes Antwort erlaubte mir sicherzustellen, dass die Funktionalität des Panels nicht aktiviert wird, wenn das Panel nicht sichtbar ist. –

Antwort

1

Ich weiß nicht, ob Sie getestet haben, was @Marvin Jude gesagt hat. Aber für mein Beispiel ist die Instanz unberührbar, wenn ihr übergeordneter Container unsichtbar ist.

  1. Verwenden panel.setVisible(true); oder panel.setVisible(true); die Sichtbarkeit von JPanel zu ändern.
  2. Der Listener der Schaltfläche wird nicht ausgelöst, wenn MainPanel nicht sichtbar ist.

Siehe Code unten.

import java.awt.BorderLayout; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 

    import javax.swing.*; 

    public class MyFrame extends JFrame{ 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 1L; 

     public MyFrame(){ 
      MainPanel panel = new MainPanel(); 
      add(panel,BorderLayout.CENTER); 
      setResizable(false); 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      setLocationRelativeTo(null); 
      pack(); 
      panel.setVisible(true); 
     } 

     class MainPanel extends JPanel{ 

      /** 
      * 
      */ 
      private static final long serialVersionUID = 1L; 
      public MainPanel(){ 
       JButton button = new JButton("I am a button"); 
       add(button); 
       button.addActionListener(new ActionListener(){ 

        @Override 
        public void actionPerformed(ActionEvent arg0) { 
         // TODO Auto-generated method stub 
         System.out.println("JButton is clicked..."); 
        } 
       }); 
      } 
     } 

     public static void main(String args[]){ 
      Runnable runnable = new Runnable() { 
       @Override 
       public void run() { 
        MyFrame myFrame = new MyFrame(); 
        myFrame.setVisible(true); 
       } 
      }; 
      SwingUtilities.invokeLater(runnable); 
     } 
    } 
+0

Ja, ich habe es getestet, und es funktioniert. Ich habe ihn irgendwie als Entlassungsmaßnahme benutzt. Was Sie gesagt haben, jetzt verstehe ich, wie es ein bisschen mehr funktioniert. Vielen Dank! –

2

Es funktioniert immer noch, wenn es nicht sichtbar ist, aber Wenn Sie nicht möchten, dass es die Funktion ausführt, für die es gemacht wurde, dann verwenden Sie die .Enabled-Methode.

+0

Danke! Ich habe nie darüber nachgedacht, die .enabled-Methode zu verwenden! –