強提防
大多數JSomething不的意思是即使有可能用作容器 - 無論如何,其結果無論如何都是視覺上和行爲上的不確定性!
也就是說,最近做了一個實現類似於Windows任務對話框的東西。如果需求包括保持按鈕可點擊(以及爲什麼你會誤用它作爲容器:-)主要問題(佈局除外)是使所有添加的組件完全鼠標透明。這比預期的更困難。最低是不允許添加mouseListeners和禁用接受mouseEvents的:
final JTextArea area = new JTextArea("replacement ..") {
@Override
public synchronized void addMouseListener(MouseListener l) {
LOG.info("adding here ...?");
}
@Override
public synchronized void addMouseMotionListener(
MouseMotionListener l) {
}
@Override
public synchronized void addMouseWheelListener(
MouseWheelListener l) {
}
@Override
public void addNotify() {
disableEvents(AWTEvent.MOUSE_EVENT_MASK |
AWTEvent.MOUSE_MOTION_EVENT_MASK |
AWTEvent.MOUSE_WHEEL_EVENT_MASK);
super.addNotify();
}
};
另外要確保它不是可聚焦
area.setEditable(false);
area.setFocusable(false);
area.setRequestFocusEnabled(false);
加註銷拖動和工具提示
ToolTipManager.sharedInstance().unregisterComponent(area);
area.setDragEnabled(false);
儘管如此, fi可能還會有驚喜調用下面的兩倍(即禁用和重新啓用),這將在內部重新啓用的MouseEvent:
area.setAutoscrolls(!area.getAutoscrolls());
因此,在這一天結束的時候,我們可能逃脫它 - 但絕不是完全肯定的是,我們成功了。
你好!非常感謝您的快速響應。你的解決方案完美運作另外,感謝您的警告。我會嘗試找到一個更好的方式來做到這一點,當我有機會:) – Zee 2013-04-05 15:01:56