1

JDateChooserをダブルクリックして有効にします。だから私はMouseListenerを使用します:

jDateChooser1.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            System.out.println("mouse clicked");
        }
    });

しかし、このイベントは発生せず、何も起こりませんでした。

日付選択はcom.toedter.calendarのものです:

なにか提案を ?

解決

JDateChooserはパネルであり、パネルのコンポーネントからマウスイベントをリッスンする必要があります。JDateChooserにはgetDateEditor()があり、witchはテキストフィールドです。

これが解決策です:

this.jDateChooser1.getDateEditor().getUiComponent().addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            if(evt.getClickCount()==2){               
                Component c = ((Component)evt.getSource()).getParent();
                c.setEnabled(!c.isEnabled());
            }
        }
    });
4

1 に答える 1

2

クラスJDateChooserはJPanelを拡張します。クリックしている領域は、ルートJPanelに追加された別のコンテナ内にあると思います。イベントを発生させるコンテナを特定し、それにリスナーを追加する必要があります。

これが正しいかどうかをテストするには、リスナーをすべてのコンテナーに再帰的に追加してみてください。リスナーが起動することがわかった場合は、リスナーの再帰設定を削除して、MouseListenerを追加する必要があるリスナーを見つけてください。(私はテストせずに直接コードを書いているので、間違いを修正してください)

private void addMouseListenerRecrusively(Container container){

   for (Component component:container.getComponents()){
     if (component instanceof Container)
        addMouseListenerRecrusively(component); 
   }

   container.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            System.out.println("mouse clicked");
        }
    });

}

セレクターでメソッドを呼び出します

addMouseListenerRecrusively(jDateChooser1);
于 2011-08-24T18:52:08.807 に答える