ホームページ  >  に質問  >  本文

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) {

        }
    });
怪我咯怪我咯2766日前260

全員に返信(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
  • キャンセル返事