Tabbed Pane wechsel via HotKey

Status
Nicht offen für weitere Antworten.
M

MrWhy2

Gast
Hallo zusammen...

um es gleich vorweg zunehmen ja den Thread gibt es weiter unten schon... blos liest ihn wahrscheinlich niemand mehr ;( und das Problem besteht trotzdem... deshalb versuch ich es so noch einmal.. bitte nicht böse sein ;)

Der Link zeigt den alten Thread (ich hab die Befürchtung das der Titel zu nichts sagend war..)

www.java-forum.org/de/topic74517_tabbed-pane.html

Aber damit Ihr nicht rüber wechseln müsst schildere ich euch nochmal schnell was ich schon glaube herausgefunden zu haben ;)

Also ich möchte mit einem HotKey das TabbedPane wechseln... dafür nutze ich die setSelectedIndex Methode. Wenn ich dies über einen Button anwende funktioniert das wie gewünscht.
Über den HotKey allerdings nicht...
Nun habe ich eine andere Methode an den HotKey gebunden um zu prüfen ob jener funzt und was soll ich sagen der HotKey funktioniert auch.
Also habe ich versucht den HotKey an den Button zu binden (doClick) an dem ich die setSelectedIndex Methode gehängt habe. Nur leider funktioniert das auch nicht... Folglich schließte ich mit meinem Unwissen auf ein Focus Problem.
Also habe ich versucht dem TabbedPane den Focus zu geben. Dies habe ich mit der requestFocus Methode gemacht. Nur leider auch dies mit gar keinem Erfolg...

Hat denn nun noch jemand eine Idee für mich?

Herzlichen Dank!


Gruß

Mr
 
M

MrWhy2

Gast
Hi Wildcard

danke das du dich meinem Problem annimmst....

ich habe den kompletten Code einfach nicht gepostet da das sehr viel wäre... ich mach das mit NB... da kommt einiges zusammen...

ich habe hier aber mal mein Prob in ein klein prog gesteckt...
Der HotKey Manager:
Code:
package Desk;

import java.awt.DefaultKeyboardFocusManager;
import java.awt.event.KeyEvent;

public class HotkeyManager extends DefaultKeyboardFocusManager{
    Desk de = new Desk();
    
    @Override
    public boolean dispatchKeyEvent(KeyEvent e) {
      if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_1) {
       de.tab.setSelectedIndex(0);
         return true;
      }
     if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_2) {
       de.tab.setSelectedIndex(1);
         return true;
      }
           if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_3) {
       de.but1.doClick();
         return true;
      }
           if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_4) {
       de.but2.doClick();
         return true;
      }

      
      return super.dispatchKeyEvent(e);
   } 

}

So die Hotkeys funktionieren aber es wird nicht umgeschalten

Das JFrame:
Code:
package Desk;

import java.awt.KeyboardFocusManager;

/**
 *
 * @author  Besitzer
 */
public class Desk extends javax.swing.JFrame {

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

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        tab = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        but1 = new javax.swing.JButton();
        but2 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        tab.setName("tab"); // NOI18N

        jPanel1.setName("jPanel1"); // NOI18N

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 395, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 195, Short.MAX_VALUE)
        );

        tab.addTab("tab1", jPanel1);

        jPanel2.setName("jPanel2"); // NOI18N

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

        tab.addTab("tab2", jPanel2);

        but1.setText("Tab1");
        but1.setName("but1"); // NOI18N
        but1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                but1ActionPerformed(evt);
            }
        });

        but2.setText("Tab2");
        but2.setName("but2"); // NOI18N
        but2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                but2ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(tab, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addGap(71, 71, 71)
                .addComponent(but1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 124, Short.MAX_VALUE)
                .addComponent(but2)
                .addGap(91, 91, 91))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(22, 22, 22)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(but1)
                    .addComponent(but2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 32, Short.MAX_VALUE)
                .addComponent(tab, javax.swing.GroupLayout.PREFERRED_SIZE, 223, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>

private void but1ActionPerformed(java.awt.event.ActionEvent evt) {
tab.setSelectedIndex(0);
System.out.println("Button 1");
}

private void but2ActionPerformed(java.awt.event.ActionEvent evt) {
tab.setSelectedIndex(1);
System.out.println("Button 2");
}

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Desk().setVisible(true);
                 KeyboardFocusManager kbfm = KeyboardFocusManager
            .getCurrentKeyboardFocusManager();
       
    kbfm.addKeyEventDispatcher(new HotkeyManager());
            }
        });
    }

    // Variables declaration - do not modify
    public javax.swing.JButton but1;
    public javax.swing.JButton but2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    public javax.swing.JTabbedPane tab;
    // End of variables declaration

}

