001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.relation; 003 004import java.awt.event.MouseAdapter; 005import java.awt.event.MouseEvent; 006import java.util.Collections; 007 008import javax.swing.JTable; 009import javax.swing.ListSelectionModel; 010import javax.swing.SwingUtilities; 011 012/** 013 * Selection table of relation editor. 014 * @since 2563 015 */ 016public class SelectionTable extends JTable { 017 018 private final SelectionTableModel model; 019 private final MemberTableModel memberTableModel; 020 021 /** 022 * Constructs a new {@code SelectionTable}. 023 * @param model table model 024 * @param memberTableModel member table model 025 */ 026 public SelectionTable(SelectionTableModel model, MemberTableModel memberTableModel) { 027 super(model, new SelectionTableColumnModel(memberTableModel)); 028 this.model = model; 029 this.memberTableModel = memberTableModel; 030 build(); 031 } 032 033 protected void build() { 034 setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 035 addMouseListener(new DoubleClickAdapter()); 036 memberTableModel.addTableModelListener(e -> repaint()); 037 } 038 039 class DoubleClickAdapter extends MouseAdapter { 040 @Override 041 public void mouseClicked(MouseEvent evt) { 042 if (!(SwingUtilities.isLeftMouseButton(evt) && evt.getClickCount() > 1)) 043 return; 044 int row = rowAtPoint(evt.getPoint()); 045 memberTableModel.selectMembersReferringTo(Collections.singleton(model.getPrimitive(row))); 046 } 047 } 048}