swi*_*ode 5 java swing jtable keylistener joptionpane
这可能是一个非常简单的事情,我忽略了,但我似乎无法弄明白.
我有以下更新JTable的方法:
class TableModel extends AbstractTableModel {
public void updateTable() {
try {
// update table here
...
} catch (NullPointerException npe) {
isOpenDialog = true;
JOptionPane.showMessageDialog(null, "No active shares found on this IP!");
isOpenDialog = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不希望isOpenDialog在按下消息对话框上的OK按钮之前将boolean设置为false,因为如果用户按下enter键,它将激活KeyListener文本字段上的事件并且如果设置了它将再次触发整个代码块到false.
KeyListener代码的一部分如下所示:
public class KeyReleased implements KeyListener {
...
@Override
public void keyReleased(KeyEvent ke) {
if(txtIPField.getText().matches(IPADDRESS_PATTERN)) {
validIP = true;
} else {
validIP = false;
}
if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
if (validIP && !isOpenDialog) {
updateTable();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否JOptionPane.showMessageDialog()有某种机制阻止执行下一行,直到按下确定按钮?谢谢.
Hov*_*els 10
JOptionPane创建一个模态对话框,因此在处理对话框之前不会调用超出它的行(按下其中一个按钮或按下关闭菜单按钮).
更重要的是,您不应该将KeyListener用于此类事情.如果您希望让JTextField侦听按Enter键,请向其添加ActionListener.
轻松满足您的需求是使用showConfirmDialog(...),结果showMessageDialog(),这可以让您从用户那里获取输入,然后继续进行.请看一下这个示例程序,以便澄清:-)
import javax.swing.*;
public class JOptionExample
{
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
int selection = JOptionPane.showConfirmDialog(
null
, "No active shares found on this IP!"
, "Selection : "
, JOptionPane.OK_CANCEL_OPTION
, JOptionPane.INFORMATION_MESSAGE);
System.out.println("I be written" +
" after you close, the JOptionPane");
if (selection == JOptionPane.OK_OPTION)
{
// Code to use when OK is PRESSED.
System.out.println("Selected Option is OK : " + selection);
}
else if (selection == JOptionPane.CANCEL_OPTION)
{
// Code to use when CANCEL is PRESSED.
System.out.println("Selected Option Is CANCEL : " + selection);
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41727 次 |
| 最近记录: |