Virtuelle Tastatur

Status
Nicht offen für weitere Antworten.
S

Schräger Vogel

Gast
MMh i hab glaub meine Frage doof erläutert. Wie bastelt man mit Java eine virtuelle Tastatur also so ne Art Touchpad Tastatur wen nman auf die jeweiligen Buchstaben klickt das anschließend in der ComboList der jeweilige Buchstabe angezeigt wird? Ich hoffe ihr wisst wie ich das meine??

Grüße
 

Fatal Error

Bekanntes Mitglied
meinst du ne bildschirmtastatur? so heißt das ding nämlich :p
du brauchst einfach einige buttons und die klasse Robot, schau mal wegen Robot in der api nach.
die klasse hat methoden wie keyPress(KeyCode e);
 

Fatal Error

Bekanntes Mitglied
ich dachte er/sie will eine echte Bildschirmtastaur programmiern, damit man damit auch in andren fensten schreiben kann.

ich hab soetwas schonmal progranmiert...pn für den source code
 
S

Schräger Vogel

Gast
Ja im Prinzip will ich eine Tastatur programmieren die aus den deutshcen Alphabet besteht die ich dann wenn das Programm fertig ist über Touchscreen bedienen kann.Es soll die Betätigung der Tasten in der JCombobox angezeigt werden.
 
S

Schräger Vogel

Gast
Em um auf deine Frage zurückzukommen ja ich mein eine Bildschirmtastatur
 
S

Schräger Vogel

Gast
Hi danke für den Post aber wie bekommt man diesen sichtbar ?
 
S

Schräger Vogel

Gast
alos ich hab in der Klasse Keyboard eine Variable erzeugt namens fenster die von JFrame erbt aber trotz allem bleibt der Code unsichtbar sobald ich die Applikation laufen lasse.
 
S

Schräger Vogel

Gast
So das is der Code dazu find weis jemand was daran falsch sein soll?

CODE:



import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;




/**
* Bildschirmtastatur
*
*/
public class Keyboard extends JPanel
{
JTabbedPane tab = new JTabbedPane();
private static JFrame fenster;
static JTextField textField;

//Die einzelnen Panel fuer die Buttons
JPanel bigKeysPanel = new JPanel();
JPanel smallKeysPanel = new JPanel();
JPanel numbersPanel = new JPanel();
JPanel symbolsPanel = new JPanel();
JPanel specialsPanel = new JPanel();

//Namen fuer die Buttons
String[] bigKeys = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","\u00C4","\u00D6","\u00DC"};
String[] smallKeys = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","\u00E4","\u00F6","\u00FC"};
String[] numbers = {"1","2","3","4","5","6","7","8","9","0"};
String[] symbols = {"\u00B0","^","!","\"","\u20AC","$","%","&","\u00DF","(",")","=","?","\u00B4","`","+","-","*","/","#","_","~","\u0040","\u0023","\u0027","\u00B2","\u00B3","{","}","[","]","\\"};
String[] specials = {"Gross","Klein","Zahlen","Symbole","Backspace","Feld loeschen"};

/**
* Bildschirmtastatur
*
* @param width Breite
* @param height Hoehe
*/
public Keyboard(int width, int height, JTextField textField)
{

//Textfield bernehmen
this.textField = textField;

//Groesse einstellen
setPreferredSize(new Dimension(width, height));

//Layout und Groesse fuer specialsPanel setzen
specialsPanel.setLayout(new GridLayout(1,2));

specialsPanel.setPreferredSize(new Dimension(getPreferredSize().width, 50));

//Layouts setzen
bigKeysPanel.setLayout(new GridLayout(3,10));
smallKeysPanel.setLayout(new GridLayout(3,10));
numbersPanel.setLayout(new GridLayout(1,10));
symbolsPanel.setLayout(new GridLayout(3, 11));


//Placement und Groesse fuer tab setzen
tab.setPreferredSize(new Dimension(getPreferredSize().width, getPreferredSize().height - 60));

tab.setTabPlacement(JTabbedPane.EAST);

//Schriften
Font font1 = new Font("Arial",Font.BOLD,15);
Font font2 = new Font("Arial",Font.BOLD,11);

/*
* Tasten mit Bezeichnung, Name und ActionListener versehen
* und zu den entsprechenden Panels hinzufuegen
*/
for(int i = 0; i < bigKeys.length; i++)
{
JButton button = new JButton(bigKeys);
button.setFont(font1);
button.setName(bigKeys);
button.addActionListener(new Action());
bigKeysPanel.add(button);
}

for(int i = 0; i < smallKeys.length; i++)
{
JButton button = new JButton(smallKeys);
button.setFont(font1);
button.setName(smallKeys);
button.addActionListener(new Action());
smallKeysPanel.add(button);
}

for(int i = 0; i < numbers.length; i++)
{
JButton button = new JButton(numbers);
button.setFont(font1);
button.setName(numbers);
button.addActionListener(new Action());
numbersPanel.add(button);
}

for(int i = 0; i < symbols.length; i++)
{
JButton button = new JButton(symbols);
button.setFont(font1);
button.setName(symbols);
button.addActionListener(new Action());
symbolsPanel.add(button);
}

for(int i = 0; i < specials.length; i++)
{
JButton button = new JButton(specials);
button.setFont(font2);
button.setName(specials);
button.addActionListener(new SpezialAction());
specialsPanel.add(button);
}

//Panels zu tab hinzufuegen
tab.addTab("Gross",bigKeysPanel);
tab.addTab("Klein", smallKeysPanel);
tab.addTab("Zahlen", numbersPanel);
tab.addTab("Symbole", symbolsPanel);

add(specialsPanel);
add(tab);

}

public void setTextField(JTextField textField)
{
this.textField = textField;
}

/**
* Aktionen Eingabe
*
* @author sikraemer
*
*/
private class Action implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
//Eingabe an den Text im Passworteingabefeld anhaengen
String text = textField.getText();
text = text + ((JButton)evt.getSource()).getName();
textField.setText(text);
}
}

