tabloda farklı bir endekse bir satır sürüklemek için muktedir bir JTable kurulumları nasıl. Örneğin 5 satırım varsa ve 4. satırı 2. sıraya sürüklemek ister miyim?JTable'ta bir satırı nasıl sürükleyip bırakabilirim?
cevap
kontrol edin. Bunu, JTable
için nasıl uygulayacağınıza dair bazı örnekler vardır.
Kontrol dışarı BasicTableUI veya Transferable Arayüzü. Java Tutorialının drag and drop bölümünde dışarı
belki sth. Böyle:
table.addMouseMotionListener(new MouseMotionListener() {
public void mouseDragged(MouseEvent e) {
e.consume();
JComponent c = (JComponent) e.getSource();
TransferHandler handler = c.getTransferHandler();
handler.exportAsDrag(c, e, TransferHandler.MOVE);
}
public void mouseMoved(MouseEvent e) {
}
});
şu sağlayan bir tek sürüklenen satırın JTable yeniden sıralama:
public interface Reorderable {
public void reorder(int fromIndex, int toIndex);
}
:
table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.setTransferHandler(new TableRowTransferHandler(table));
Sizin TableModel yeniden sipariş için izin vermek için aşağıdaki uygulamalıdır Bu TransferHandler sınıf sürükle & damla kolları ve jest tamamlandığında çağrılar TableModel üzerinde() yeniden düzenlemek. Sadece kayıtları ve çoklu satır yeniden sipariş için
/**
* Handles drag & drop row reordering
*/
public class TableRowTransferHandler extends TransferHandler {
private final DataFlavor localObjectFlavor = new ActivationDataFlavor(Integer.class, "application/x-java-Integer;class=java.lang.Integer", "Integer Row Index");
private JTable table = null;
public TableRowTransferHandler(JTable table) {
this.table = table;
}
@Override
protected Transferable createTransferable(JComponent c) {
assert (c == table);
return new DataHandler(new Integer(table.getSelectedRow()), localObjectFlavor.getMimeType());
}
@Override
public boolean canImport(TransferHandler.TransferSupport info) {
boolean b = info.getComponent() == table && info.isDrop() && info.isDataFlavorSupported(localObjectFlavor);
table.setCursor(b ? DragSource.DefaultMoveDrop : DragSource.DefaultMoveNoDrop);
return b;
}
@Override
public int getSourceActions(JComponent c) {
return TransferHandler.COPY_OR_MOVE;
}
@Override
public boolean importData(TransferHandler.TransferSupport info) {
JTable target = (JTable) info.getComponent();
JTable.DropLocation dl = (JTable.DropLocation) info.getDropLocation();
int index = dl.getRow();
int max = table.getModel().getRowCount();
if (index < 0 || index > max)
index = max;
target.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
try {
Integer rowFrom = (Integer) info.getTransferable().getTransferData(localObjectFlavor);
if (rowFrom != -1 && rowFrom != index) {
((Reorderable)table.getModel()).reorder(rowFrom, index);
if (index > rowFrom)
index--;
target.getSelectionModel().addSelectionInterval(index, index);
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
protected void exportDone(JComponent c, Transferable t, int act) {
if ((act == TransferHandler.MOVE) || (act == TransferHandler.NONE)) {
table.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
}
"localObjectFlavor" ifadesini "özel son DataFlavor localObjectFlavor = yeni DataFlavor (Integer.class," Tamsayı Sıra Dizini ") olarak değiştirerek sabitlediğim aktarımda istisnalar alıyordum; – Koobz
+1 Ancak maalesef bu birden çok satır için çalışmayacak seçimi. – Stephan
+1 - birkaç basit değişiklik ve bu mükemmel çalışıyor! – pstanton
: yere
kullanım ....
Bu, yukarıdaki yanıtında ana sınıftırJTable table = t_objects;
table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.setTransferHandler(new TableRowTransferHandler(table));
, bunu maç için modifiye çoklu satır DnD için ihtiyaçlar. Tek yaptığım, seçilen ilk satırı kullanıp, açılan yerin üzerindeki satırları hesaplamak. Seçilen öğeleri kaldır ve onları bir nesne listesinde tut (satır dizisi nesnesi). sonra bunları hesaplanan satırlara geri yerleştirin. ve sonunda işlemi tamamlamak için kaldırılan/sürüklenen satırları seçin.
public class TableRowTransferHandler extends TransferHandler {
private final DataFlavor localObjectFlavor = new DataFlavor(Integer.class, "Integer Row Index");
private JTable table = null;
public TableRowTransferHandler(JTable table) {
this.table = table;
}
@Override
protected Transferable createTransferable(JComponent c) {
assert (c == table);
return new DataHandler(new Integer(table.getSelectedRow()), localObjectFlavor.getMimeType());
}
@Override
public boolean canImport(TransferHandler.TransferSupport info) {
boolean b = info.getComponent() == table && info.isDrop() && info.isDataFlavorSupported(localObjectFlavor);
table.setCursor(b ? DragSource.DefaultMoveDrop : DragSource.DefaultMoveNoDrop);
return b;
}
@Override
public int getSourceActions(JComponent c) {
return TransferHandler.COPY_OR_MOVE;
}
@Override
public boolean importData(TransferHandler.TransferSupport info) {
JTable target = (JTable) info.getComponent();
JTable.DropLocation dl = (JTable.DropLocation) info.getDropLocation();
int index = dl.getRow();
int max = table.getModel().getRowCount();
if (index < 0 || index > max) {
index = max;
}
target.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
try {
Integer rowFrom = (Integer) info.getTransferable().getTransferData(localObjectFlavor);
if (rowFrom != -1 && rowFrom != index) {
int[] rows = table.getSelectedRows();
int dist = 0;
for (int row : rows) {
if (index > row) {
dist++;
}
}
index -= dist;
//**TableUtil** is a simple class that just copy, remove and select rows.
ArrayList<Object> list = TableUtil.getSelectedList(table);
TableUtil.removeSelected(table);
ArrayList<Integer> sels = new ArrayList<Integer>();
for (Object obj : list) {
sels.add(index);
TableUtil.addRowAt(table, obj, index++);
}
TableUtil.selectMultipleRow(table, sels);
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
protected void exportDone(JComponent c, Transferable t, int act) {
if (act == TransferHandler.MOVE) {
table.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
}
- 1. Poltergeist'i kullanarak nasıl sürükleyip bırakabilirim?
- 2. Outlook'tan bir e-postayı bir .NET uygulamasına nasıl sürükleyip bırakabilirim?
- 3. Diğer görüntülü görüşmeler üzerinden birden çok görüntüyü sürükleyip bırakabilirim android
- 4. OpenLayers özellik seçimini nasıl alırım ve Javascript birlikte çalışıp sürükleyip bırakabilirim?
- 5. Bir div'i diğerine sürükleyip bırakın
- 6. Veritabanımdaki tüm tabloları nasıl bırakabilirim?
- 7. Scenekit - nasıl sürükleyebilir ve bırakabilirim
- 8. QWidget'i Maya'ya sürükleyip bırakın
- 9. Bir Dosyayı bir .sh dosyasına sürükleyip Bırakma
- 10. Tuval üzerinde çizilmiş bir daireyi sürükleyip taşıma
- 11. Öğeyi bir liste görünümünden sürükleyip dışarıdaki bir metne nasıl bırakabilirsiniz?
- 12. Kakao: Herhangi bir dosya türünü sürükleyip bırakın
- 13. Java, bir listedeki görüntüleri sürükleyip bırakabilir
- 14. Örneği sürükleyip bırakın?
- 15. Bulucudan WebView'a sürükleyip bırakın
- 16. metin kutusuna sürükleyip bırakma
- 17. React native'de nasıl sürükleyip bırakma eylemi oluşturabilirim?
- 18. WPF Datagrid'te düzenleme hücrelerini nasıl devre dışı bırakabilirim?
- 19. Twitter Bootstrap Modal Formu: Nasıl sürükleyip bırakılır?
- 20. Sürükleyip bırakılan dinamik kılavuz Bootstrap
- 21. Squirrel'de, bir satırı nasıl çoğaltabilirim?
- 22. ModalPopupExtender: Bir gönderiyi sürükleyip bıraktıktan sonra konumumu nasıl koruyabilirim?
- 23. Yalnızca tek bir sütun kullanarak jqgrid'den satırları sürükleyip bırakmak nasıl?
- 24. Boşlukları sürükleyip bırakın ve konum
- 25. _moz_resizing özelliğini nasıl devre dışı bırakabilirim?
- 26. Linux'ta Nagle'in algoritmasını nasıl devre dışı bırakabilirim?
- 27. XIA8'de Castalia'yı nasıl devre dışı bırakabilirim?
- 28. Tüm setTimeout olaylarını nasıl devre dışı bırakabilirim?
- 29. Windows anahtarı C# nasıl devre dışı bırakabilirim?
- 30. Tomcat önbelleğe almayı nasıl devre dışı bırakabilirim?
dışarı yardımcı olması için aşağıdaki cevapların hiçbirinde mü? – Ascalonian