jTextfield에 값을 입력하면 jButton을 사용하지 않고 자동으로 누를 수 있습니까? 나는 그것의 가능하면 잘 모릅니다 .. 잘 아픈 JTextField를 자동으로 텍스트 필드 초기화 후 모든 KeyListener를 추가 수신하고 데이터베이스jTextfield에 값을 입력하면 jButton을 사용하지 않고 자동으로 누를 수 있습니까?
답변
에 쿼리를 시작합니다 스캔 한 후 내 바코드 스캐너를 사용하여 값을 표시 할 수 :
을textfield.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("typed: "+e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("released: "+e.getKeyChar());
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("pressed: "+e.getKeyChar());
}
});
및
아니요, 텍스트 구성 요소 내부에서 KeyListener를 사용하지 마십시오. –
이것은 텍스트 구성 요소의 본연의 기능을 엉망으로 만들 것이며 다른 많은 상위 솔루션을 사용할 수 있습니다. 그러나 OP는 우리에게 사용하기에 가장 적합한 것이 무엇인지 알려주지 못했습니다. –
이 가능 필요에 따라 수정이 자동으로하는 JButton를 사용하지 않고 누르면됩니다 JTextField를에 값을 입력 한 후?
텍스트 필드에 ActionListener
을 추가 할 수 있습니다.
텍스트 필드에 포커스가 있고 Enter 키를 누르면 수신기가 호출됩니다.
답변은 "언론"의 정의에 따라 다릅니다. 바코드를 스캔 할 때 내 경험에 의하면, 기대는, 액션은 사용자가 별도의 작업을 수행 할 필요없이 수행 할 것이다 가정을 바탕으로
, 당신은 두 가지 기본 선택고정 길이
이 당신이 바코드의 길이를 알고 (그리고 상수의) 경우, 당신은 행동 그래서
public class BarCodeLengthDocumentListener implements DocumentListener {
private ActionListener actionListener;
private int barCodeLength;
public BarCodeLengthDocumentListener(int barCodeLength, ActionListener actionListener) {
this.actionListener = actionListener;
this.barCodeLength = barCodeLength;
}
@Override
public void insertUpdate(DocumentEvent e) {
doCheck(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
doCheck(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
doCheck(e);
}
protected void doCheck(DocumentEvent e) {
Document doc = e.getDocument();
if (doc.getLength() >= barCodeLength) {
try {
String text = doc.getText(0, doc.getLength());
ActionEvent evt = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, text);
actionListener.actionPerformed(evt);
} catch (BadLocationException exp) {
exp.printStackTrace();
ActionEvent evt = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null);
actionListener.actionPerformed(evt);
}
}
}
}
에게 길이에 도달하면 감지하고 트리거 할 DocumentFilter
을 사용할 수, 기본적으로, 이것은 당신이 특급을 지정할 수 있습니다 반사 된 바코드의 길이가 도달 할 때, 당신이 길이를 모르는 (또는 변수) 경우
가, 또 다른 옵션 인 ActionEvent
지연된 작업을 통해 텍스트를 전달 ActionListener
을 트리거합니다 문서 이벤트가 발생하고 ActionListener
public class DelayedDocumentListener implements DocumentListener {
private ActionListener actionListener;
private String text;
private Timer timer;
public DelayedDocumentListener(ActionListener actionListener) {
this.actionListener = actionListener;
timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ActionEvent evt = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, text);
actionListener.actionPerformed(evt);
}
});
timer.setRepeats(false);
}
@Override
public void insertUpdate(DocumentEvent e) {
doCheck(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
doCheck(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
doCheck(e);
}
protected void doCheck(DocumentEvent e) {
try {
Document doc = e.getDocument();
text = doc.getText(0, doc.getLength());
} catch (BadLocationException ex) {
ex.printStackTrace();
}
timer.restart();
}
}
트리거 그래서이 문서 이벤트가 발생할 때 사이의 (1 초의 경우) 지연을 생성하는 스윙 Timer
를 사용하는 경우 사이에 지연의 어떤 주입을 트리거 할 때, 각 새 문서 이벤트는 Timer
을 인터럽트하여 다시 시작합니다. 즉, 마지막 문서 이벤트와 ActionListener
의 트리거링 사이에 최소한 1 초가 있어야합니다.
때때로 사람들은 수동으로 바코드를 입력해야하기 때문에 지연으로 게임을하고 싶을 수도 있습니다.
의 Runnable 예 ...
그래서, 이것은 기본적으로, 그것은 대부분의 바코드 스캐너
import java.awt.AWTException;
import java.awt.EventQueue;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
BarCodeLengthDocumentListener lengthListener = new BarCodeLengthDocumentListener(7, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = e.getActionCommand();
JOptionPane.showMessageDialog(TestPane.this, text);
}
});
DelayedDocumentListener delayedListener = new DelayedDocumentListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = e.getActionCommand();
JOptionPane.showMessageDialog(TestPane.this, text);
}
});
JTextField field1 = new JTextField(7);
field1.getDocument().addDocumentListener(lengthListener);
JTextField field2 = new JTextField(7);
field2.getDocument().addDocumentListener(delayedListener);
add(field1);
add(field2);
JButton simLength = new JButton("Simulate Length");
simLength.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
field1.setText(null);
field1.requestFocusInWindow();
Thread t = new Thread(new Simulator());
t.start();
}
});
JButton simDelay = new JButton("Simulate Delay");
simDelay.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
field2.setText(null);
field2.requestFocusInWindow();
Thread t = new Thread(new Simulator());
t.start();
}
});
add(simLength);
add(simDelay);
}
}
public class Simulator implements Runnable {
@Override
public void run() {
try {
Robot bot = new Robot();
type(KeyEvent.VK_1, bot);
type(KeyEvent.VK_2, bot);
type(KeyEvent.VK_3, bot);
type(KeyEvent.VK_4, bot);
type(KeyEvent.VK_5, bot);
type(KeyEvent.VK_6, bot);
type(KeyEvent.VK_7, bot);
} catch (AWTException ex) {
ex.printStackTrace();
}
}
protected void type(int keyStoke, Robot bot) {
bot.keyPress(keyStoke);
bot.keyRelease(keyStoke);
}
}
public class BarCodeLengthDocumentListener implements DocumentListener {
private ActionListener actionListener;
private int barCodeLength;
public BarCodeLengthDocumentListener(int barCodeLength, ActionListener actionListener) {
this.actionListener = actionListener;
this.barCodeLength = barCodeLength;
}
@Override
public void insertUpdate(DocumentEvent e) {
doCheck(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
doCheck(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
doCheck(e);
}
protected void doCheck(DocumentEvent e) {
Document doc = e.getDocument();
if (doc.getLength() >= barCodeLength) {
try {
String text = doc.getText(0, doc.getLength());
ActionEvent evt = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, text);
actionListener.actionPerformed(evt);
} catch (BadLocationException exp) {
exp.printStackTrace();
ActionEvent evt = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null);
actionListener.actionPerformed(evt);
}
}
}
}
public class DelayedDocumentListener implements DocumentListener {
private ActionListener actionListener;
private String text;
private Timer timer;
public DelayedDocumentListener(ActionListener actionListener) {
this.actionListener = actionListener;
timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ActionEvent evt = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, text);
actionListener.actionPerformed(evt);
}
});
timer.setRepeats(false);
}
@Override
public void insertUpdate(DocumentEvent e) {
doCheck(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
doCheck(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
doCheck(e);
}
protected void doCheck(DocumentEvent e) {
try {
Document doc = e.getDocument();
text = doc.getText(0, doc.getLength());
} catch (BadLocationException ex) {
ex.printStackTrace();
}
timer.restart();
}
}
}
네, 가능을 시뮬레이션해야 키보드 버퍼에 키 스트로크를 주입하는
java.awt.Robot
을 사용, 모두의 아이디어를 제시 그러나 솔루션의 세부 사항은 문제의 세부 사항과 코드에 따라 다릅니다.더 설명하고 더 많이 표시하십시오. [mcve] 코드가 더 바람직합니다. –또는 바코드 스캐너를 실행 한 후 데이터베이스에서 쿼리 검색을 자동으로 시작하고 아이템 정보를 표시 할 수 있습니까? 죄송합니다. 자바와 프로그래밍에 익숙하지 않습니다. – JoMS
현재 우리에게 숨겨져있는 문제의 세부 사항을 알 수있는 것처럼 귀하의 코드가 어떻게 보이는지를 묻는 것입니다. ** 다시 ** 귀하의 질문을 편집하고, 당신이하고자하는 일에 대해 훨씬 더 자세하게 설명하고, 관련 코드를 보여주십시오. –