/**
* Aktionen nicht Eingabe
*
* @author sikraemer
*
*/
private class SpezialAction implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
// tab umschalten
if(((JButton)evt.getSource()).getName().equals("Gross"))
{
tab.setSelectedComponent(bigKeysPanel);
}
else if(((JButton)evt.getSource()).getName().equals("Klein"))
{
tab.setSelectedComponent(smallKeysPanel);
}
else if(((JButton)evt.getSource()).getName().equals("Zahlen"))
{
tab.setSelectedComponent(numbersPanel);
}
else if(((JButton)evt.getSource()).getName().equals("Symbole"))
{
tab.setSelectedComponent(symbolsPanel);
}
//Von hinten loeschen
else if(((JButton)evt.getSource()).getName().equals("Backspace"))
{
String text = textField.getText();
if(text.length() > 0)
{
text = text.substring(0, text.length()-1);
}
textField.setText(text);
}
//Feld loeschen
else if(((JButton)evt.getSource()).getName().equals("Feld loeschen"))
{
textField.setText("");
}
}
}



// MACH FENSTER sichtbar?

public static void main ( String [] args)

{

fenster = new JFrame(" Tastatur");
fenster.pack();
Keyboard keyboard = new Keyboard();
fenster.setVisible(true);
fenster.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
fenster.setSize(1000, 800);



}




import java.awt.BorderLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JDialog;
import javax.swing.JTextField;

/**
* Keyboard in einem JDialog
* als Bildschirmtastatur
*/
public class KeyboardDialog extends JDialog implements FocusListener
{

private Keyboard keyboard;


/**
* Erstellt einen KeyboardDialog und zeigt
* ihn an.
* @param tf - Textfield das den Focus der
* Bildschirmtastatur haben soll
*/
public KeyboardDialog(JTextField tf)
{
super();
keyboard = new Keyboard(550, 300, tf);


this.setAlwaysOnTop(true);
this.add(keyboard,BorderLayout.CENTER);
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.setResizable(false);
this.setTitle("Display Keyboard");
this.pack();
}


/**
* Keyboard auf neues Textfield setzen
*
* @param tf - Textfield das den Focus der
* Bildschirmtastatur haben soll
*/
public void setNewTextfield(JTextField tf)
{
keyboard.setTextField(tf);
}


/**
* Setzt Texfeld mit Fokus aktiv fü Bildschirmtastatur
*/
public void focusGained(FocusEvent fe)
{
if ((fe.getSource() instanceof JTextField))
{
keyboard.setTextField((JTextField)fe.getSource());
}
}


public void focusLost(FocusEvent fe)
{ /* nicht implementiert */ }
}















}
 

Ariol

Top Contributor
Schräger Vogel hat gesagt.:
alos ich hab in der Klasse Keyboard eine Variable erzeugt namens fenster die von JFrame erbt aber trotz allem bleibt der Code unsichtbar sobald ich die Applikation laufen lasse.

??? Das musst du garnicht, dafür gibts ja das Dialog-Fenster

Einfach einen neuen Keyboard-Dialog erstellen und als Parameter das entsprechende Textfield mitgeben.
einfach dort wo dus öffnen willst ein "new KeyboardDialog(Hier dein JTextfield)" einfügen

Wenn du das ganze für JComboBox verwenden willst, musst du den Code natürlich entsprechend abändern.
 
S

Schräger Vogel

Gast
Das is mir ziemlich peinlich sorry aber was is ein Keyboard Dialog?? Hab leider in Vorlesungen immer mit JFrame gearbeitet deswegen is mir das ganze ziemlich schleierhaft weil wenn nich den Code sowie du es geschickt hast in Eclipse einsetze un anschließend auf ausführen wähle passiert nix?

Wie meinst du das denn genau wäre echt hilfreich und nochmals danke das du geantwortet hast!
 
S

Schräger Vogel

Gast
Weis niemand wie ich den obigen Code in einme Fenster anzeigne lassen kann? Ich find den Fehler nicht ?
 

merlin2

Top Contributor
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class KeyboardTest extends JFrame {
  static JTextField jtf = new JTextField();
  public KeyboardTest (String Title) {
    super (Title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent evt) {System.exit(0);}});
    setSize(500, 50);
    jtf.setText("Text");
    add(jtf);
  }
  public static void main (String args[]) {
    new KeyboardTest("Bildschirmtatstatur").setVisible(true);
    new KeyboardDialog(jtf).setVisible(true);
  }
}
 

Ariol

Top Contributor
Also, der ursprüngliche Code besteht aus 2 Klassen:

Keyboard und KeyboardDialog

Der KeyboardDialog erbt von einem JDialog
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JDialog.html

Du musst also diese beiden Klassen anlegen, und kannst dann in deinem Code mit dem Aufruf
Code:
KeyboardDialog keyboardDialog = new KeyboardDialog(parameter)
aufrufen. dabei öffnet sich dann ein neues Fenster, das die Bildschirmtastatur beinhaltet und sich immer im Vordergrund hält.

Als Parameter gibst du das zu verwendende JTextfield mit.


Wenn du das Ganze mit anderen Komponenten verwenden willst, musst du den Code natürlich abändern. Z.B. statt JTextfield JCombobox einsetzen oder auch die Methoden setText und getText abändern.
 

Ariol

Top Contributor
Falls du dir den KeyboardDialog nur mal testen willst, einfach das hier benutzen.

Code:
public class Test extends JFrame
{
public static void main(String args)
{
Test t1 = new Test();
JTextfield tf1 = new JTextfield();

t1.add(tf1);
t1.pack();

t1.setVisible(true);
t1.setDefaultCloseOperation(EXIT_ON_CLOSE);

new KeyboardDialog(tf1);
}
}

Die imports sind jetzt nicht drin, ich hab das schnell von Hand hier rein geschrieben
 
S

Schräger Vogel

Gast
An welcher Stelle soll das den stehn in der Klasse JDialog danke für deinen Post bin echt froh!!! :
KeyboardDialog keyboardDialog = new KeyboardDialog(parameter)
Weil normalerweise benutzt man ja immer die Main-Methode um das Fenster sichtbar zu machen deswegen irritiert mich das einwenig soll i da eine Main-Methode einfügen?

import java.awt.BorderLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JDialog;
import javax.swing.JTextField;

