Einen wunderschönen, wünsche ich.
ich habe folgendes verständnissproblem betreffend D&D, und hoffe, das mir das jemand erklären kann.
aufgabenstellung:
mache eine table mit daten. -> hab ich
machen eine andere table in einem anderen frame -> hab ich auch.
mache einen transfairhandler, der die daten aus einer oder mehrerer rows in die andere table per D6D überträgt. -> auch ok.
mache einen transfairhandler, der zwei vorher bestimmte datensätze überträgt.
also ich klicke z.b. in row nr.5 und col. nr. 10, und möchte die daten aus
row nr. 5 col. nr. 1
und
row nr. 1 und col. nr. 10
haben.
wo kann ich das im folgenden transfairhandler festlegen, welche daten er genau nehmen soll?
irgendwie enden alle meine versuche immer wieder dabei, das er mir die komplette row mit übernimmt *grummel*
danke euch.
ich habe folgendes verständnissproblem betreffend D&D, und hoffe, das mir das jemand erklären kann.
aufgabenstellung:
mache eine table mit daten. -> hab ich
machen eine andere table in einem anderen frame -> hab ich auch.
mache einen transfairhandler, der die daten aus einer oder mehrerer rows in die andere table per D6D überträgt. -> auch ok.
mache einen transfairhandler, der zwei vorher bestimmte datensätze überträgt.
also ich klicke z.b. in row nr.5 und col. nr. 10, und möchte die daten aus
row nr. 5 col. nr. 1
und
row nr. 1 und col. nr. 10
haben.
wo kann ich das im folgenden transfairhandler festlegen, welche daten er genau nehmen soll?
irgendwie enden alle meine versuche immer wieder dabei, das er mir die komplette row mit übernimmt *grummel*
Code:
abstract class StringTransferHandler extends TransferHandler {
protected abstract String exportString(JComponent c);
protected abstract void importString(JComponent c, String str);
protected abstract void cleanup(JComponent c, boolean remove);
protected Transferable createTransferable(JComponent c) {
return new StringSelection(exportString(c));
}
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
public boolean importData(JComponent c, Transferable t) {
if (canImport(c, t.getTransferDataFlavors())) {
try {
String str = (String) t.getTransferData(DataFlavor.stringFlavor);
importString(c, str);
return true;
} catch (UnsupportedFlavorException ufe) {
} catch (IOException ioe) {
}
}
return false;
}
protected void exportDone(JComponent c, Transferable data, int action) {
cleanup(c, action == MOVE);
}
public boolean canImport(JComponent c, DataFlavor[] flavors) {
for (int ndx = 0; ndx < flavors.length; ndx++) {
if (DataFlavor.stringFlavor.equals(flavors[ndx])) {
return true;
}
}
return false;
}
}
class TableTransferHandler extends StringTransferHandler {
public JTable target;
public int[] rows = null;
public int addIndex = -1; //the position where rows are inserted
public int addCount = 0; //number of inserted rows
protected String exportString(JComponent c) {
JTable table = (JTable) c;
rows = table.getSelectedRows();
int colCount = table.getColumnCount();
StringBuffer buff = new StringBuffer();
for (int ndx = 0; ndx < rows.length; ndx++) {
for (int j = 0; j < colCount; j++) {
Object val = table.getValueAt(rows[0], j);
buff.append(val == null ? "" : val.toString());
if (j != colCount - 1) {
buff.append(",");
}
}
if (ndx != rows.length - 1) {
buff.append("\n");
}
}
return buff.toString();
}
protected void importString(JComponent c, String str) {
target = (JTable) c;
DefaultTableModel model = (DefaultTableModel) target.getModel();
int index = target.getSelectedRow();
//The user is not allowed to drop data on itself.
//For example, when the user moves rows #4,#5,#6 and #7 and
//tries to insert them below the row #5, it would be
//problematic to remove the original rows.
//That's why we don't allow it:
if (rows != null && index >= rows[0] - 1 &&
index <= rows[rows.length - 1]) {
rows = null;
return;
}
int max = model.getRowCount();
if (index < 0) {
index = max;
} else {
index++;
if (index > max) {
index = max;
}
}
addIndex = index;
//System.out.println ("index = " +index);
String[] values = str.split("\n");
//System.out.println ("values = " +values[0] + " " + values[1]);
addCount = values.length;
//for (int ndx = 0; ndx < values.length; ndx++) {
// model.insertRow(index++, values[ndx].split(" "));
//}
model.insertRow(index++, values[0].split(" "));
model.insertRow(index++, values[1].split(" "));
//If we are moving rows within the same table, we must
//adapt the rows accordingly, as those below
//the insertion point are shifted.
if (rows != null && addCount > 0) {
for (int ndx = 0; ndx < rows.length; ndx++) {
if (rows[ndx] > addIndex) {
rows[ndx] += addCount;
}
}
}
}
protected void cleanup(JComponent c, boolean remove) {
JTable source = (JTable) c;
if (remove && rows != null) {
DefaultTableModel model =
(DefaultTableModel) source.getModel();
for (int ndx = rows.length - 1; ndx >= 0; ndx--) {
model.removeRow(rows[ndx]);
}
}
rows = null;
addCount = 0;
addIndex = -1;
}
danke euch.