Как отключить копирование на JTable - PullRequest
1 голос
/ 29 мая 2019

Прежде всего я должен сказать, что я никогда не работал над Java-приложением.

Меня попросили запретить пользователю копировать (ctrl + c или щелчок правой кнопкой мыши) содержимое JTable / JLabel (я не разрабатывал это java-приложение).

Я не могу отключить JTable или JLabel, поскольку пользователь должен иметь возможность их редактировать. Мне просто нужно отключить функцию копирования на JLabel и / или JLabel.

Какой самый простой способ? Я прочитал несколько постов в интернете, но не очень-то понял, так как никогда не работал над Java-приложением.

Спасибо

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Вы можете отключить привязку клавиш «Ctrl + C» на JTable с помощью:

InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(KeyStroke.getKeyStroke("control C"), "none");
1 голос
/ 30 мая 2019

Вы можете переопределить это поведение, вызвав setTransferHandler для JTable, что, как вы, похоже, уже поняли.

Когда ячейка редактируется, CellEditor для класса столбца активно.Чтобы предотвратить копирование во время редактирования ячейки:

  • Создайте новый JTextField
  • Вызовите этот метод setTransferHandler в JTextField
  • Создайте новый DefaultCellEditor с этимJTextField
  • Установите редактор ячеек на JTable:

    TransferHandler copyDisabledHandler = new TransferHandler() {
        @Override
        public int getSourceActions(JComponent c) {
            return NONE;
        }
    };
    
    JTextField editorField = new JTextField();
    editorField.setTransferHandler(copyDisabledHandler);
    
    TableCellEditor uncopyableEditor = new DefaultCellEditor(editorField);
    
    table.setDefaultEditor(Object.class, uncopyableEditor);
    

В зависимости от значений, возвращаемых методом TableModel getColumnClass ,вам может понадобиться передать класс, отличный от Object.class, в setDefaultEditor, например String.class или Integer.class.

...