Dialogfenster schliessen per Default-Key klappt nicht :-(

vfl_freak

Premium-User
Guten Morgen,

ich schlage mich seit ein paar Tagen mit einem hartnäckigen Problem in einer neuen Klasse herum.

Zu Beginn der Anwendung wird ein spezieller Text in einem Dialogfenster angezeigt. Dieser Dialog besteht aus drei Panels: NORTH für eine Überschrift, CENTER für die TextArea und SOUTH für zwei Button (FAQ und Schliessen).

Damit dieser Dialog, wie viele andere auch bei uns, einfach durch Drücken der Leertaste geschlossen werden kann, habe ich dem Schliessen-Button den Fokus gegeben und ihn auch zum Default-Button gemacht. Da das alles nichts half, habe ich sogar einen KeyListener eingefügt, der bei Betätigen der Leertaste ein das Schliessen des Fenster anstossen soll ....

Nur leider klappt das nicht! Das Betätigen der Leertaste bleibt ohne jede Folge. Drücke ich dagegen auf <ENTER>, dann wird das Fenster auch geschlossen!

Hier mal der Code der Klasse:
Java:
public class DlgNKPermits
	extends JDialog
	implements KeyListener
{
	  Frame parentFrame = null; 
	  
	  Panel pnMain = new Panel();
	  JPanel jPanel1 = new JPanel();
	  JPanel jPanel2 = new JPanel();
	  JPanel jPanel3 = new JPanel();
	  
	  BorderLayout borderLayout1 = new BorderLayout();
	  BorderLayout borderLayout2 = new BorderLayout();
	  BorderLayout borderLayout3 = new BorderLayout();
	  
	  JButton btnSchliessen = new JButton();
	  JButton btnFAQ = new JButton();

	  JLabel jLabelHeadline = new JLabel();
	  JTextArea jTextBereich = new JTextArea();
	  
	  byte[] bufNKPermits = null;

	  public DlgNKPermits( Frame frame, String title, boolean modal, byte[] dataBuf ) 
	  {
		  super(frame, title, modal);

		  parentFrame = frame;
		  bufNKPermits = dataBuf;
		  this.addKeyListener( this );
		  
		  try 
		  {
			  jbInit();
			  add( pnMain );
			  pack();
		  }
		  catch(Exception ex) 
		  {
			  ex.printStackTrace();
		  }
	  }

	  private void jbInit() throws Exception 
	  {
		  pnMain.setLayout( borderLayout1 );

		  jPanel1.setLayout( borderLayout2 );
		  jPanel1.setPreferredSize( new Dimension(650, 60) );

		  jPanel2.setLayout( borderLayout3 );
		  jPanel2.setPreferredSize( new Dimension(650, 490) );

		  btnFAQ.setMnemonic('F');
		  btnFAQ.setText("FAQ");
		  btnFAQ.setToolTipText( "Frequently Asked Questions" );
		  btnFAQ.setBackground( Color.YELLOW );
		  btnFAQ.addActionListener( new DlgNKPermits_BtnFAQ_actionAdapter(this) );
		  btnFAQ.setFocusable( false );

		  btnSchliessen.setText( "Schließen" );
		  btnSchliessen.setMnemonic('H');
		  btnSchliessen.addActionListener( new DlgNKPermits_BtnSchliessen_actionAdapter(this) );
		  btnSchliessen.requestFocus( true );
		  btnSchliessen.setSelected( true );
		  getRootPane().setDefaultButton( btnSchliessen );

		  jLabelHeadline.setBounds( new Rectangle(50, 50, 650, 40) );
		  jLabelHeadline.setText( "<HTML><b><FONT SIZE = 5>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Übersicht über die Nutzungsklassen, die Sie bearbeiten dürfen:</FONT></b></HTML>" );
		  	
		  jTextBereich.setFont( new java.awt.Font("Monospaced", Font.BOLD, 15) );
		  jTextBereich.setText( "\n"
				+ "         |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9\n"
				// ..... hier wird der Text ausgegeben !
		  );
		  jTextBereich.setEditable( false );
		  jTextBereich.requestFocus( false );
		  
		  pnMain.add( jPanel1, BorderLayout.NORTH );
		  pnMain.add( jPanel2, BorderLayout.CENTER );
		  pnMain.add( jPanel3, BorderLayout.SOUTH );

		  jPanel1.add( jLabelHeadline );
		  jPanel2.add( jTextBereich, BorderLayout.CENTER );

		  jPanel3.add( btnFAQ, null );
		  jPanel3.add( Box.createRigidArea(new Dimension(60,0)) );
		  jPanel3.add( btnSchliessen, null );

		  if (parentFrame != null)
		  {
			  Dimension dlgSize = getPreferredSize();
			  Dimension parentfrmSize = parentFrame.getSize();
			  Point parloc = parentFrame.getLocation();
			  setLocation( (parentfrmSize.width - dlgSize.width - 560) / 2 + parloc.x,
						   (parentfrmSize.height - dlgSize.height - 800) / 2 + parloc.y );
		  }
	  } // jbInit
	  
	  
	  private char setPermit( byte cItem )
	  {
		  char cReturn;
		  if( cItem == 0 )
		  {
			  cReturn = '-';
		  }
		  else
		  {
			  cReturn = '#';
		  }
		  return cReturn;
	  }

	  void btnSchliessen_actionPerformed( ActionEvent e ) 
	  {
		  dispose();
	  }

	  
	  void btnFAQ_actionPerformed( ActionEvent e ) 
	  {
		  String strKnz = "FAQWOR0032          ";
		  String sTitle = "Frequently Asked Questions";
		  DlgMemoEditorGeneric dlgFAQ = new DlgMemoFAQEditor( parentFrame, sTitle, strKnz, 
				    DlgMemoEditorGeneric.BUTTONMODE_ABBRECHEN |
	  				DlgMemoEditorGeneric.BUTTONMODE_UEBERNEHMEN, true);
	  	  dlgFAQ.setTextBackgroundColor( Color.white );
	  	  dlgFAQ.setSize(700, 750 );
	  	  dlgFAQ.setLocation( 350, 100 );
	  	  dlgFAQ.setTextEditable( true );
	  	  dlgFAQ.readData();
	  	  dlgFAQ.setVisible( true );
	  } // btnFAQ_actionPerformed

	  
	  public void keyTyped( KeyEvent event )
	  {
		  int taste = event.getKeyCode( );
		  if( taste == KeyEvent.VK_SPACE )
		  {
//			  btnSchliessen.doClick( );
			  btnSchliessen_actionPerformed( null );
		  }
	  } // keyTyped

	  
	  public void keyPressed( KeyEvent event )
	  {
	  } // keyPressed
	  

	  public void keyReleased( KeyEvent event )
	  {
	  } // keyReleased
	  
} // class DlgNKPermits


class DlgNKPermits_BtnFAQ_actionAdapter implements java.awt.event.ActionListener 
{
	DlgNKPermits adaptee;	

	DlgNKPermits_BtnFAQ_actionAdapter( DlgNKPermits adaptee ) 
	{
		this.adaptee = adaptee;
	}
	
	public void actionPerformed(ActionEvent e) 
	{
		adaptee.btnFAQ_actionPerformed(e);
	}
} // class DlgNKPermits_jBtnSchliessen_actionAdapter



class DlgNKPermits_BtnSchliessen_actionAdapter implements java.awt.event.ActionListener 
{
	DlgNKPermits adaptee;	

	DlgNKPermits_BtnSchliessen_actionAdapter( DlgNKPermits adaptee ) 
	{
		this.adaptee = adaptee;
	}
	
	public void actionPerformed(ActionEvent e) 
	{
		adaptee.btnSchliessen_actionPerformed(e);
	}
} // class DlgNKPermits_BtnSchliessen_actionAdapter


Was manche ich hier falsch :confused: :rolleyes:
Bei anderen Masken funktioniert das Zusammenspiel "requestFocus" und "setDefault" mit <SPACE> einwandfrei (zumindest glaubte ich bislang, dass es daran lag :p )

Danke im voraus für Eure Ideen :)

