我正在用Java编程一个聊天客户机,在那里我希望有一个单独的JDialog用于所有打开的聊天。所以我决定使用一个JTabbedPane,其中一个选项卡代表一个单独的聊天。
我在每个选项卡中都放了一个JPanel,它只包含一个用于消息历史记录的JTextPane和一个用户输入消息的JTextArea。
为了更好的可用性,我实现了一个特性,当
我有一个类ChatWindow,它扩展了JDialog并显示JTabbedPane。这就是我实现ChangeListener的地方。
private JTabbedPane chatTabPane;
private List<ChatTab> chatTabs;
public ChatWindow() {
chatTabs = new ArrayList<ChatTab>();
JPanel chatWindowPanel = new JPanel(new BorderLayout());
chatTabPane = new JTabbedPane(JTabbedPane.TOP);
chatWindowPanel.add(chatTabPane);
this.add(chatWindowPanel, BorderLayout.CENTER);
chatTabPane.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
focusInputField();
}
});
}
public ChatTab addChatTab(Contact contact) {
ChatTab newChatTab = new ChatTab();
chatTabs.add(newChatTab);
chatTabPane.addTab(contact.toString(), null, newChatTab.getPanel());
return newChatTab;
}
public void focusInputField() {
for (ChatTab chatTab : chatTabs) {
if(chatTab.getPanel() == chatTabPane.getSelectedComponent()) {
chatTab.focusInputField();
}
}
}
public JTabbedPane getChatTabs() {
return chatTabPane;
}
}
ChatTab类中的方法focusInputField()简单地看起来如下所示:
public void focusInputField() {
inputField.requestFocusInWindow();
inputField.requestFocus();
}
好的,这是标签改变时的焦点。此外,我还实现了在创建新的聊天选项卡时聚焦JTextArea。在类ChatWindowController中处理的。有一个方法setChatVisible(),当我向ChatWindow类添加一个新选项卡时,我会调用它:
public void setChatVisible() {
if(!chatWindow.isVisible()) {
chatWindow.setVisible(true);
chatWindow.focusInputField();
}
}
所以我的问题是:当我打开一个新的chattab时,焦点就会起作用。在大多数情况下,当用户更改选项卡时,它也起作用,但当我打开多个新的聊天选项卡并第一次在选项卡之间切换时,它就不聚焦了。我切换到的选项卡的JTextArea没有聚焦。然而,当我再次切换时,它一直起作用。
有人知道问题是什么吗?我真的没主意了。
不正确的同步可能导致间歇性故障。有几件事应该批判性地加以审查:
>
验证您在事件调度线程(EDT)上构造了所有GUI元素。
例如,由于您确实使用了多个线程,请验证所有更新都发生在EDT上。
您可以使用invokelater()
在EDT上排序事件,如下所示。
首选RequestFocusInWindown()
而不是RequestFocus()
,但不要两者都使用。
我对此完全陌生..... 问题是,当我切换到任何选项卡时,我无法获得正常的jpanel效果。按钮不能用鼠标点击(可以通过按tab键选择按钮n然后按space键点击),文本字段不能在鼠标点击时选择(只能通过按tab键选择)等。 那么对此有什么解决办法吗??我希望jtabbedpane中的面板像普通jpanel一样工作:)谢谢:)
我有一个JTabbed面板,它有4个选项卡。每个选项卡都有一个 JTable。我正在尝试为JTabbedPane设计一个自定义的焦点移动策略,这样当我专注于表格的最后一个单元格时,按Tab会将我带到下一个标签。我已经搜索了很多,但没有找到我可以使用的特定内容。 以下是我的自定义焦点遍历策略。 此外,这些JTables正在其他地方实例化,我已经覆盖了Tab键绑定,以便在最后一个单元格上专注于下一个组
当用户点击某个元素或使用键盘上的 Tab 键选中时,该元素将会获得聚焦(focus)。还有一个 HTML 特性(attribute)autofocus 可以让焦点在网页加载时默认落在一个元素上,此外还有其它途径可以获得焦点。 聚焦到一个元素通常意味着:“准备在此处接受数据”,所以,这正是我们可以运行代码以初始化所需功能的时刻。 失去焦点的时刻(“blur”)可能更为重要。它可能发生在用户点击页面的
Focus聚焦社区是GoFrame社区项目,采用了简洁强大的GoFrame作为后端WEB框架, 由于前台系统需要SEO因此使用了GF自带template模板引擎,数据库用MySQL,前端使用jQuery/bootstrap框架。 一、源码地址 github:https://github.com/gogf/focus gitee:https://gitee.com/johng/focus 二、演示
问题内容: 我的项目包括Selenium Webdriver,JAVA,Maven,TestNG,Jenkins,Allure(报告)。我有几套包含100多个测试用例的测试,并通过3种不同的浏览器进行了迭代(测试使用TestNG并行运行)。 除非我实际上正在观察窗口并查看测试运行,否则无法通过一项测试。 我将解释: 我要测试什么? 我们的JS开发人员创建了一项功能,仅当用户将焦点放在窗口上时,图像
问题内容: 有谁知道xlib函数可以在不失去原始焦点的情况下捕获按键事件?如何摆脱它? (或“使用XGrabKey()而不生成Grab样式的聚焦”?) (或“如何在系统级别摆脱NotifyGrab和NotifyUngrab焦点事件?) XGrabKey将失去对按键的关注,而将精力恢复于释放的键。 而且我想捕获按键而不泄漏到原始窗口(就像XGrabKey可以做到的一样)。 参考文献: … XGrab