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 012import org.openstreetmap.josm.gui.util.TableHelper; 013 014/** 015 * Selection table of relation editor. 016 * @since 2563 017 */ 018public class SelectionTable extends JTable { 019 020 private final SelectionTableModel model; 021 private final MemberTableModel memberTableModel; 022 023 /** 024 * Constructs a new {@code SelectionTable}. 025 * @param model table model 026 * @param memberTableModel member table model 027 */ 028 public SelectionTable(SelectionTableModel model, MemberTableModel memberTableModel) { 029 super(model, new SelectionTableColumnModel(memberTableModel)); 030 this.model = model; 031 this.memberTableModel = memberTableModel; 032 build(); 033 } 034 035 protected void build() { 036 TableHelper.setFont(this, getClass()); 037 setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 038 addMouseListener(new DoubleClickAdapter()); 039 memberTableModel.addTableModelListener(e -> repaint()); 040 } 041 042 class DoubleClickAdapter extends MouseAdapter { 043 @Override 044 public void mouseClicked(MouseEvent evt) { 045 if (!(SwingUtilities.isLeftMouseButton(evt) && evt.getClickCount() > 1)) 046 return; 047 int row = rowAtPoint(evt.getPoint()); 048 memberTableModel.selectMembersReferringTo(Collections.singleton(model.getPrimitive(row))); 049 } 050 } 051}