0

我有一张带播放列表的表。当我双击播放列表时,我会得到该播放列表的电影。

但是,当我双击电影时,我得到一个空表。因此,我不想在电影表中单击。如何防止这种行为?

那是我的听众:

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();

        }
    }
});

我很感激你的回答。

4

3 回答 3

1

但是,当我双击电影时,我得到一个空表。

  • 这无关MouseListener,必须禁用TableCellEditor

.

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

.

  • 必须测试if return -1(选择任何行)int row = target.getSelectedRow();

  • 这个逻辑是不正确的,为什么你启用任何 on mouse_double_click, disable ListSelectionMode

于 2013-01-05T14:55:49.700 回答
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;
                ...
于 2013-01-05T14:19:00.220 回答
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) 中,您必须在切换回播放列表时重置监听器。

就个人而言,我会使用两个表并根据模式隐藏一个或另一个。

于 2013-01-05T14:19:31.060 回答