먼저 문제를 해결하고 싶은 프로그램은 복잡하기 때문에이 드래그 앤 드롭 문제를 해결하기위한 샘플 프로그램을 작성하기로했습니다.JTable의 드래그 앤 드롭을 커스텀 JComponent에 구현하기
그래서 JTable을 사용하여 0에서 100까지의 정수로 채워진 프로그램을 작성했습니다. 두 번째 열에서는 단순히 column1 * 2가 표시됩니다. 이 테이블에는 DragEnabled가 있습니다.
동일한 JPanel
에는 행을 드래그 할 수있는 JTextArea
이 있습니다.
이제 드래그 앤 드롭 메커니즘을 직접 구현할 수 있다면 다른 응용 프로그램에서도 구현할 수있을만큼 프로세스를 이해할 수 있습니다.
제 문제는 어디에서 시작해야할지 모르겠다는 것입니다. 나는 웹에서 많은 것을 읽었지만 (공식 자바 자습서에서도) 나는 그것을 이해할 수 없었다. 제 질문은 다음과 같습니다 :
- 맞춤형
TransferHandler
클래스가 있어야합니까? DropTargetListener
및TransferHandler
인터페이스는 언제 구현합니까?
내 데이터를 "보내려면"어떤 방법을 사용해야하고 어떤 데이터를 "수신"할 수 있습니까?
편집
안녕 얘들 아
내가 먼저 사전에 내 코드를 게시하지 않았다 죄송합니다. 그것이 작동하지 않았기 때문에 나는 쓰레기라는 것을 알았지 만 여기서는 쓸모가 없다. 그러나 :
Heres는 내 코드 :
이import javax.swing.SwingUtilities;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Windows();
}
});
}
}
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class MyTable extends AbstractTableModel {
private ArrayList<TableData> data;
public MyTable(){
data = new ArrayList<>();
for (int i=0; i<100; i++){
data.add(new TableData());
}
}
public TableData getTableData(int index){
return data.get(index);
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public Object getValueAt(int arg0, int arg1) {
if (arg1 == 0){
return data.get(arg0).getValue();
}
return data.get(arg0).getDoubleValue();
}
}
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.TransferHandler;
import javax.swing.TransferHandler.TransferSupport;
public class MyTransferHandler extends TransferHandler {
public MyTransferHandler(){
super();
}
@Override
public int getSourceActions(JComponent c){
return COPY;
}
@Override
public Transferable createTransferable(JComponent c){
return null; //I have absolutely no idea how I could get the selected Row out of the JTable???
}
@Override
public void exportDone(JComponent c, Transferable t, int action){
}
public boolean canImport(TransferSupport t){
return true;
}
@Override
public boolean importData(TransferSupport t){
return true;
}
}
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
public class TableData implements Transferable{
public static DataFlavor FLAVOR = new DataFlavor(TableData.class, "TableData");
private static int history=0;
private int value;
private int doubleValue;
public TableData(){
value = history;
doubleValue = history*2;
history++;
}
public int getValue(){
return value;
}
public int getDoubleValue(){
return doubleValue;
}
@Override
public Object getTransferData(DataFlavor flavor){
return this;
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{FLAVOR};
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(FLAVOR);
}
}
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableModel;
public class Windows extends JFrame {
public Windows(){
JPanel panel = new JPanel();
panel.setLayout(new GridLayout());
JTable table = new JTable(new MyTable());
table.setDragEnabled(true);
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane);
JTextArea textArea = new JTextArea();
panel.add(textArea);
this.add(panel);
this.pack();
this.setVisible(true);
}
}
"이 끌어서 놓기 문제를 해결하기위한 샘플 프로그램을 작성하는 것이 좋습니다." 코드를 게시하는 것이 더 좋을 것입니다. – wchargin
@WChargin 예. 죄송합니다. 나는 내 잘못을 발견하고 소스 코드를 업로드했습니다. 누군가가 나를 이해하도록 도와 준다면 정말 행복 할거야. – Christian