/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Et focus-mysterie!
Fra : Janus


Dato : 03-09-08 04:19

Hej NG!

Jeg sad og rodede lidt med JInternalFrame, og stødte i den sammenhæng
på et - for mig - uforklarligt fænomen: Der bliver kastet en focus
gained event efterfulgt af en focus lost event, når en JInternalFrame
bliver lukket op (de-iconified).

Hvorfor bliver disse events affyret? Ydermere, hvis jeg har 2
JInternalFrames på min JDesktopPane, bliver events'ne kun affyret,
hvis det er den lokationsmæssige nederste JInternalFrame der lukkes
op. Hvordan kan det være?

Jeg har tilføjet et lille testprogram, som I kan prøve.


Mvh Janus


------


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.beans.PropertyVetoException;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;


public class Frame extends JFrame implements FocusListener {

   private JDesktopPane desktop;
   private InternalFrame intF1, intF2;

   public static void main(String[] args) {
      new Frame();
   }

   public Frame() {
      super();
      getContentPane().setLayout(new BorderLayout());
      desktop = new JDesktopPane();
      getContentPane().add("Center", desktop);

      setBounds (10, 10, 800, 600);
      setResizable(false);

      intF1 = new InternalFrame("Internal 1");
      desktop.add(intF1, new Integer(7));

      intF2 = new InternalFrame("Internal 2");
      desktop.add(intF2, new Integer(7));

      try {
         intF1.setIcon(true);
         intF2.setIcon(true);
      }
      catch (PropertyVetoException pvExc) {
      }

      LayeredPanel lPanel = new LayeredPanel();
      JPanel context = lPanel.getPanel();

      JTextField field = new JTextField();
      field.setPreferredSize(new Dimension(150, 30));
      context.add(field);

      field.addFocusListener(this);

      desktop.add(lPanel, new Integer(5));
      lPanel.setBounds(0, 0, 800, 600);

      setVisible(true);
   }

   class LayeredPanel extends JLayeredPane {
      private JPanel panel;

      public LayeredPanel() {
         super();
         panel = new JPanel();
         panel.setBounds(0, 0, 800, 600);
         add(panel);
         setLayer(panel, 0);
      }

      public JPanel getPanel() {
         return panel;
      }
   }

   class InternalFrame extends JInternalFrame {
      public InternalFrame(String title) {
         super(title, true, false, true, true);
         JPanel panel = new JPanel(new BorderLayout());
         JTextArea area = new JTextArea("Text Area");
         area.setPreferredSize(new Dimension(300, 300));

         panel.add(area, BorderLayout.CENTER);
         getContentPane().add(panel);

         pack();
         setLocation(100, 100);
         show();
      }
   }

   public void focusGained(FocusEvent arg0) {
      System.out.println("Focus gained: " + arg0.getComponent());
   }

   public void focusLost(FocusEvent arg0) {
      System.out.println("Focus lost: " + arg0.getComponent());
   }
}

 
 
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste