this questionを使用して、JTextFieldへのファイルのドラッグアンドドロップを処理する以下のクラスを作成しました。アプリケーションのポイントは、ファイルをテキストフィールドにドラッグして、テキストフィールドのテキストをファイルのパスに設定できるようにすることです(コード内の目標をはっきりと見ることができます)。JavaへのファイルのドラッグアンドドロップSwing JTextField
私の問題は以下のコードがコンパイルされないことです。コンパイルエラーの内容はCannot refer to non-final variable myPanel inside an inner class defined in a different method
です。私は内部クラスではあまり働いていないので、エラーを解決してコードが設計どおりに動作するようにする方法を私に見せてもらえますか?
コード:エラーメッセージとして
import java.awt.datatransfer.DataFlavor;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDropEvent;
import java.io.File;
import java.util.List;
import javax.swing.*;
public class Test {
public static void main(String[] args) {
JTextArea myPanel = new JTextArea();
myPanel.setDropTarget(new DropTarget() {
public synchronized void drop(DropTargetDropEvent evt) {
try {
evt.acceptDrop(DnDConstants.ACTION_COPY);
List<File> droppedFiles = (List<File>) evt
.getTransferable().getTransferData(
DataFlavor.javaFileListFlavor);
for (File file : droppedFiles) {
/*
* NOTE:
* When I change this to a println,
* it prints the correct path
*/
myPanel.setText(file.getAbsolutePath());
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
JFrame frame = new JFrame();
frame.add(myPanel);
frame.setVisible(true);
}
}
ありがとうございます!それを固定した最終的に宣言されている場合でも、テキストフィールドのプロパティを変更することはできますか(たとえば、内部のテキストを変更しますか?) – ewok
@ewok:はい。 'final'が変数に対して行うのは、初期化された後で別の値/参照を割り当てないことだけです。 – unholysampler