0

プレイリストを持つテーブルが 1 つあります。プレイリストをダブルクリックすると、このプレイリストのムービーが表示されます。

ただし、映画をダブルクリックすると、空のテーブルが返されます。したがって、ムービー テーブルをクリックしたくありません。この動作を防ぐにはどうすればよいですか?

それが私のリスナーです:

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

  • このロジックは正しくありません。なぜ、何でも有効にしmouse_double_click、無効にし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) では、プレイリストに戻るときにリスナーをリセットする必要があります。

個人的には、2 つのテーブルを使用し、モードに基づいていずれかを非表示にします。

于 2013-01-05T14:19:31.060 に答える