我有一个带播放列表的表格。当我双击播放列表时,我会收到此播放列表的电影。
然而,当我双击电影时,我得到一张空桌子。因此,我不想在电影表中单击。如何防止这种行为?
那是我的倾听者:
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();
}
}
});
感谢您的回答。
答案 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
,