행을 테이블의 다른 인덱스로 드래그 할 수 있도록 JTable을 설정하는 방법. 예를 들어 5 개의 행이 있고 4 번째 행을 2 번째 위치로 끌고 싶다면?JTable에서 행을 어떻게 끌어 놓을까요?
30
A
답변
4
Java 자습서의 drag and drop 섹션을 확인하십시오. JTable
에 대해이를 구현하는 방법에 대한 몇 가지 예가 있습니다.
0
BasicTableUI 또는 Transferable 인터페이스를 확인하십시오.
0
아마도 sth. 이 같은 :
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) {
}
});
55
다음 수있는 단일 끌고 행의 JTable의 재정렬 :
public interface Reorderable {
public void reorder(int fromIndex, int toIndex);
}
:
이table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.setTransferHandler(new TableRowTransferHandler(table));
귀하의 TableModel이 재 주문을 허용하려면 다음을 구현해야합니다 이 TransferHandler 클래스는 드래그 & 드롭을 처리하고 제스처가 완료되면 TableModel에서 reorder()를 호출합니다. 그냥 기록과 여러 행을 다시 주문에 대한
/**
* 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));
}
}
}
0
: 어딘가에
사용은 ....
이 위의 대답의 주요 클래스입니다JTable table = t_objects;
table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.setTransferHandler(new TableRowTransferHandler(table));
, 나는이 일치하도록 수정 다중 행 DnD에 대한 필요성. 내가 선택한 첫 번째 행을 사용하여 놓기 위의 행을 계산하는 것이 었습니다. 선별 된 항목을 제거하고 객체 목록에 보관합니다 (행 배열 객체). 계산 된 행에 다시 삽입하십시오. 마지막으로 제거/끌기 행을 선택하여 프로세스를 완료하십시오.
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. 어떻게 JTable에서 행을 숨길 수 있습니까?
- 2. JTable에서 행을 제거하는 방법은 무엇입니까?
- 3. 어떻게하면 jtable에서 행을 지정할 수 있습니까?
- 4. JTable에서 인덱스로 행 얻기
- 5. JTable에서 한 행만 편집 가능
- 6. JTable에서 행 페인팅
- 7. 그 멍청한 수평 점과 화살표를 어떻게 되돌려 놓을까요? =)
- 8. JTable에서 전체 데이터 행을 굵게 만드는 방법은 무엇입니까?
- 9. 값을 확인하는 방법은 JTable에서 고유합니까?
- 10. jTable에서 클릭 이벤트 - Java
- 11. JTable에서 숫자 정렬
- 12. 어디에 안드로이드를 스트리밍 할 비디오를 놓을까요?
- 13. 끌어 오기 - jQuery 사용
- 14. JTable에서 데이터 업데이트
- 15. JTable에서 열을 병합하기
- 16. JTable에서 정렬에서 열 제외
- 17. jtable에서 값 가져 오기
- 18. jtable에서 셀 경계를 제거합니다.
- 19. setValue가 Jtable에서 작동하지 않는 이유는 무엇입니까?
- 20. JTable에서 편집하는 동안 전체 행 잠그기
- 21. Windows에서 끌어 놓기 알림
- 22. 끌어 웹 페이지
- 23. JTable에서, 더티 마커가있는 체크 박스 열을 어떻게 렌더링합니까?
- 24. UITableView에서 행을 어떻게 삭제합니까?
- 25. GridView 행을 어떻게 삭제합니까?
- 26. 랜덤 행을 어떻게 검색합니까?
- 27. JTable에서 유니 코드 문자열 표시
- 28. JTable에서 단일 열 끌기 비활성화
- 29. JTable에서 셀 위에 툴팁 표시
- 30. JTable에서 열 이름이 업데이트되지 않습니다.
아래의 답변 중 도움이 되었습니까? – Ascalonian