/**
* Keyboard in einem JDialog
* als Bildschirmtastatur
*/
public class KeyboardDialog extends JDialog implements FocusListener
{

private Keyboard keyboard;


/**
* Erstellt einen KeyboardDialog und zeigt
* ihn an.
* @param tf - Textfield das den Focus der
* Bildschirmtastatur haben soll
*/
public KeyboardDialog(JTextField tf)
{
super();
//keyboard = new Keyboard(550, 300, tf);


this.setAlwaysOnTop(true);
this.add(keyboard,BorderLayout.CENTER);
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.setResizable(false);
this.setTitle("Display Keyboard");
this.pack();
}


/**
* Keyboard auf neues Textfield setzen
*
* @param tf - Textfield das den Focus der
* Bildschirmtastatur haben soll
*/
public void setNewTextfield(JTextField tf)
{
keyboard.setTextField(tf);
}


/**
* Setzt Texfeld mit Fokus aktiv fü Bildschirmtastatur
*/
public void focusGained(FocusEvent fe)
{
if ((fe.getSource() instanceof JTextField))
{
keyboard.setTextField((JTextField)fe.getSource());
}
}


public void focusLost(FocusEvent fe)
{ /* nicht implementiert */ }
}
 

Ariol

Top Contributor
Teste mal den Code hier erst aus

Code:
public class Test extends JFrame 
 { 
 public static void main(String args) 
 { 
 Test t1 = new Test(); 
 JTextfield tf1 = new JTextfield(); 
 JTextfield tf2 = new JTextfield(); 
 
 t1.add(tf1);  
 t1.add(tf2); 
 t1.pack(); 
 
 t1.setVisible(true); 
 t1.setDefaultCloseOperation(EXIT_ON_CLOSE); 
 
new KeyboardDialog(tf1); //<--Hier wird der Dialog angelegt
 } 
 }


Wenns mit dem umschalten zwischen den Textfeldern (einfach reinklicken sollte glaube ich ausreichen) nicht klappt einfach nochmal schreiben. Es ist schon eine zeitlang her, das ich das Ding geschrieben/benutzt habe.

Zum Testen des Ganzen:

du brauchts: 3 Klassen:

