我試圖將MyObject
拖到JTable
。但無法找到如何。將MyObject拖到JTable(DnD)
我能得到幫助,任何這個點的(最好是3點)
** ** 1只有很好的例子,我發現是這樣的:?
指南:http://www.bryanesmith.com/docs/drag-and-drop-java-5/ 來源:http://www.bryanesmith.com/docs/drag-and-drop-java-5/DragAndDropPanelsDemo.java
問題的這是我得到:
拋出java.lang.ClassNotFoundException:RandomDragAndDropPanel(線:197)
任何想法爲什麼?
** 2。**其他好例子的提示?
或** 3 **以下是我放在一起的一個例子。但它只顯示String
,而不是MyObject
:
我所做的嘗試,使這項工作是添加:
public static DataFlavor FLAVOR = new DataFlavor(MyObject.class, "My Object");
但我有問題implementing Transferable
並添加TransferHandler
到MyObject
。任何想法它應該是什麼樣子?
import java.awt.Color;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.DropMode;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.TransferHandler;
import javax.swing.table.DefaultTableModel;
public class FlavorTest extends JFrame {
// FLAVOR = STRING
private DataFlavor FLAVOR = new DataFlavor(String.class, "DataWrapper");
public FlavorTest() {
// CREATE TABLE
DefaultTableModel model = getDefaultTableModel();
JTable table = new JTable(model);
addDragSupport(table, model);
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
table.setDropMode(DropMode.INSERT_ROWS);
table.setFillsViewportHeight(true);
// ADD TABLE AND DRAG OBJECT TO PANEL
JPanel panel = new JPanel();
panel.add(new MyObject("DRAG OBJECT"));
panel.add(table);
// ADD PANEL TO JFRAME
this.add(panel);
this.pack();
this.setDefaultCloseOperation(1);
this.setVisible(true);
}
// CREATE TABLE DATA
private DefaultTableModel getDefaultTableModel() {
String[] cols = { "a", "b", "c" };
String[][] rows = { { "1", "2", "3" } };
return new DefaultTableModel(rows, cols);
}
// SET TRANSFER HANDLER TO TABLE
private void addDragSupport(final JTable table, final DefaultTableModel model) {
table.setTransferHandler(new TransferHandler() {
public boolean canImport(TransferSupport support) {
return true;
}
public boolean importData(TransferSupport support) {
JTable.DropLocation dl = (JTable.DropLocation) support.getDropLocation();
int row = dl.getRow();
Object data;
try {
data = (Object) support.getTransferable().getTransferData(FLAVOR);
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
String[] rowData = data.toString().split(",");
model.insertRow(row, rowData);
return true;
}
});
}
public static void main(String[] args) {
new FlavorTest();
}
// CONTAINS A DRAGABLE JLIST WITH A STRING
private class MyObject extends JPanel {
public MyObject(String text) {
DefaultListModel<String> model = new DefaultListModel<String>();
model.addElement(text);
JList<String> list = new JList<String>(model);
list.setModel(model);
list.setDragEnabled(true);
list.setFocusable(false);
this.add(list);
this.setBorder(BorderFactory.createLineBorder(Color.black));
}
}
}
你在你的表上需要一個自定義的TransferHandler來接受你的對象 - 這不是String類型,還是它?重新閱讀之後,不明白你在做什麼:MyObject是一個JPanel,當你把它放在一個JTable上時會發生什麼?請注意,你從不**向**表添加組件。 – kleopatra
我真正想做的是將MyObject添加到JTable。一旦將它放入JTable中,我希望能夠調用例如myObject.getText(),然後在JTable中顯示此文本(或「MyObject」包含的其他數據)。 – Grains