Wykonanie czynności w aplikacji zależne od zczytanego kodu kreskowego

0

Cześć Wszystkim!
Chce zrobić, aby program wykonywał jakieś czynności, zależnie od zeskanowanego kodu kreskowego (np. otwierał jakieś okno). Do PC skaner jest podłaczony poprzez USB i emuluje on klawiaturę. Po wielu poszukiwaniach, zrobiłem takie coś, że po zeskanowaniu kodu "open" wypisjue mi w konsoli "opening...". Tylko że działa to poprzez pole tekstowe, a chciałbym aby to nasłuchiwało poza nim, w całym programie najlepiej. Czy jest coś takiego możliwego do zrobienia? Jakieś pomysły? Podpowiedzi? Ten kod poniżej jest tylko stworzony do pokazania jak to działa.
Kod:

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

public class App {
    public static void main(String[] args) {

        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new GridLayout(2, false));

        Text textField = new Text(shell, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL | SWT.BORDER);

        GridData gridData1 = new GridData(SWT.FILL, SWT.FILL, false, false);
        gridData1.widthHint = 150;
        gridData1.heightHint = 75;

        textField.setLayoutData(gridData1);



        ModifyListener listener = new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent modifyEvent) {

                if (textField.getText().equalsIgnoreCase("open")) {
                    System.out.println("opening...");
                    textField.setText("");
                } else if (textField.getText().equalsIgnoreCase("close")) {
                    System.out.println("closing...");
                    textField.setText("");
                }

            }
        };

        textField.addModifyListener(listener);


        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }
}

Wzorowałem sie na :
[]https://stackoverflow.com/questions/6734393/getting-input-from-barcode-scanner-internally-without-textbox
[]https://stackoverflow.com/questions/12198432/handle-barcode-scan-in-java/22084579#22084579
itp.

Prosze nie patrzeć na to że jest to w SWT zrobione ;)

0

w jaki sposób zrobić żeby zeskanowany kod wpisało mi do stringa? co wpisać w myFrame.setBarCode(); ?
choć podejrzewam, że nie w ten sposób to powinno być, tylko w jakiejś petli, tak?

package main;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyFrame extends Frame {

    private String barCode;

    public String getBarCode () {
        return barCode;
    }

    public void setBarCode (String barCode){
        this.barCode = barCode;
    }
    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame();

        myFrame.setVisible(true);
        myFrame.setSize(200, 300);
        myFrame.setTitle("My Frame");
        myFrame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        myFrame.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    myFrame.setBarCode();
                    System.out.println("Code: " + myFrame.getBarCode());
                    myFrame.setBarCode(new String());

                } else {

                }
            }
        });
    }
}
0

ponieżej przedstawiam rozwiazanie, które działa poprawnie, moze sie kiedys komuś przyda, zreszta jest to też na stackoverflow.

BarcoderReader:

import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class BarcodeReader {

    private static final long THRESHOLD = 100;
    private static final int MIN_BARCODE_LENGTH = 3;

    public interface BarcodeListener {

        void onBarcodeRead(String barcode);
    }

    private final StringBuffer barcode = new StringBuffer();
    private final List<BarcodeListener> listeners = new CopyOnWriteArrayList<BarcodeListener>();
    private long lastEventTimeStamp = 0L;

    public BarcodeReader() {

        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
            @Override
            public boolean dispatchKeyEvent(KeyEvent e) {
                if (e.getID() != KeyEvent.KEY_RELEASED) {
                    return false;
                }

                if (e.getWhen() - lastEventTimeStamp > THRESHOLD) {
                    barcode.delete(0, barcode.length());
                }

                lastEventTimeStamp = e.getWhen();

                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    if (barcode.length() >= MIN_BARCODE_LENGTH) {
                        fireBarcode(barcode.toString());
                    }
                    barcode.delete(0, barcode.length());
                } else {
                    barcode.append(e.getKeyChar());
                }
                return false;
            }
        });

    }

    protected void fireBarcode(String barcode) {
        for (BarcodeListener listener : listeners) {
            listener.onBarcodeRead(barcode);
        }
    }

    public void addBarcodeListener(BarcodeListener listener) {
        listeners.add(listener);
    }

    public void removeBarcodeListener(BarcodeListener listener) {
        listeners.remove(listener);
    }

}

przykład MyFrame:

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyFrame extends Frame {


    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame();

        myFrame.setVisible(true);
        myFrame.setSize(200, 300);
        myFrame.setTitle("My Frame");

        myFrame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        String open = "open";
        String close = "close";

        BarcodeReader reader = new BarcodeReader();

        reader.addBarcodeListener(new BarcodeReader.BarcodeListener(){

            @Override
            public void onBarcodeRead(String barcode) {
                System.out.println(barcode);

                if (barcode.equalsIgnoreCase(open)) {
                    System.out.println("opening...");
                }
                if (barcode.equalsIgnoreCase(close)) {
                    System.out.println("closing...");
                }

            }
        });

    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1