Keyboard:
Code:
import java.awt.Dimension; 
 import java.awt.Font; 
 import java.awt.GridLayout; 
 import java.awt.event.ActionEvent; 
 import java.awt.event.ActionListener; 
 
 import javax.swing.JButton; 
 import javax.swing.JPanel; 
 import javax.swing.JTabbedPane; 
 import javax.swing.JTextField; 
 
 
 /** 
 * Bildschirmtastatur 
 * 
 */ 
 public class Keyboard extends JPanel 
 {    
    JTabbedPane tab = new JTabbedPane(); 
     
    JTextField textField; 
     
    //Die einzelnen Panel fuer die Buttons  
    JPanel bigKeysPanel    = new JPanel(); 
    JPanel smallKeysPanel    = new JPanel(); 
    JPanel numbersPanel    = new JPanel(); 
    JPanel symbolsPanel      = new JPanel(); 
    JPanel specialsPanel   = new JPanel(); 
     
    //Namen fuer die Buttons 
    String[] bigKeys       = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","\u00C4","\u00D6","\u00DC"}; 
    String[] smallKeys       = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","\u00E4","\u00F6","\u00FC"}; 
    String[] numbers       = {"1","2","3","4","5","6","7","8","9","0"}; 
    String[] symbols       = {"\u00B0","^","!","\"","\u20AC","$","%","&","\u00DF","(",")","=","?","\u00B4","`","+","-","*","/","#","_","~","\u0040","\u0023","\u0027","\u00B2","\u00B3","{","}","[","]","\\"}; 
    String[] specials      = {"Gross","Klein","Zahlen","Symbole","Backspace","Feld loeschen"}; 
     
    /** 
     * Bildschirmtastatur 
     * 
     * @param width Breite 
     * @param height Hoehe 
     */ 
    public Keyboard(int width, int height, JTextField textField) 
    {    
     
       //Textfield bernehmen 
       this.textField = textField; 
        
       //Groesse einstellen 
       setPreferredSize(new Dimension(width, height)); 
        
       //Layout und Groesse fuer specialsPanel setzen 
       specialsPanel.setLayout(new GridLayout(1,2)); 
        
       specialsPanel.setPreferredSize(new Dimension(getPreferredSize().width, 50)); 
        
       //Layouts setzen 
       bigKeysPanel.setLayout(new GridLayout(3,10)); 
       smallKeysPanel.setLayout(new GridLayout(3,10)); 
       numbersPanel.setLayout(new GridLayout(1,10)); 
       symbolsPanel.setLayout(new GridLayout(3, 11)); 
        
        
       //Placement und Groesse fuer tab setzen 
       tab.setPreferredSize(new Dimension(getPreferredSize().width, getPreferredSize().height - 60)); 
        
       tab.setTabPlacement(JTabbedPane.EAST); 
        
       //Schriften 
       Font font1 = new Font("Arial",Font.BOLD,15); 
       Font font2 = new Font("Arial",Font.BOLD,11); 
        
       /* 
        * Tasten mit Bezeichnung, Name und ActionListener versehen 
        * und zu den entsprechenden Panels hinzufuegen 
        */ 
       for(int i = 0; i < bigKeys.length; i++) 
       { 
          JButton button = new JButton(bigKeys[i]); 
          button.setFont(font1); 
          button.setName(bigKeys[i]); 
          button.addActionListener(new Action()); 
          bigKeysPanel.add(button); 
       } 
        
       for(int i = 0; i < smallKeys.length; i++) 
       { 
          JButton button = new JButton(smallKeys[i]); 
          button.setFont(font1); 
          button.setName(smallKeys[i]); 
          button.addActionListener(new Action()); 
          smallKeysPanel.add(button); 
       } 
        
       for(int i = 0; i < numbers.length; i++)    
       { 
          JButton button = new JButton(numbers[i]); 
          button.setFont(font1); 
          button.setName(numbers[i]); 
          button.addActionListener(new Action()); 
          numbersPanel.add(button); 
       } 
        
       for(int i = 0; i < symbols.length; i++) 
       { 
          JButton button = new JButton(symbols[i]); 
          button.setFont(font1); 
          button.setName(symbols[i]); 
          button.addActionListener(new Action()); 
          symbolsPanel.add(button); 
       } 
        
       for(int i = 0; i < specials.length; i++) 
       { 
          JButton button = new JButton(specials[i]); 
          button.setFont(font2); 
          button.setName(specials[i]); 
          button.addActionListener(new SpezialAction()); 
          specialsPanel.add(button); 
       } 
        
       //Panels zu tab hinzufuegen 
       tab.addTab("Gross",bigKeysPanel); 
       tab.addTab("Klein", smallKeysPanel); 
       tab.addTab("Zahlen", numbersPanel); 
       tab.addTab("Symbole", symbolsPanel); 
        
       add(specialsPanel); 
       add(tab); 
        
    } 
     
    public void setTextField(JTextField textField) 
    { 
       this.textField = textField; 
    } 
     
    /** 
     * Aktionen Eingabe 
     * 
     * @author sikraemer 
     * 
     */ 
    private class Action implements ActionListener 
    { 
       public void actionPerformed(ActionEvent evt) 
       { 
          //Eingabe an den Text im Passworteingabefeld anhaengen 
          String text = textField.getText(); 
          text = text + ((JButton)evt.getSource()).getName(); 
          textField.setText(text); 
       } 
    } 
     
    /** 
     * Aktionen nicht Eingabe 
     * 
     * @author sikraemer 
     * 
     */ 
    private class SpezialAction implements ActionListener 
    { 
       public void actionPerformed(ActionEvent evt) 
       { 
          // tab umschalten 
          if(((JButton)evt.getSource()).getName().equals("Gross")) 
          { 
             tab.setSelectedComponent(bigKeysPanel); 
          } 
          else if(((JButton)evt.getSource()).getName().equals("Klein")) 
          { 
             tab.setSelectedComponent(smallKeysPanel); 
          } 
          else if(((JButton)evt.getSource()).getName().equals("Zahlen")) 
          { 
             tab.setSelectedComponent(numbersPanel); 
          } 
          else if(((JButton)evt.getSource()).getName().equals("Symbole")) 
          { 
             tab.setSelectedComponent(symbolsPanel); 
          } 
          //Von hinten loeschen 
          else if(((JButton)evt.getSource()).getName().equals("Backspace")) 
          { 
             String text = textField.getText(); 
             if(text.length() > 0) 
             { 
                text = text.substring(0, text.length()-1); 
             } 
             textField.setText(text); 
          } 
          //Feld loeschen 
          else if(((JButton)evt.getSource()).getName().equals("Feld loeschen")) 
          { 
             textField.setText(""); 
          } 
       } 
    } 
 }

