[英]Allow parent to handle mouse event
我添加了一個JPanel
到JRadioButton
-這樣我可以顯示任何我想要的單選按鈕。
這一切都按預期進行。 但是為了允許自動換行,我使用了JTextArea
並將其添加到單選按鈕中包含的JPanel
中。
現在,我遇到一個問題,如果用戶單擊JTextArea
,則JTextArea
消耗mouseEvent
,結果單選按鈕沒有響應(它不會“選擇”)。
有沒有辦法讓JTextArea
忽略鼠標單擊,以便父級可以代替它處理?
我嘗試將JTextArea
的偵聽器添加到radioButton
。
我也嘗試完全刪除其偵聽器,但這些嘗試均失敗。
有人有什么建議嗎?
謹防
即使有可能,大多數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());
因此,總而言之,我們可能會擺脫它-但永遠不能完全確定我們是否成功。
那這個呢? 創建自己的MouseListener並將其添加到TextArea
JPanel p = new JPanel();
JTextArea t = new JTextArea("line \n line");
t.addMouseListener(new MyMouseListener());
p.add(t);
jRadioButton1.add(p);
jRadioButton1.addMouseListener(new MyRadioButtonMouseListener());
並在MyMouseListener Dispatch事件中
private class MyMouseListener implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
Component source = (Component) e.getSource();
source.getParent().getParent().dispatchEvent(e); // 2x getParent() because JTextArea->JPanel->JRadio
}
.
.
.
}
最后是RadioButtonMouseListener
private class MyRadioButtonMouseListener implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("CLICK ON RADIOBUTTON !!");
}
.
.
.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.