- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在主视图/详细 View 中,我有一系列文本字段(以及一个或两个其他控件),它们都与当前所选项目的详细信息有关。它们都共享相同的 DocumentListener
,因此如果您更改其中任何一个,将启用一对“保存”/“丢弃”按钮。这些按钮调用一个方法,我可以愉快地保存/丢弃项目。
但是,当我使用 InputMap
和 ActionMap
将共享的 saveAction 附加到回车键并将共享的 discardAction 附加到转义键时,discardAction 仅适用于某些字段( saveAction 对他们都有效)。
在记录日志时,我可以看到对于有效的字段,discardAction 首先被触发,然后是 removeUpdate 和 insertUpdate 的适当组合。
对于不起作用的字段,永远不会触发 discardAction。够多的喋喋不休,喋喋不休 - 这是相关的代码(复制和粘贴,而不是解释):
docChangeListener = new DocumentListener() {
public void insertUpdate(DocumentEvent de) {
System.out.println("\t insertUpdate just got triggered");
memberDetailsChanged(de);
}
public void removeUpdate(DocumentEvent de) {
System.out.println("\t removeUpdate just got triggered");
memberDetailsChanged(de);
}
public void changedUpdate(DocumentEvent de) {
// Not a styled document, safely ignore
}
};
saveAction = new AbstractAction() {
public void actionPerformed(ActionEvent ae) {
System.out.println("\t saveAction just got triggered");
saveChanges();
}
};
discardAction = new AbstractAction() {
public void actionPerformed(ActionEvent ae) {
System.out.println("\t discardAction just got triggered");
discardChanges();
}
};
private void registerDetailField(final JTextField field) {
field.getDocument().putProperty("field", field);
field.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "saveActionKey");
field.getActionMap().put("saveActionKey", saveAction);
field.getInputMap().put(KeyStroke.getKeyStroke("ESCAPE"), "discardActionKey");
field.getActionMap().put("discardActionKey", discardAction);
field.getDocument().addDocumentListener(docChangeListener);
}
所有文本字段都以相同的方式注册(使用 registerDetailField()
)。他们还调用了 putClientProperty
来为他们分配一个验证类型(见下文)。
有效字段和无效字段之间的唯一区别是实际验证过程。我会把它剪下来,因为它太长了,但我觉得我必须把它包括在内。 discardAction SEEMS 首先为有效的字段触发,但无效的字段都有共同的自定义验证。
private void verifyField(final JTextField field) {
int fieldType = ((Integer)field.getClientProperty("type")).intValue();
String fieldValue = field.getText();
switch (fieldType) {
case STANDARD_FIELD:
return; // No validation at the moment
case MEMBER_NUMBER_FIELD:
if (fieldValue.length() == 0) { // Field is required
field.setBackground(REQUIRED_COLOUR);
field.setToolTipText("This is a required field");
invalidFields.add(field);
return;
}
// Check proposed value is valid
if (customTableModel.memberNumStringIsValid(fieldValue,
selectedMember.getMemberNumber())) {
field.setBackground(NORMAL_COLOUR);
field.setToolTipText(null);
invalidFields.remove(field);
} else {
field.setBackground(ERROR_COLOUR);
field.setToolTipText("This value must be a unique,
positive number");
invalidFields.add(field);
}
return;
/* SNIP */
default:
return;
}
}
希望这是我的 verifyField 方法的一个简单问题,由于缺乏 sleep 而被我忽略了,但此刻我完全被难住了。
最佳答案
您遇到的问题与工具提示文本的设置有关。执行此操作后,ToolTipManager
会用它自己的 hideTip
击键替换 inputMap 中的丢弃操作键,也就是 VK_ESCAE。
关于Java AbstractAction 有时不检测转义键 - 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074161/
我想在运行时将一系列 Swing 操作加载到容器中,并通过常量名称访问它们,就像使用枚举一样。这样做的目的是限制可能的操作并提高可读性。 最初,我正在考虑一种动态枚举(请参阅 http://blog.
我的要求是添加两个图标到抽象操作示例:图标 + 操作名称 + 图标AbstractAction 有一个 super 构造函数来仅添加一个图标 最佳答案 通过将操作标签设置为 HTML 解决了此问题 关
我有一个 JMenuItem 绑定(bind)到一个 Action,我可以使用 item.getAction() 获取它。 Action 名称在构造 Action 时设置,例如使用匿名 new Abs
请原谅这个模糊的问题标题,但通常我不会做这样的事情。所以我有以下问题: 我正在为特定应用程序设计一个弹出菜单,其中每个菜单项都与特定操作相关联: public class CanvasMenu ext
我正在尝试使用子类 ColorAction 来扩展 AbstractAction 类。此类处理 ActionPerformed 方法的方法是获取用户的字符串格式输入,并将其与 colorKey 中的
这个问题在这里已经有了答案: event handling in java and the execution of actionPerformed method in java (5 个答案) 关
我试图通过使用 Action 对象将我的 GUI 应用程序中的功能与状态分开。我已经成功地使用它们来创建具有相同功能的菜单项和按钮。 我的问题是:我想对菜单中的“退出”项和框架的关闭按钮执行相同的操作
在主视图/详细 View 中,我有一系列文本字段(以及一个或两个其他控件),它们都与当前所选项目的详细信息有关。它们都共享相同的 DocumentListener,因此如果您更改其中任何一个,将启用一
在一个简单的计算器应用程序中,我使用抽象操作来处理用鼠标单击的按钮以及按下的相应数字键盘键(带有键绑定(bind))。我希望在使用键盘时发生某些外观更改,例如当我按下数字 1 键时更改 JButton
我正在尝试编写一个程序来创建 JPanel,当用户按下 W、A、S 和 D 时,绘制的立方体将在窗口中导航(每次按下某个键时都会导航一定量) Pressed),我创建了 MoveCubeUp 类,并重
我正在制作一款游戏,用户必须按键才能移动。我正在使用键绑定(bind),但它们不起作用。键绑定(bind)应该调用 Wp 类并打印“W按下”,但没有任何反应。代码如下: public class SO
类AbstractAction实现接口(interface)Action,但是在Action中,有一个方法actionPerformed(ActionEvent e),它继承自接口(interface
好的。我有一个大型项目,其中一个特定的 jtable 在启动时创建并且永远不会重建。根据各种用户操作刷新表格模型并重绘表格。 我添加了一个自定义的 TableCellListener 类以响应单元格更
我遇到了一个奇怪的问题。由于在 GUI 中按下按钮,我需要将一些文本导出到文件中。但是,我无法将 IOException 应用于事件调用的 AbstractAction 的 actionPerform
通用代码... 出于某种原因,我的 JMenuItem 没有执行操作。 我做了一个框架,一个JMenuBar和一个JMenuItem,一切都在它应该在的地方。我可以很好地单击 JMenuItem,它会
如果您创建 AbstractActivity 子类,则必须定义以下方法: @Override public void start(AcceptsOneWidget panel, EventBus ev
我正在创建一个ToolBar与一个JButton和一些JCheckBox隐藏或显示 JTable 中的列. JButton主要目的是一旦点击重置所有其他JCheckBox在 ToolBar全部选中或全
通常需要根据另一个 GUI 对象的状态来更改其他 GUI 对象的行为。例如。按下按钮时,标签应更改其名称。但是,当我使用像 JButton myButton = new JButton(myButto
我的 java swing 应用程序有一些在两个 JMenuItems 中使用的 AbstractActions和 JButton。我想将其中一些放入 JButton 内的 JToolbar 中,但是
当我尝试使用 table.setValueAt() 粘贴到 JTable 单元格时,我粘贴的单元格保持空白,但是 setValueAt() 似乎在工作。此外,当我尝试从一个单元格中剪切或复制时,当我想
我是一名优秀的程序员,十分优秀!