KeyboardDialog
Code:
import java.awt.BorderLayout; 
 import java.awt.event.FocusEvent; 
 import java.awt.event.FocusListener; 
 
 import javax.swing.JDialog; 
 import javax.swing.JTextField; 
 
 /** 
 * Keyboard in einem JDialog 
 * als Bildschirmtastatur 
 */ 
 public class KeyboardDialog extends JDialog implements FocusListener 
 { 
     
    private Keyboard keyboard; 
     
     
    /** 
     * Erstellt einen KeyboardDialog und zeigt 
     * ihn an. 
     * @param tf - Textfield das den Focus der 
     *                Bildschirmtastatur haben soll 
     */ 
    public KeyboardDialog(JTextField tf) 
    { 
       super(); 
       keyboard = new Keyboard(550, 300, tf); 
        
        
       this.setAlwaysOnTop(true); 
       this.add(keyboard,BorderLayout.CENTER); 
       this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
       this.setResizable(false); 
       this.setTitle("Display Keyboard"); 
       this.pack(); 
    } 
     
 
    /** 
     * Keyboard auf neues Textfield setzen 
     *  
     * @param tf - Textfield das den Focus der 
     *                Bildschirmtastatur haben soll 
     */ 
    public void setNewTextfield(JTextField tf) 
    { 
       keyboard.setTextField(tf); 
    } 
 
 
    /** 
     * Setzt Texfeld mit Fokus aktiv fü Bildschirmtastatur 
     */ 
    public void focusGained(FocusEvent fe) 
    { 
       if ((fe.getSource() instanceof JTextField)) 
       { 
          keyboard.setTextField((JTextField)fe.getSource()); 
       } 
    } 
 
 
    public void focusLost(FocusEvent fe) 
    { /* nicht implementiert */   } 
 }

und Test (Hier fehlen die Imports!!!)
Code:
public class Test extends JFrame 
 { 
 public static void main(String args) 
 { 
 Test t1 = new Test(); 
 JTextfield tf1 = new JTextfield(); 
 JTextfield tf2 = new JTextfield(); 
 
 t1.add(tf1);  
 t1.add(tf2); 
 t1.pack(); 
 
 t1.setVisible(true); 
 t1.setDefaultCloseOperation(EXIT_ON_CLOSE); 
 
new KeyboardDialog(tf1); //<--Hier wird der Dialog angelegt
 } 
 }


Das ganze Kompilieren und die Test-Klasse ausführen.
Es sollten jetzt 2 Fenster erscheinen, eines mit 2 Textfeldern und eines mit der Tastatur.
Wenn du auf der Tastatur etwas anklickst wird das entsprechend ins Textfield geschrieben.
Wenn du das 2. Textfield auswählst und dann etwas klickst wird in dieses geschrieben.