Gruß
Klaus
 
Zuletzt bearbeitet:
Moin,

für alle, die es interessiert:

nach längerem Gefummel und Einfügen eines WindowListener, der im Falle windowOpened erneut für den gewünschten "Schliessen"-Button ein requestFocus durchführte, wurden die KeyEvents richtig erkannt und auch ausgewertet ......

Hier nochmal der komplette Code:

Java:
public class DlgNKPermits extends JDialog
{
    private static final long serialVersionUID = 1L;
    
      Frame parentFrame = null; 
      
      Panel pnMain = new Panel();
      JPanel jPanel1 = new JPanel();
      JPanel jPanel2 = new JPanel();
      JPanel jPanel3 = new JPanel();
      
      BorderLayout borderLayout1 = new BorderLayout();
      BorderLayout borderLayout2 = new BorderLayout();
      BorderLayout borderLayout3 = new BorderLayout();
      
      JButton btnSchliessen = new JButton();
      JButton btnFAQ = new JButton();

      JLabel jLabelHeadline = new JLabel();
      JTextArea jTextBereich = new JTextArea();
      
      byte[] bufNKPermits = null;

      public DlgNKPermits( Frame frame, String title, boolean modal, byte[] dataBuf ) 
      {
          super(frame, title, modal);

          try 
          {
              parentFrame = frame;
              bufNKPermits = dataBuf;
              
              jbInit();
              pack();
          }
          catch(Exception ex) 
          {
              ex.printStackTrace();
          }
      }

      private void jbInit() throws Exception 
      {
          pnMain.setLayout( borderLayout1 );

          jPanel1.setLayout( borderLayout2 );
          jPanel1.setPreferredSize( new Dimension(650, 60) );

          jPanel2.setLayout( borderLayout3 );
          jPanel2.setPreferredSize( new Dimension(650, 490) );

          btnFAQ.setMnemonic('F');
          btnFAQ.setText("FAQ");
          btnFAQ.setToolTipText( "Frequently Asked Questions" );
          btnFAQ.setBackground( Color.YELLOW );
          btnFAQ.addKeyListener( new DlgNKPermits_BtnFAQ_keyAdapter(this) );
          btnFAQ.addActionListener( new DlgNKPermits_BtnFAQ_actionAdapter(this) );
          btnFAQ.setFocusable( false );

          btnSchliessen.setText( "Schließen" );
          btnSchliessen.setMnemonic('H');
          btnSchliessen.addKeyListener( new DlgNKPermits_BtnSchliessen_keyAdapter(this) );
          btnSchliessen.addActionListener( new DlgNKPermits_BtnSchliessen_actionAdapter(this) );

          jLabelHeadline.setBounds( new Rectangle(50, 50, 650, 40) );
          jLabelHeadline.setText( "<HTML><b><FONT SIZE = 5>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Übersicht über die Nutzungsklassen, die Sie bearbeiten dürfen:</FONT></b></HTML>" );
              
          jTextBereich.setFont( new java.awt.Font("Monospaced", Font.BOLD, 15) );
          jTextBereich.setText(
                  "\n"
                  + "         |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9\n"
                  // ..... plus der anzuzeigende Text
          );
          jTextBereich.setEditable( false );
          jTextBereich.requestFocus( false );
          
          getContentPane().add( pnMain );
          pnMain.add( jPanel1, BorderLayout.NORTH );
          pnMain.add( jPanel2, BorderLayout.CENTER );
          pnMain.add( jPanel3, BorderLayout.SOUTH );

          jPanel1.add( jLabelHeadline );
          jPanel2.add( jTextBereich, BorderLayout.CENTER );
          
          this.setResizable(false);
          this.addWindowListener( new DlgNKPermits_this_windowAdapter(this) );

          jPanel3.add( btnFAQ, null );
          jPanel3.add( Box.createRigidArea(new Dimension(60,0)) );
          jPanel3.add( btnSchliessen, null );
          
          btnSchliessen.requestFocus( true );

          if (parentFrame != null)
          {
              Dimension dlgSize = getPreferredSize();
              Dimension parentfrmSize = parentFrame.getSize();
              Point parloc = parentFrame.getLocation();
              this.setLocation( (parentfrmSize.width - dlgSize.width - 300)  + parloc.x,
                                 (parentfrmSize.height - dlgSize.height - 300) + parloc.y);
          }
      } // jbInit
      

