默認情況下,當您嘗試從JTable
複製時,正在複製的值的toString
方法將發送到剪貼板。我怎樣才能改變這種行爲的一類對象?更改JTable單元的複製行爲
比方說,爲了簡單起見,我有兩列的表格。第一列有Boolean
s,第二列有String
s。目前,當您複製Boolean
時,您將獲得true
或false
。我怎麼能改變這種行爲,在剪貼板上放置一個任意字符串(如t
爲true
和f
爲false
),而不更改String
的複製行爲?
這裏是一個SSCCE,您可以從JTable
複製/粘貼。
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.AbstractTableModel;
public class ChangeCopyBehavior {
private static class TestModel extends AbstractTableModel {
private static final long serialVersionUID = -774558262249729206L;
@Override
public int getRowCount() {
return 4;
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Class<?> getColumnClass(int col) {
return col == 0 ? Boolean.class : String.class;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex == 1) {
return "String";
} else {
return rowIndex % 2 == 0;
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JTable table = new JTable(new TestModel());
table.setCellSelectionEnabled(true);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(new JScrollPane(table), BorderLayout.CENTER);
panel.add(new JTextArea("Paste stuff here"), BorderLayout.SOUTH);
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
});
}
}
可能重複[選擇密碼行和粘貼在記事本中顯示密碼](http://stackoverflow.com/questions/8776754/selecting-password-row-and -pasting功能於記事本揭示-的密碼) – Robin 2012-01-18 07:13:42