R
Reeny
Gast
Hallo ihr guten Helferleins,
während ich hier programmiere, hab ich ein großes fettes Fragezeichen über meinem Kopf, welches mit der Zeit immer größer wird :bahnhof: Die Lösung ist bestimmt eigentlich ganz simple ...
Mein Startpunkt: Ausgehend von einem ganz anderen größeren Problem bin ich bis auf dieses Codestück (s.u.) runtergekommen, um das "Spiel" mit dem Fokus zu verstehn und zu testen. Es ist ein Fenster mit nutzlosen Buttons und Textfelder, welches auf Tastenkombinationen reagieren soll. Die dabei erkannten Tasten werden ausgegeben.
Mein Ziel: manche Elemente sollen auf die Kombination STRG-TAB unterschiedlich reagieren. Aber ich komm nicht mal soweit, dass diese Tasten-Kombination abgefangen wird ... :cry:
Mein Lösungsansatz: Das liegt, denke ich, daran, dass die Taste TAB nicht erkannt wird und deshalb nie in die richtige if-Bedingung gesprungen werden kann. Es wird nur das STRG bemerkt (sichtbar bei der StandardAusgabe ...).
Deswegen hab ich mit der InputMap und ActionMap gearbeitet, aber keine Reaktion!!! :x Ich will eigentlich auch nicht die TAB-Taste aus der Input-Map nehmen, was aber sowieso nicht geht, weil unter den erkannten KeyStrokes von 'text1' leider kein TAB dabei ist ... :autsch:
Das Ergebnis: Ich habe einen Knoten im Kopf! Kann mit da jmd vielleicht einen hilfreichen Tip geben, wie ich das Programm dazu bringe, auf STRG+TAB zu reagieren?
Der Code:
Danke, und viel Spaß beim Knobeln *g*.
Reeny
während ich hier programmiere, hab ich ein großes fettes Fragezeichen über meinem Kopf, welches mit der Zeit immer größer wird :bahnhof: Die Lösung ist bestimmt eigentlich ganz simple ...
Mein Startpunkt: Ausgehend von einem ganz anderen größeren Problem bin ich bis auf dieses Codestück (s.u.) runtergekommen, um das "Spiel" mit dem Fokus zu verstehn und zu testen. Es ist ein Fenster mit nutzlosen Buttons und Textfelder, welches auf Tastenkombinationen reagieren soll. Die dabei erkannten Tasten werden ausgegeben.
Mein Ziel: manche Elemente sollen auf die Kombination STRG-TAB unterschiedlich reagieren. Aber ich komm nicht mal soweit, dass diese Tasten-Kombination abgefangen wird ... :cry:
Mein Lösungsansatz: Das liegt, denke ich, daran, dass die Taste TAB nicht erkannt wird und deshalb nie in die richtige if-Bedingung gesprungen werden kann. Es wird nur das STRG bemerkt (sichtbar bei der StandardAusgabe ...).
Deswegen hab ich mit der InputMap und ActionMap gearbeitet, aber keine Reaktion!!! :x Ich will eigentlich auch nicht die TAB-Taste aus der Input-Map nehmen, was aber sowieso nicht geht, weil unter den erkannten KeyStrokes von 'text1' leider kein TAB dabei ist ... :autsch:
Das Ergebnis: Ich habe einen Knoten im Kopf! Kann mit da jmd vielleicht einen hilfreichen Tip geben, wie ich das Programm dazu bringe, auf STRG+TAB zu reagieren?
Der Code:
Code:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.WindowConstants;
public class FocusTestFrame extends JFrame implements KeyListener{
JPanel north = new JPanel(new BorderLayout());
JTextField text1 = new JTextField("text1");
JTextField text2 = new JTextField("text2");
JPanel center = new JPanel(new BorderLayout());
JLabel labelCenter = new JLabel("Label im Center");
JButton buttonCenter = new JButton("Button im Center");
JPanel west = new JPanel(new BorderLayout());
JButton westLinks = new JButton("west - links");
JButton westRechts = new JButton("west - rechts");
JButton westUnten = new JButton("west - unten");
JPanel south = new JPanel(new BorderLayout());
JPanel southEast = new JPanel(new BorderLayout());
JPanel southWest = new JPanel(new BorderLayout());
JButton bla = new JButton("bla");
JButton bli = new JButton("bli");
JButton blubb = new JButton("blubb");
JButton blob = new JButton("blob");
Action machWas = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.out.println(" JIPPIE: TASTENKOMBI ANGEKOMMEN!!!");
}
};
/**
* Konstruktor
*/
public FocusTestFrame(){
// Das Test-Fenster selber
super("FokusTest");
setName("JFrame");
addKeyListener(this);
Container cp = getContentPane();
// Der NordPanel
north.setName("NordPanel");
text1.setName("text1");
text2.setName("text2");
text1.addKeyListener(this);
text2.addKeyListener(this);
// text1 soll auf 'Strg+TAB' reagieren
text1.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,InputEvent.CTRL_DOWN_MASK),"machWas");
text1.getActionMap().put("doNothing",machWas);
/*KeyStroke[] liste = text2.getInputMap().allKeys();
for (int i=0;i<liste.length; i++)
System.out.println((i+1)+". "+liste[i].toString());*/
// Der Center-Panel
center.setName("centerPanel");
labelCenter.setName("Label im Center");
buttonCenter.setName("button im Center");
buttonCenter.addKeyListener(this);
// Der WestPanel
west.setName("westPanel");
westLinks.setName("Button west-links");
westRechts.setName("Button west - rechts");
westUnten.setName("Button west - unten");
westLinks.addKeyListener(this);
westRechts.addKeyListener(this);
westUnten.addKeyListener(this);
// Der SüdPanel
south.setName("southPanel");
southEast.setName("southEastPanel");
southWest.setName("southWestPanel");
bla.setName("bla");
bli.setName("bli");
blubb.setName("blubb");
blob.setName("blob");
bla.addKeyListener(this);
bli.addKeyListener(this);
blubb.addKeyListener(this);
blob.addKeyListener(this);
// Die Zusammensetzung
cp.setLayout(new BorderLayout());
north.add(text1,BorderLayout.NORTH);
north.add(text2, BorderLayout.SOUTH);
cp.add(north, BorderLayout.NORTH);
center.add(labelCenter, BorderLayout.NORTH);
center.add(buttonCenter, BorderLayout.SOUTH);
cp.add(center, BorderLayout.CENTER);
west.add(westLinks, BorderLayout.WEST);
west.add(westRechts, BorderLayout.EAST);
west.add(westUnten, BorderLayout.SOUTH);
cp.add(west, BorderLayout.WEST);
southEast.add(bla, BorderLayout.NORTH);
southEast.add(bli, BorderLayout.SOUTH);
southWest.add(blubb, BorderLayout.NORTH);
southWest.add(blob, BorderLayout.SOUTH);
south.add(southWest, BorderLayout.WEST);
south.add(southEast, BorderLayout.EAST);
cp.add(south, BorderLayout.SOUTH);
// Allgemeines
setSize(400,400);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
pack();
show();
try{
OCRFocusTraversalPolicy policy = new OCRFocusTraversalPolicy(cp);
/*cp.setFocusTraversalPolicy(policy);
policy.getCycle().clear();
policy.getCycle().addComponent(text1);
policy.getCycle().addComponent(text2);
policy.getCycle().addComponent(buttonCenter);
policy.getCycle().addComponent(westUnten);
policy.getCycle().addComponent(westLinks);
policy.getCycle().addComponent(blubb);
policy.getCycle().addComponent(bli);*/
}catch(IllegalArgumentException iae){
System.out.println(iae.getMessage());
iae.printStackTrace();
}catch(IllegalAccessException iacce){
System.out.println(iacce.getMessage());
iacce.printStackTrace();
}catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
//printList(((OCRFocusTraversalPolicy)cp.getFocusTraversalPolicy()).getCycle());
}
// ####################### Die KeyListener-Funktionen #################################
public void keyPressed(KeyEvent e){
System.out.println("(pressed) "+e.getKeyChar() + " : " + e.getKeyCode());
if (e.getKeyCode() == KeyEvent.VK_ENTER)
System.out.println("-> Enter\t\t(pressed)");
if (e.getKeyCode() == KeyEvent.VK_I)
System.out.println("-> 'I'\t\t(pressed)");
// --> STRG-Taste
if(e.getKeyCode() == KeyEvent.VK_CONTROL){
System.out.println("STRG gedrückt ...");
}
if(e.getKeyCode()== KeyEvent.VK_TAB)
System.out.println("TAB-gedrückt ... ");
}
/**
*/
public void keyReleased(KeyEvent e){
System.out.println("(released) "+e.getKeyChar()+" : "+e.getKeyCode());
// -------------- ALT - Tasten -----------------------------------------
if (e.isAltDown()) {
if (e.getKeyCode() == KeyEvent.VK_LEFT)
System.out.println("-> Alt + Links\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_RIGHT)
System.out.println("-> Alt + Rechts\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_UP)
System.out.println("-> Alt + Hoch\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_DOWN)
System.out.println("-> Alt + Runter\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_EQUALS || e.getKeyCode() == KeyEvent.VK_ADD)
System.out.println("-> Alt + '+'\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_MINUS || e.getKeyCode() == KeyEvent.VK_SUBTRACT)
System.out.println("-> Alt + '-'\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_DELETE)
System.out.println("-> Alt + ENTF\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_COMMA)
System.out.println("-> Alt + ','\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_PERIOD)
System.out.println("-> Alt + '.'\t(released)");
/*-------------------Ende ALT-Einstellungen--------------------------*/
if (e.getKeyCode() == KeyEvent.VK_F2)
System.out.println("-> F2\t\t\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_F4)
System.out.println("-> F4\t\t\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_F9)
System.out.println("-> F9\t\t\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_F12)
System.out.println("-> F12\t\t\t(released)");
else if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
System.out.println("-> ESC\t\t\t(released)");
}
// --> TAB-Taste
if(e.getKeyCode()==KeyEvent.VK_TAB){
if (e.isControlDown()) {
if(e.getComponent().getName().equals("text1")){
text2.requestFocus();
System.out.println("Endlich!!! TAB(released) mit STRG");
}
else if (e.getComponent().getName().equals("Button west - unten")){
text2.requestFocus();
System.out.println("Endlich!!! TAB(released) mit STRG");
}
}
else{
System.out.println("-> Tab(released) ohne STRG");
}
}
}
/**
*/
public void keyTyped(KeyEvent e){
System.out.println("(typed) "+e.getKeyChar()+" : "+e.getKeyCode());
}
// ############################ MAIN #######################################
public static void main(String[] args){
FocusTestFrame theFrame=new FocusTestFrame();
}
}
Danke, und viel Spaß beim Knobeln *g*.
Reeny