      void btnSchliessen_actionPerformed( ActionEvent e ) 
      {
          this.dispose();
      }

      
      void btnFAQ_actionPerformed( ActionEvent e ) 
      {
            String strKnz = "FAQWOR0032          ";
            String sTitle = "Frequently Asked Questions";
            DlgMemoEditorGeneric dlgFAQ = new DlgMemoFAQEditor( parentFrame, sTitle, strKnz, 
                    DlgMemoEditorGeneric.BUTTONMODE_ABBRECHEN |
                      DlgMemoEditorGeneric.BUTTONMODE_UEBERNEHMEN, true);
            dlgFAQ.setTextBackgroundColor( Color.white );
            dlgFAQ.setSize(700, 750 );
            dlgFAQ.setLocation( 350, 100 );
            dlgFAQ.setTextEditable( true );
            dlgFAQ.readData();
            dlgFAQ.setVisible( true );
      } // btnFAQ_actionPerformed

      
      public void keyPressed( KeyEvent event )
      {
          int taste = event.getKeyCode( );
          
          if( taste == KeyEvent.VK_ENTER )
          {
              btnSchliessen.doClick( );
          }

          if( taste == KeyEvent.VK_SPACE )
          {
              btnSchliessen.doClick( );
          }
      } // keyPressed
      
      
      void this_windowOpened( WindowEvent e ) 
      {
          btnSchliessen.requestFocus( true );
      }

      
      void this_windowClosed( WindowEvent e ) 
      {}
      
} // class DlgNKPermits

/* ******************************************************************************* */

class DlgNKPermits_this_windowAdapter extends java.awt.event.WindowAdapter 
{
    DlgNKPermits adaptee;

    DlgNKPermits_this_windowAdapter( DlgNKPermits adaptee )
    {
        this.adaptee = adaptee;
    }
    
    public void windowOpened( WindowEvent e ) 
    {
        adaptee.this_windowOpened( e );
    }
    
    public void windowClosed( WindowEvent e ) 
    {
        adaptee.this_windowClosed( e );
    }
}

/* ******************************************************************************* */

class DlgNKPermits_BtnFAQ_actionAdapter implements java.awt.event.ActionListener 
{
    DlgNKPermits adaptee;    

    DlgNKPermits_BtnFAQ_actionAdapter( DlgNKPermits adaptee ) 
    {
        this.adaptee = adaptee;
    }
    
    public void actionPerformed(ActionEvent e) 
    {
        adaptee.btnFAQ_actionPerformed(e);
    }
} // class DlgNKPermits_jBtnSchliessen_actionAdapter

/* ******************************************************************************* */

class DlgNKPermits_BtnSchliessen_actionAdapter implements java.awt.event.ActionListener 
{
    DlgNKPermits adaptee;    

    DlgNKPermits_BtnSchliessen_actionAdapter( DlgNKPermits adaptee ) 
    {
        this.adaptee = adaptee;
    }
    
    public void actionPerformed(ActionEvent e) 
    {
        adaptee.btnSchliessen_actionPerformed(e);
    }
} // class DlgNKPermits_BtnSchliessen_actionAdapter
    
/* ******************************************************************************* */

class DlgNKPermits_BtnSchliessen_keyAdapter extends java.awt.event.KeyAdapter 
{
    DlgNKPermits adaptee;

    DlgNKPermits_BtnSchliessen_keyAdapter( DlgNKPermits adaptee ) 
    {
        this.adaptee = adaptee;
    }
    
    public void keyPressed( KeyEvent e ) 
    {
        adaptee.keyPressed( e );
    }
} // DlgNKPermits_BtnSchliessen_keyAdapter

/* ******************************************************************************* */

class DlgNKPermits_BtnFAQ_keyAdapter extends java.awt.event.KeyAdapter 
{
    DlgNKPermits adaptee;

    DlgNKPermits_BtnFAQ_keyAdapter( DlgNKPermits adaptee ) 
    {
        this.adaptee = adaptee;
    }
      
    public void keyPressed( KeyEvent e ) 
    {
        adaptee.keyPressed( e );
    }
} // DlgNKPermits_BtnFAQ_keyAdapter

Over and out :p
Gruß
Klaus
 

Neue Beiträge

Zurück