Ich hoffe du es erklärt mein Problem...

Danke!

Gruß

Mr.
 
M

MrWhy2

Gast
:( :oops:

bin noch anfänger ... :(
aber jetzt wo du es sagst... sollte der das eher nicht machen...


nur wie komm ich denn sonst an die Variablen ran?

wie sollte ich es denn machen? kannst du mir noch einen kleinen dankanstoß geben?

Vielen Dank!

Mr.
 

Wildcard

Top Contributor
Du brauchst eine Referenz auf das bestehende Objekt, nicht einfach ein neues erstellen :wink:
 
M

MrWhy2

Gast
Also dann back to the roots.. ;)

oder eher Vor zu den Anfängen ... anscheinend bin ich ja weit vor einem "Anfang" :oops:

Eine Referenz auf das JFrame übergebe ich doch wenn ich in der Methode dispatchKeyEvent ein this über gebe oder?

Vielen Dank nochmal!

Gruß Mr.
 

Wildcard

Top Contributor
Mach einfach hier:
Code:
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                Desk desk = new Desk();
                desk.setVisible(true);
                 KeyboardFocusManager kbfm = KeyboardFocusManager
            .getCurrentKeyboardFocusManager();
       
    kbfm.addKeyEventDispatcher(new HotkeyManager(desk));
            }
        });
    }
In HotkeyManager speicherst du dir dann die übergebene Referenz.
 
M

MrWhy2

Gast
Hi Wildcard,


du bist ab sofort mein Java Guru.... du hast mir eine "ich check es ehh nicht und hör wieder auf programmieren zu lernen phase erspart ;) "

Vielen herzlichen DANK!!!!!

By the way... du sagtest das ganze wäre nicht so elegant... ich habe mir das mit dem KeyBinding mal angeschaut nur leider krieg ich das mit den Actions nicht so ganz auf den Schirm... Wie definiere ich denn eine Action? Ich hab mir die Samples angesehn aber steig nicht ganz durch...

Vielen DANK!
 
M

MrWhy2

Gast
Hi Wildcard...

das hab ich auch schon gelesen... nur will das momentan nicht so ganz in meinen Kopf...

Aber ich denke ich werde dafür einen neuen Thread machen, damit auch andere was von der Lösung haben ;) sonst wird es zu viel Offtopic ;)

oder was meinst du?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Tabbed Pane Java Basics - Anfänger-Themen 5
TRunKX Tabbed Pane Problem Java Basics - Anfänger-Themen 6
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
W Erste Schritte Content Pane scheint zweigeteilt zu sein. Java Basics - Anfänger-Themen 1
U JavaFX eine Vbox Instanz pro Pane? Java Basics - Anfänger-Themen 2
F Content Pane / BorderLayout Java Basics - Anfänger-Themen 2
R Text Pane Aktualisierung erst nach JOptionPane Java Basics - Anfänger-Themen 10
S JOption.Pane Java Basics - Anfänger-Themen 2
T JOption Pane: Sonderzeichen verbieten? Java Basics - Anfänger-Themen 14
G HTML in Pane öffnen+anzeigen? Java Basics - Anfänger-Themen 3
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
J Interface Wechsel in den Windows7-Basis Modus Java Basics - Anfänger-Themen 7
S String ab dem Wechsel Buchstaben zu Zahlen splitten Java Basics - Anfänger-Themen 14
B JRadioButton wechsel gibt NullPointerException Java Basics - Anfänger-Themen 2
S Erste Schritte TAB-Wechsel zwischen TextFields Java Basics - Anfänger-Themen 1
3 Klassen Wechsel der Ansichten in einer GUI Java Basics - Anfänger-Themen 2
S Erste Schritte Fenster wechsel im Applet Java Basics - Anfänger-Themen 7
F Probleme nach dem Wechsel von Eclipse zu NetBeans Java Basics - Anfänger-Themen 15
T String splitten beim wechsel vom buchstabe zu zahl! Java Basics - Anfänger-Themen 8
Binary.Coder Wechsel von BlueJ zu Eclipse Java Basics - Anfänger-Themen 7
T vorzeichen wechsel bei int Java Basics - Anfänger-Themen 10
H JTabbedPane: Tab-Wechsel unterbinden ? Java Basics - Anfänger-Themen 6
D wechsel des aktuellen spielers Java Basics - Anfänger-Themen 2
N Anzahl von Zahlen-wechsel im Vector Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben