반응형
SWT - Tree + Map
윈도우의 아무런 특정 파일 경로를 설정하고
특정 파일 아래에 있는 하위 폴더, 파일 들을 SWT의 Tree로 뿌리는 소스이다.
자료구조인 Map을 사용해서 SWT의 Tree, TreeItem으로 File Directory를 출력하는 프로그램이다.
트리구조이기 때문에 parent, child 구조 인 것을 감안하고 분석해보면
그렇게까지 어렵지는 않다.
소스 코드
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class SWTTreeToMap {
private static Map<String, TreeItem> nodes = new HashMap<>();
private static Map<TreeItem, List<String>> children = new HashMap<>();
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Tree tree = new Tree(shell, SWT.BORDER);
Path path = FileSystems.getDefault().getPath("C:\\DevelopTool\\Photon-Hibernate\\eclipse-rcp-photon-R-win32-x86_64\\eclipse", new String[] {});
try {
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
TreeItem parent = nodes.get(dir.getParent().toString()); // 부모를 넣는다.
TreeItem item = null;
if (parent == null) {
item = new TreeItem(tree, SWT.NONE);
} else {
item = new TreeItem(parent, SWT.NONE);
}
item.setText(dir.getFileName().toString());
nodes.put(dir.toString(), item); // 자신을 넣는다.
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path dir, BasicFileAttributes attrs) {
TreeItem parent = nodes.get(dir.getParent().toString()); // TreeItem에 상위 폴더를 세팅(TreeItem 반환)
if (children.get(parent) == null) // Treeitem(parent)이 null이면
children.put(parent, new ArrayList<String>()); // 새로 생성
children.get(parent).add(dir.getFileName().toString());
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
e.printStackTrace();
}
for (TreeItem parent : children.keySet()) {
for (String child : children.get(parent)) {
TreeItem item = new TreeItem(parent, SWT.NONE);
item.setText(child);
}
}
tree.layout();
nodes = null;
children = null;
shell.setSize(400, 400);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
반응형
'Java > 순수 Java' 카테고리의 다른 글
[Java] Java Bean이란? (0) | 2020.03.16 |
---|---|
[Java] Eclipse 이클립스 크롬 연동하기(Web Browser 연동) (0) | 2020.03.13 |
[Java] SWT Tree 사용 예제 (0) | 2020.03.12 |
[Java] Reflection (0) | 2020.03.06 |
[Java] Apache log4j .properties 생성 및 오류 해결 방법 (0) | 2020.03.06 |