如何设置一个鼠标监听器,它不能在另一个表中单击?

时间:2013-01-05 14:12:07

标签: java eclipse swing jtable mouseevent

我有一个带播放列表的表格。当我双击播放列表时,我会收到此播放列表的电影。

然而,当我双击电影时,我得到一张空桌子。因此,我不想在电影表中单击。如何防止这种行为?

那是我的倾听者:

playlistTable.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
        if (e.getClickCount() == 2) {

            JTable target = (JTable)e.getSource();
            int row = target.getSelectedRow();

            videoTableModel = new VideoTableModel(playlistService.getMoviesOfPlaylist(row));
            target.setModel(videoTableModel);

            movieTable.setEnabled(true);

            createPlaylist.setEnabled(false);
            setButtonIcon("icons\\playlist_grau.png", createPlaylist, "createPlaylist");

            removePlaylist.setEnabled(false);
            setButtonIcon("icons\\bin_grau.png", removePlaylist, "removePlaylist");

            playlistTable.setEnabled(false);

            revalidate();

        }
    }
});

感谢您的回答。

3 个答案:

答案 0 :(得分:1)

从表中删除鼠标侦听器,或设置一个使侦听器不执行任何操作的标志:

playlistTable.addMouseListener(new MouseAdapter() {
    private boolean ignoreDoubleClicks = false;

    public void mouseClicked(MouseEvent e) {
        if (e.getClickCount() == 2 && !ignoreDoubleClicks) {
            JTable target = (JTable)e.getSource();
            target.removeMouseListener(this);

playlistTable.addMouseListener(new MouseAdapter() {
    private boolean ignoreDoubleClicks = false;

    public void mouseClicked(MouseEvent e) {
        if (e.getClickCount() == 2 && !ignoreDoubleClicks) {
                ignoreDoubleClicks = true;
                ...

答案 1 :(得分:1)

您使用相同的表来表示两组数据

 JTable target = (JTable)e.getSource();
 ....
 target.setModel(videoTableModel);

选项1)当您切换到“视频模式”

时删除监听器
 target.removeMouseListener(this);

选项2)添加变量并在更改为“视频模式”时将其设置为false,如果变量为false则不执行任何操作。

选项3)取决于你的其余代码,检查当前模型的类(假设你有一个不同的播放列表)

  if (!(target.getModel instanceof VideoTableModel)) {
    [Your code here]
  }

在1)或2)中,您必须在切换回播放列表时重置监听器。

就个人而言,我会使用两个表并在模式中隐藏其中一个。

答案 2 :(得分:1)

  

然而,当我双击电影时,我得到一张空桌子。

  • 这与MouseListener无关,必须禁用TableCellEditor

public boolean isCellEditable(int rowIndex, int columnIndex){
    return false; 
}

  • 必须为if return -1

  • 测试int row = target.getSelectedRow();(已选择任何行)
  • 此逻辑不正确为什么您在mouse_double_click上启用了任何内容,禁用ListSelectionMode