是否有可能在jTextfield中鍵入一個值後,它會自動按下而不使用jButton?我不知道它有可能..好病是用它在我的條碼掃描儀掃描後顯示的值JTextField中會自動接收並開始對數據庫是否有可能在jTextfield中鍵入一個值後它會自動按下而不使用jButton?
回答
查詢添加KeyListener的初始化文本框後:
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尚未告知我們足夠讓我們知道哪個最適合使用。 –
是否有可能修改輸入的值在JTextField中它會自動按不使用的JButton後?
您可以將ActionListener
添加到文本字段。
當文本字段具有焦點並按下Enter鍵時,將會調用偵聽器。
答案取決於你對「新聞」的定義。在我的經驗,期望是,當條形碼掃描,將無需用戶做任何額外的執行動作
基於這個假設,你有兩個基本的選擇
固定長度
如果您知道條碼的長度(和它的常數),你可以使用一個DocumentFilter
檢測達到長時,引發行動
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);
}
}
}
}
所以,基本上,這允許您指定的EXP條形碼的ected長度和它達到的時候,它會觸發ActionListener
,使文本通過ActionEvent
行動遲緩
如果你不知道的長度(或它的變量),另一個選擇是注入某種延遲的當文檔事件發生時,當你觸發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();
}
}
所以這裏採用當一個文檔事件發生之間的搖擺Timer
產生的延遲(在本例中爲1秒)之間何時會觸發ActionListener
,每個新文檔事件中斷Timer
,導致它重新啓動。這意味着最後一次文檔事件和觸發ActionListener
之間必須至少有1秒鐘的時間。
因爲有時候人們需要手動輸入條形碼,所以你可能想玩這個延遲。
Runnable的例子...
所以,這基本上呈現兩種思路,它採用了java.awt.Robot
到擊鍵注入應該模擬大部分的條碼掃描器
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();
}
}
}
- 1. JButton按下不能與JTextField
- 2. 按下JButton而不是鍵盤
- 3. 是否有可能創建一個服務而不啓動它?
- 4. 是否有可能檢測到輸入鍵被按下不使用JavaScript
- 5. 要在下一個可用的JTextField中設置按鈕的值?
- 6. 是否有可能在不破壞它的情況下重用一個活動?
- 7. 如何在JTextField中按回車字符而不是按鍵
- 8. 鍵入JTextField將啓用按鈕。使用KeyListener是否錯誤?
- 9. 是否有可能設置一個JTextField的文本在Swing
- 10. 是否有可能使用JSlider控制多個JTextfield?
- 11. 在doctrine2中是否可以有一個不是主鍵的自動增量列?
- 12. JButton鍵監聽器在按下其他鍵之後不會觸發
- 13. 是否有可能自動增加不是主鍵的列
- 14. 是否有可能使用argparse,但傳入一個自定義的argv而不是使用sys.argv?
- 15. 在Java中我可以有一個鍵 - 鍵映射(而不是鍵值)嗎?
- 16. 如何使用ConsoleKeyInfo檢查是否有2個可能的鍵被按下?
- 17. 是否有可能模擬jqGrid中的導航鍵按下?
- 18. OpenResty:是否有可能在Lua中創建一個ngx.shared.DICT而不使用指令?
- 19. MySQL,是否有可能在一個表中查看來自不同表的值的多個外鍵值?
- 20. JTextField在按下按鈕時自動更改值
- 21. 按JButton時將光標移動到JTextField
- 22. JButton在按下其他JButton後沒有被調用
- 23. 是否有可能使用Enter作爲選項卡而不繼承JTextField或批量添加鍵監聽器?
- 24. 在JTextField或Jbutton中顯示按鍵計數
- 25. 是否有可能在活動中使用CursorLoader而不具有android兼容性
- 26. 是否有可能在一個表中創建兩個主鍵
- 27. 是否有可能使一個Firebug的控制檯自動化?
- 28. 使用javascript自動提交表單而不是按下按鈕
- 29. 是否有可能使一個函數自我意識,而不需要外部
- 30. 是否有可能使iPhone鍵盤不可見/刪除它,而不必退出第一響應者?
是的,這是可能的鍵盤緩衝區,但解決方案的細節取決於您的問題和代碼的細節。請解釋更多,並顯示更多,最好是[mcve]代碼。 –
或者它是否可以在發射條形碼掃描器後自動啓動對我的數據庫的查詢搜索,它會顯示項目信息?對於java和編程新手抱歉 – JoMS
你在問你的問題,就好像我們知道你的代碼是什麼樣子一樣,就好像我們知道目前隱藏的問題的細節。 **再次**請編輯您的問題,更詳細地解釋您正在嘗試做什麼,並顯示相關的代碼。 –