JTable Выбрать по коду несмежные ячейки - PullRequest
0 голосов
/ 22 октября 2019

Я читаю этот вопрос

Программно выбрать несколько ячеек в JTable Это сообщение http://www.java2s.com/Tutorial/Java/0240__Swing/Selectacellcell21.htm

и это сообщение http://esus.com/programmatically-selecting-a-jtable-cell/

Принимаякод

table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
//table.setRowSelectionInterval(0, 2);
//table.setColumnSelectionInterval(0, 1);
table.setRowSelectionAllowed(false);
table.setColumnSelectionAllowed(false);
table.changeSelection(0, 0, true, false);
table.changeSelection(2, 2, true, false);

Но у меня есть: enter image description here

Я хочу сделать это, но используя только код, без щелчка ( для изображенияЯ использовал click )!

enter image description here

Как выбрать не смежную ячейку JTable, используя только код (не щелчок)?

1 Ответ

1 голос
/ 22 октября 2019

Редактирование ответа Программно выберите несколько ячеек в JTable

Заполните список необходимой точкой.

List<Point> selected = new ArrayList<>(Arrays.asList(new Point(0, 0), new Point(2, 2)));

Здесь код.

public class TableSelection extends JFrame {

  private static final long serialVersionUID = 1L;
  String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};
  Object[][] data = {{"Kathy", "Smith", "Snowboarding", Integer.valueOf(5), Boolean.valueOf(false)},
  {"John", "Doe", "Rowing", Integer.valueOf(3), Boolean.valueOf(true)},
  {"Sue", "Black", "Knitting", Integer.valueOf(2), Boolean.valueOf(false)},
  {"Jane", "White", "Speed reading", Integer.valueOf(20), Boolean.valueOf(true)},
  {"Joe", "Brown", "Pool", Integer.valueOf(10), Boolean.valueOf(false)}};

  public TableSelection() {
    JPanel main = new JPanel();
    JTable table = new JTable(data, columnNames) {
      private static final long serialVersionUID = 1L;
      List<Point> selected = new ArrayList<>(Arrays.asList(new Point(0, 0), new Point(2, 2)));

      @Override
      protected void processMouseEvent(MouseEvent e) {
        if (e.getID() != MouseEvent.MOUSE_PRESSED) {
          return;
        }
        int row = ((JTable) e.getSource()).rowAtPoint(e.getPoint());
        int col = ((JTable) e.getSource()).columnAtPoint(e.getPoint());
        if (row >= 0 && col >= 0) {
          Point p = new Point(row, col);
          if (selected.contains(p)) {
            selected.remove(p);
          } else {
            selected.add(p);
          }
        }
        ((JTable) e.getSource()).repaint();
      }

      @Override
      public boolean isCellSelected(int arg0, int arg1) {
        return selected.contains(new Point(arg0, arg1));
      }
    };
    JScrollPane pane = new JScrollPane(table);
    main.add(pane);
    this.add(main);

    this.setSize(800, 600);
    this.setVisible(true);
  }

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    new TableSelection();
  }

}
...