Problem mit FocusEvent Gained

Humpfelpumpf

Mitglied
Nabend.

Irgendwie ist bei mir der Wurm drinn...

Ich möchte auf einem JFrame 2Jpanel platzieren.
Dabei soll ersichtlich sein, welches Panel gerade den Fokus hat.

Nur leider passiert bei mir nix im Fenster wenn ich meinen Code ausführe.....

Jemand ne idee oder hab ich irgendetwas vergessen und/oder übersehen ??


Java:
import com.sun.java.swing.plaf.windows.WindowsBorders.DashedBorder;
import java.awt.Color;

public class TrinkreifeLayout extends java.awt.Frame {

    /** Creates new form TrinkreifeLayout */
    public TrinkreifeLayout() {
        initComponents();
    }

    

    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {                          
        System.exit(0);
    }                         

    private void jPanel2FocusGained(java.awt.event.FocusEvent evt) {
        // TODO add your handling code here:
        jPanel2.setBorder(new DashedBorder(Color.RED));
        jPanel2.setBackground(Color.WHITE);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TrinkreifeLayout().setVisible(true);
            }
        });
    }


    // Variables declaration - do not modify
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JSpinner jSpinner1;
    // End of variables declaration

}
 
Bin mir nicht sicher ob JPanels standardmäßig überhaupt den Fokus bekommen können oder ob das nicht nur für Steuerelemente und Textkomponenten implementiert ist.

Ansonsten:
- wenn Du mit Swing arbeitest nimm doch auch JFrame statt Frame
- es fehlt die initComponents()
 
Argh, jo JFrame sollte es schon sein, hab ich auch direkt mal geändert.....allerdings bleibts leider dabei, dass sich nichts ändert am Fenster, wenn ich mit der Maus auf das Panel klicke....

Die initComponents() ist bloss ausgeblendet. (Arbeite mit diese GUI - Editor unter Netbeans)
Hier der Vollständigkeithalber noch die initComponent:
Java:
// <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jSpinner1 = new javax.swing.JSpinner();
        jPanel2 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });
        add(jSpinner1, java.awt.BorderLayout.NORTH);

        jPanel2.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jPanel2FocusGained(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 342, Short.MAX_VALUE)
        );

        add(jPanel2, java.awt.BorderLayout.EAST);

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 342, Short.MAX_VALUE)
        );

        add(jPanel3, java.awt.BorderLayout.WEST);

        pack();
    }// </editor-fold>
 
Kommt's nur auf den Mausklick an? Dann nimm einen MouseListener. Wie gesagt mit JPanel und Fokus bin ich mir nicht sicher, ob das standardmässig funktioniert, müsste ich auch erst mal nachschauen.
 
Ja mit Mausklick gehts das. Nur leider tut sich dann ein nächstes Problem bei mir auf.

Ich möchte den inhalt eines Panels ein bzw aus blenden wenn ich '+' bzw '-' drücke.

Meine Idee sah so aus:

Java:
 private void legende1MouseClicked(java.awt.event.MouseEvent evt) {                                      
        // TODO add your handling code here:

       fokus = 1;
        legende1.setBorder(new DashedBorder(Color.RED));
        balken1.setBorder(null);
}

private void legende1KeyPressed(java.awt.event.KeyEvent evt) {
        // TODO add your handling code here:
        if ((fokus ==1) && (evt.getKeyChar() == '+')) {
            legende1.setzeLegende();
            legende1.repaint();
        }
        if (fokus ==1 && (evt.getKeyChar() == '-')) {
            legende1.entferneLegende();
            legende1.repaint();
        }
    }

Aber das funzt leider nicht. Habe es auch mal mit der KeyTyped Variante versucht, die klappt aber leider auch nicht...
 
ok. mein Problem hat sich erledigt.

Die einzelnen JPanels sollten den Fokus über das benutzten der "tab taste" bekommen.

Und das funktioniert tatsächlich wunderbar 🙂


Trotzdem danke, dass du dir die zeit genommen hast mir weiterzuhelfen 🙂
 

Zurück
Oben