(Die Testklasse ist in 2 Minuten entstanden, und hat ein Null-Layout - also nicht besonders schön. es kann auch vorkommen, das du das ganze etwas größer ziehen musst.
 
S

Schräger Vogel

Gast
erstmal ganz großes LOB an Ariol

vielen Dank nochmal für deine Hilfe!!


allerdings klappt es nicht immer wenn ich deine Test Klasse ausführen will erscheint in Eclipse keine Run Application

Imports hab ich alle berücksichtigt:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


public class Test extends JFrame
{
public static void main(String args)
{
Test t1 = new Test();
JTextField tf1 = new JTextField();
JTextField tf2 = new JTextField();

t1.add(tf1);
t1.add(tf2);
t1.pack();

t1.setVisible(true);
t1.setDefaultCloseOperation(EXIT_ON_CLOSE);

new KeyboardDialog(tf1); //<--Hier wird der Dialog angelegt
}
}
 

Ariol

Top Contributor
oh, kleiner Fehler:

Schreib mal statt "public static void main(String args)" "public static void main(String[] args)"


Danke für das Lob.

Kleiner Tip noch setzt deinen Code doch in
Code:
-tags - dann ist er besser lesbar.
 
S

Schräger Vogel

Gast
Gern geschehn!

Lol ok jetzt lässt es sich übersetzen allerdings kommt jetzt nur ein TextFeld im Fenster ohne das die Tastatur eingeblendet wird.

Danke für den Tip Code Tags? Wie kann ich das einstellen
 

merlin2

Top Contributor
merlin2 hat gesagt.:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class KeyboardTest extends JFrame {
  static JTextField jtf = new JTextField();
  public KeyboardTest (String Title) {
    super (Title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent evt) {System.exit(0);}});
    setSize(500, 50);
    jtf.setText("Text");
    add(jtf);
  }
  public static void main (String args[]) {
    new KeyboardTest("Bildschirmtatstatur").setVisible(true);
    new KeyboardDialog(jtf).setVisible(true);
  }
}


Code:
setVisible(true);
fehlt, übrigens habe ich meine Testklasse vor Ariols gepostet, warum ignorierst du sie einfach? :x :wink:
 
S

Schräger Vogel

Gast
Hey Merlin net böse sein bin dir natürlich auch dankbar habs erst mal auf die eine Art versucht.

An dich natürlich auch ein großes LOB!
 

merlin2

Top Contributor
Auch danke für das Lob, ich bin natürlich nicht böse. :D
Die Hauptsache ist, dass es jetzt funktioniert. :D
 

Ariol

Top Contributor
So gehts:

Code:
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.*;

public class Test extends JFrame 
{ 
	 static KeyboardDialog kd1;
	
	 public static void main(String[] args) 
	 { 
		 /*JFrame anlegen*/
		 Test t1 = new Test(); 
		 t1.setLayout(new GridLayout(2,1));
		 t1.setPreferredSize(new Dimension(200,80));
		 		 
		 /*JTextField anlegen*/
		 JTextField tf1 = new JTextField(); 
		 JTextField tf2 = new JTextField();
		 
		 /*FocusListener (wird aufgerufen, wenn in eines der Textfelder geklickt wird*/
		 FocusListener fl1 = new FocusListener()
		 {
			public void focusGained(FocusEvent e) 
			{
				if ((e.getSource() instanceof JTextField)) 
		        { 
		           kd1.setNewTextfield((JTextField)e.getSource()); 
		        } 
			}

			public void focusLost(FocusEvent e) {}
		 };
		 tf1.addFocusListener(fl1);//Listener auf das TextField legen
		 tf2.addFocusListener(fl1);
		 
		 /*JFrame fertigstellen*/
		 t1.add(tf1);  
		 t1.add(tf2); 
		 t1.pack(); 
		 t1.setVisible(true); 
		 t1.setDefaultCloseOperation(EXIT_ON_CLOSE); 
		 
		 /*KeyboardDialog*/
		 kd1 = new KeyboardDialog(tf1); //<--Hier wird der Dialog angelegt 
		 kd1.setVisible(true); //Dialog anzeigen
	 } 
}

-----------------------------------------------

Code-Tags:

[ code ] <- vor den Code
[/ code ] <- hinter den Code
ohne die Leerzeichen

---------------------------------------------
EDIT.

@merlin2:

jop, das setVisible hatte ich vergessen,.... ist schon länger her, das ich den kram gemacht hab.
Es haben auch noch die Focuslistener auf den Textfeldern gefehlt...

Naja, ich habs getestet und jetzt gehts
 

Xams

Bekanntes Mitglied
Wenn du die Tastatur für alle Programme nehmen möchtest, musst du statt den Text im Textfield zu verändern, java.awt.Robot verwenden.
 

Ariol

Top Contributor
ist schon klar, aber es ging ihm ja nur darum was in eine Combobox zu schreiben. Da hat er meinen Code schneller abgeändert, als sich die Tastatur selbst mit Robot zu schreiben....
 
S

Schräger Vogel

