Nano Hash - криптовалюты, майнинг, программирование

Выберите только ячейку, но выделите всю строку в таблице

В моей таблице я установил

table.setCellSelectionEnabled(true);  

так что я могу попросить пользователя выбрать отдельную ячейку и использовать ctrl-c для копирования/вставки содержимого ячейки в другое место. Однако я также хотел бы, чтобы вся строка была выделена (как это делается только с table.setRowSelectionAllowed(true)). Есть ли простой способ сделать это или для таблицы требуется специальный рендерер?

30.06.2015

  • Вы хотите, чтобы пользователь мог выбирать несколько столбцов/строк или выделять только одну за раз? 01.07.2015
  • @MadProgrammer выделяет только одну строку за раз. 01.07.2015

Ответы:


1

Поскольку вы хотите, чтобы в буфер обмена копировалась только выбранная ячейка. Я сделал это. Это скопирует содержимое выбранной ячейки [на Ctrl + C] только в буфер обмена, и в то же время вся строка также будет выделена.

Я реализовал Copy only, вы можете реализовать вырезание и вставку, если хотите.

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTable;

public class TableTest extends JFrame {
JTable table;

public TableTest() {
    table = new JTable();
    this.add(table);
    //Adding table with four columns and rows
    table.setModel(new javax.swing.table.DefaultTableModel(
            new Object[][]{
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String[]{
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
    ));
    //Adding table listener for Copy Ctrl+C
    addTableListener();
}

private void addTableListener() {
    table.addKeyListener(new KeyAdapter() {
        @Override
        public void keyReleased(KeyEvent e) {
            if (e.isControlDown()) {
                if (e.getKeyCode() == KeyEvent.VK_C) {
                    copy();
                }
            }
        }
    });
}

private void cancelEditing() {
    if (table.getCellEditor() != null) {
        table.getCellEditor().cancelCellEditing();
    }
}

public void copy() {
    cancelEditing();//To cancel editing if the cell is in edited mode
    int row = table.getSelectedRow();
    int col = table.getSelectedColumn();
    if (row != -1 && col != -1) {
        Object value = table.getValueAt(row, col);
        value = value != null ? value : "";
        StringSelection stringSelection = new StringSelection(value.toString());
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        clipboard.setContents(stringSelection, stringSelection);
    }
}

public static void main(String[] args) {
    TableTest test = new TableTest();
    test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    test.pack();
    test.setLocationRelativeTo(null);
    test.setVisible(true);
}
}
30.06.2015
  • Предполагая, что вы не используете setCellSelectionEnabled, тогда в моем тестировании он по-прежнему позволяет выбирать несколько столбцов (но это может быть желательно) 01.07.2015
  • Можете ли вы разработать свою проблему более подробно. 01.07.2015
  • После установки режима выбора предложенным вами способом при выборе выделяется вся строка (которая уже была по умолчанию), но фокус не переходит на одну выбранную ячейку, поэтому пользователь может использовать ctrl-c для копирования/ вставьте содержимое этой ячейки. Вместо этого ctrl-c копирует всю строку (включая неудобные пробелы для разрывов между столбцами). 01.07.2015
  • @jkeuhlen я изменил ответ, проверьте его 01.07.2015
  • @Madhan Я попробовал эту комбинацию и после вашего первоначального предложения. Это приводит к выделению только выбранной ячейки, а не всей строки. 01.07.2015
  • Таким образом, вы хотите выбирать только одну строку за раз. Не более того. И вы также не хотите, чтобы пользователь также выбирал отдельные ячейки. 01.07.2015
  • Давайте продолжим это обсуждение в чате. 01.07.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..