首頁  >  問答  >  主體

java - swing:一段代码的优化。

如下代码给一个表格(JTable)注册行双击事件,请问如何写得更加简单、可读?

  //注册表格事件
  table.addMouseListener(new MouseListener() {
        //鼠标双击事件
        @Override
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 2) {
                .....//处理事件
            }
        }

        @Override
        public void mousePressed(MouseEvent e) {

        }

        @Override
        public void mouseReleased(MouseEvent e) {

        }

        @Override
        public void mouseEntered(MouseEvent e) {

        }

        @Override
        public void mouseExited(MouseEvent e) {

        }
    });
怪我咯怪我咯2718 天前231

全部回覆(1)我來回復

  • 高洛峰

    高洛峰2017-04-17 13:12:11

    J2SE裡面的許多GUI的Listener介面都有Adapter實作類,透過對Adapter的匿名類別可以免去實現不必要方法的麻煩。
    例如你的這個程式碼可以寫成:

    java  //注册表格事件
      table.addMouseListener(new MouseAdapter() {
            //鼠标双击事件
            @Override    // 不确定是否需要@Override, U try
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                    .....//处理事件
                }
            }
        });
    
    

    解釋:xxListener屬於接口,它定義了很多事件調用方法,如果你的類別實現xxListener的話必須將它定義的這些事件方法都實現,不管你需不需要的事件統統得實現,至少得實現成空方法(介面就是這麼任性)。而xxAdapter屬於類,它實現了xxListener接口,只不過它的所有方法都做成了空方法,你從xxAdapter類繼承出來的類就只需要重寫一下你所需要的事件方法就行了,其它事件發生的話就自動呼叫xxAdapter的空方法了。

    參考 http://www.766.com/doc/java/awt/event/MouseAdapter.html

    回覆
    0
  • 取消回覆