Gast
HI also der Code klappt wunderbar nochmals danke! Jetzt hät ich allerdings ein kleine Frage ist es auch möglich das ganze in ein Fenster einzubauen so das nicht immer 2 Fenster aufgehn. Es müsste doch auch möglich sein in der Klasse Keyboard das Fenster zu erzeugen so das in dieser sich das Textfeld befindet anstatt eine neue Klasse Test zu erzeugen?
 

merlin2

Top Contributor
Dann musst du eben Keyboard eine main-Methode mit etwa folgendem Inhalt hinzufügen:
Code:
JFrame f = new JFrame("Titel");
f.setLayout(new BorderLayout());
f.add(eitherAJTextFieldOrAJComboBox, "North");
f.add(new Keyboard(550, 300, eitherAJTextFieldOrAJComboBox), "South");
f.pack();
f.setVisible(true);
 

Ariol

Top Contributor
Nicht ganz, eher so:
Code:
JFrame f = new JFrame("Titel"); 
f.setLayout(new BorderLayout()); 

JTextfield textfield = new JTextfield();
Keyboard keyboard = new Keyboard(550, 300, textfield);

FocusListener focusListener = new FocusListener() 
{ 
       public void focusGained(FocusEvent e) 
       { 
             if ((e.getSource() instanceof JTextField)) 
             { 
                  keyboard.setNewTextfield((JTextField)e.getSource()); 
             } 
       }
} 
 

textfield.addFocuslistener(focusListener);

 f.add(textfield,"North"); 
 f.add(keyboard,"South");
 f.pack(); 
 f.setVisible(true);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
vladimir Swing virtuelle Tastatur realisieren AWT, Swing, JavaFX & SWT 3
H virtuelle Konsole [solved] AWT, Swing, JavaFX & SWT 9
N Objecte bewegen mit Tastatur AWT, Swing, JavaFX & SWT 5
T GUI über Tastatur bedienen AWT, Swing, JavaFX & SWT 3
N Swing JScrollPane mit Tastatur bedienen? AWT, Swing, JavaFX & SWT 0
L Swing Tastatur zeichen AWT, Swing, JavaFX & SWT 4
S Tastatur frame nur nur 1 mal öffnen AWT, Swing, JavaFX & SWT 1
G Tastatur abfragen AWT, Swing, JavaFX & SWT 0
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
M Button klicken anstelle der Tastatur AWT, Swing, JavaFX & SWT 2
7 KeyListener tastatur temporär blockieren AWT, Swing, JavaFX & SWT 7
I ausgewählte Zeile mit Hilfe der Tastatur löschen! AWT, Swing, JavaFX & SWT 3
kodela Swing JToggleButton und Tastatur AWT, Swing, JavaFX & SWT 2
J Inaktivität von Maus und Tastatur AWT, Swing, JavaFX & SWT 4
C Swing Änderung der Tastatur-Navigation in einer JTable AWT, Swing, JavaFX & SWT 4
S Tastatur-Shortcut klappt nicht AWT, Swing, JavaFX & SWT 17
S Tastatur Event auserhalb des fokuses aufnehmen AWT, Swing, JavaFX & SWT 4
M Tastatur simulieren AWT, Swing, JavaFX & SWT 20
D Swing JTree Was passiert beim Tippen auf Tastatur. AWT, Swing, JavaFX & SWT 2
B JTree - Kontextmenü per Tastatur öffnen AWT, Swing, JavaFX & SWT 3
D Tastatur Shortcut auslösen bei FocusGained-Event AWT, Swing, JavaFX & SWT 2
B JTable & Tastatur-Shortcuts AWT, Swing, JavaFX & SWT 3
J Auslösung von Aktionen über Tastatur (Netbeans) AWT, Swing, JavaFX & SWT 23
M Tastatur komplett sperren? AWT, Swing, JavaFX & SWT 9
T Gleichzeitiges Steuern von 2 Objekten über Tastatur AWT, Swing, JavaFX & SWT 8
I Globale Tastatur-Events abfragen AWT, Swing, JavaFX & SWT 3
N Tastatur Zeichen einlesen ohne sichtbares Fenster AWT, Swing, JavaFX & SWT 8
R Button actions mit Tastatur ausführen AWT, Swing, JavaFX & SWT 6
F JComboBox setEditable( true ) auf Tastatur Events reagieren AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben