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. |