Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » Applet / keyListener an Textfield oder Label

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.10.2005, 11:34 Uhr
Nazgul666



Hallo,

folgendes Problem:
Ich will ein Java Applet realisieren, das Daten eines Barcodescanners einliest und in einer Liste abspeichert.
Der Barcodescanner funktioniert wie eine "PC-Tastatur".
Zudem soll jeder eingelesene String in dem Appletfenster angezeigt werden, ohne das dieser Text verändert werden kann. Es soll verhindert werden, das zugleich eine zweite Person diese Eingaben per PC-tastatur verändern kann.
Weder ein Textfeld (disabled) noch mit einem Label funktioniert dies.


Der erste Gedanke war ein TextFeld zu "disabeln" und darin das Eingelesene anzuzeigen. (nach betätigen der Return-Taste wird die Eingabe in eine Liste geschrieben und sollte angezeigt werden)
Doch an ein solches Textfeld ist es nicht möglich ein KeyListener anzuhängen.
Aber ein aktiviertes Textfeld soll es ja nicht sein.


Hier die dazugehörige Code:


C++:
public class SimpleApplet6 extends Applet{

   JPanel pCenter = new JPanel();
   JPanel pSüden = new JPanel();
  
   JTextField tEingabe;
   Label lEingabe;
   String input = "";
   LinkedList<String> saveBarcode = new LinkedList();
      
  
   public void init()  {
      
      this.setSize(500,300);
      setBackground(new Color(222,222,222));
      setLayout(new BorderLayout(10,10));
      
      add(pCenter, BorderLayout.CENTER);
      add(pSüden, BorderLayout.SOUTH);
      
      pCenter.setBackground(new Color(200,200,200));
      pCenter.setLayout(new FlowLayout());
      pSüden.setBackground(new Color(180,200,200));
      pSüden.setLayout(new GridLayout(0,2));
      
      lEingabe = new Label("Hallo", Label.RIGHT);
      tEingabe = new JTextField("TEST");
        
      pSüden.add(lEingabe);
      pSüden.add(tEingabe);
      tEingabe.setEnabled(false);
   }
  
//-----------------------------------------------------------------------------
  
   public void start() {
      
      System.out.println("start");
            
//      tEingabe.setEnabled(true);
      
      tEingabe.addKeyListener(new KeyAdapter() {
        
         public void keyReleased(KeyEvent ev) {
            System.out.println("keyReleased");
            input = input+Character.toString(ev.getKeyChar());
                  
            if (ev.getKeyCode() == KeyEvent.VK_ENTER) {
               System.out.println("Enter");
               if(!input.equals("")) {
                   saveBarcode.add(input);
                   input = "";
                   Iterator it = saveBarcode.listIterator();
                   String s = "";
                   while (it.hasNext()) {
                      s = s+" "+it.next();
                   }
                   tEingabe.setText(s);
               }
            }
            }
         });
   }
  
//-----------------------------------------------------------------------------
  
   public void stop() {
      saveBarcode.removeAll(saveBarcode);
   }

//-----------------------------------------------------------------------------
  
   public Insets getInsets() {
      return new Insets(40,10,10,10);
   }
}




__________________________________________________________________________________-


Der zweite Ansatz ist, den KeyListener einem Panel anzuhängen.
Hier tritt jedoch das Problem auf, das man erst auf dieses Panel klicken muss.
Deswegen habe ich versucht, den Klick zu automatisieren. Diese Lösung ist aber natürlich nicht schön, und
zudem funktioniert diese nicht, obwohl ich den "createRobot" in der Java policy für Applets hinzugefügt habe.

Hier der dazugehörige Code:


C++:
public class SimpleApplet5 extends Applet implements KeyListener{
  
   Panel pCenter = new Panel();
   Panel pSüden = new Panel();
  
   TextField tEingabe;
   Label lEingabe;
   String input = "";
   LinkedList<String> saveBarcode = new LinkedList();
   int zaehler = 0;
   Rectangle r;
  
  
   public void init()  {
      
      this.setSize(500,300);
      setBackground(new Color(222,222,222));
      setLayout(new BorderLayout(10,10));
      
      add(pCenter, BorderLayout.CENTER);
      add(pSüden, BorderLayout.SOUTH);
      
      pCenter.setBackground(new Color(200,200,200));
      pCenter.setLayout(new FlowLayout());
      pSüden.setBackground(new Color(180,200,200));
      pSüden.setLayout(new GridLayout(0,2));
      
      lEingabe = new Label("", Label.RIGHT);
      tEingabe = new TextField("TEST");
        
      pSüden.add(lEingabe);
      pSüden.add(tEingabe);
      tEingabe.setEnabled(false);
      
      pCenter.addKeyListener(this);

   }
  
//-----------------------------------------------------------------------------
  
   public void start() {
      
      r = pCenter.getBounds();
      
      int posX = (int)r.getX();
      int posY = (int)r.getY();
      
      int breite = (int)pCenter.getWidth();
      int höhe = (int)pCenter.getHeight();
        
      Robot robot;
      try {
         robot = new Robot();
         robot.mouseMove(posX+(breite/2), posY+(höhe/2));
         robot.mousePress(InputEvent.BUTTON1_MASK);
         robot.mouseRelease(InputEvent.BUTTON1_MASK);
      
      } catch (AWTException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
  
//-----------------------------------------------------------------------------
      
   public void keyReleased(KeyEvent ev) {
            
      System.out.println("keyReleased");
      if(ev.getKeyCode() != KeyEvent.VK_ENTER) {
         input = input+Character.toString(ev.getKeyChar());
      }
      
      if (ev.getKeyCode() == KeyEvent.VK_ENTER) {
         System.out.println("Enter");
         if(!input.equals("")) {
             saveBarcode.add(input);
             lEingabe.setText(input);
             input = "";
                      
             Iterator it = saveBarcode.listIterator();
             String s = "";
             while (it.hasNext()) {
                s = s+" "+it.next();
             }
             tEingabe.setText(s);
  
         }
      }
   }
   public void keyTyped(KeyEvent ev) {
   }
   public void keyPressed(KeyEvent ev) {}
  
//-----------------------------------------------------------------------------
  
   public void stop() {
      saveBarcode.removeAll(saveBarcode);
   }

//-----------------------------------------------------------------------------
  
   public Insets getInsets() {
      
      return new Insets(40,10,10,10);
   }  
}





___________________________________________________________________________


Hat hierzu jemand eine Lösung, wie man sowas realisieren kann ????
Oder sind die Ansätze komplett falsch ????
Wäre über jede Hilfe sehr dankbar !!!!


MfG


Nazgul666


Bearbeitung von typecast:
Tags gesetzt

Dieser Post wurde am 30.10.2005 um 16:14 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.10.2005, 13:53 Uhr
KaraHead




Zitat von Nazgul666:

Doch an ein solches Textfeld ist es nicht möglich ein KeyListener anzuhängen.
Aber ein aktiviertes Textfeld soll es ja nicht sein.



Du musst es ja nicht disablen. Füge dem JTextField einen KeyListener hinzu und ignoriere alle Tasten außer <Enter>.

z.B.

Code:

keyPressed(KeyEvent e) {

//Bricht ab falls die eingetippte Taste kein Enter ist
  if(e.getKeyCode() != KeyEvent.VK_ENTER)
    return;

//Und hier kommt dann dein Code rein
}



Hoffe ich habe dich richtig verstanden.

---Edit
Ohne Code-Tags hat man echt keine Lust deinen Code anzugucken. Also bitte benutze sie.

Dieser Post wurde am 13.10.2005 um 13:55 Uhr von KaraHead editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: