2012-01-18 73 views
2

默認情況下,當您嘗試從JTable複製時,正在複製的值的toString方法將發送到剪貼板。我怎樣才能改變這種行爲的一類對象?更改JTable單元的複製行爲

比方說,爲了簡單起見,我有兩列的表格。第一列有Boolean s,第二列有String s。目前,當您複製Boolean時,您將獲得truefalse。我怎麼能改變這種行爲,在剪貼板上放置一個任意字符串(如ttrueffalse),而不更改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); 
      } 
     }); 
    } 
} 
+0

可能重複[選擇密碼行和粘貼在記事本中顯示密碼](http://stackoverflow.com/questions/8776754/selecting-password-row-and -pasting功能於記事本揭示-的密碼) – Robin 2012-01-18 07:13:42

回答

4

創建一個自定義的TransferHandler以任意格式導出數據。

以下是Swing教程中舊ExtendedDnDDemo的鏈接,其中顯示了自定義TableTransferHandler的示例。