在我的java swing應用程序中,每當我點擊窗體的某個字段時,我想顯示一個信息文本(屏幕頂部的JTextArea)。要做到這一點,我實現了接口的PropertyChangeListener 如下:如何防止組件的可聚焦性java swing
private final class FocusChangeHandler implements PropertyChangeListener {
@Override
public void propertyChange(final PropertyChangeEvent evt) {
final String propertyName = evt.getPropertyName();
if (!"permanentFocusOwner".equals(propertyName)) {
return;
}
final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
final String focusHint = (focusOwner instanceof JComponent) ? ((String) ValidationComponentUtils.getInputHint((JComponent) focusOwner))
: null;
infoArea.setText(focusHint);
infoAreaPane.setVisible(focusHint != null);
}
}
我的問題是,每當infoArea的值更改它獲得焦點和滾動重返巔峯。
我想要阻止這種行爲,我想更新infoArea的值而不把重點放在它上面。
我試過方法.setFocusable(false),但滾動條不斷返回到屏幕的頂部。
請讓我知道是否需要任何進一步的信息。
謝謝
你不能嘗試在發起事件的組件上使用'requestFocus()'嗎?看看它是否有幫助。 – Iootu
我剛寫了一個測試程序,我沒有看到你描述的行爲。在JTextArea上調用setText並沒有給它關注。它導致JTextArea滾動到底部,而不是頂部。您的JTextArea是否在JScrollPane中? – VGR