콤보 박스에 확장자가없는 파일 이름을 표시하는 방법은 무엇입니까?

단거리 선수

내 사용 사례는 다음과 같습니다. 열 때마다 새로 고쳐지는 디렉터리에서 필터링 된 파일 목록을 표시하는 콤보 상자를 원합니다. 또한 콤보 상자에 표시된 문자열이 디렉터리 나 확장명이없는 파일 이름이되기를 원합니다 (사용자에게 노출하고 싶지 않은 구현 세부 정보 임).

ComboBoxModel다음과 같이 구현했습니다 .

public class XMLComboModel extends DefaultComboBoxModel<Path> implements PopupMenuListener {

public static final String EXT = ".xml";
private final Path directory;

public XMLComboModel(String pathName) {
    this.directory = Paths.get(pathName);
    populateModel();
}

public Path getSelectedPath() {
    return (Path) getSelectedItem();
}

@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
    populateModel();
}

private void populateModel() {
    removeAllElements();
    try {
        Files.newDirectoryStream(directory, "*" + EXT).forEach(this::addElement);
        if (getSelectedPath() != null) {
            for (int i = 0; i < getSize(); i++) {
                if (getElementAt(i).compareTo(getSelectedPath()) == 0)
                    setSelectedItem(getElementAt(i));
            }
        }
    } catch (IOException ex) {
        LOG.log(Level.SEVERE, null, ex);
    }
}

PopupMenuListener명확성 위해 몇 가지 방법 을 생략했습니다.

이것은 내가 원하는 것이 아닌 콤보 상자에 전체 경로를 표시한다는 점을 제외하고는 잘 작동합니다. 경로 표시를 조정하는 가장 간단한 방법은 Renderer를 사용자 정의하는 것이라고 생각했습니다. 나는 이것을 시도했다.

comboBox.setRenderer(new BasicComboBoxRenderer() {
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index,
                boolean isSelected, boolean cellHasFocus) {
        Path path = (Path) value;
        String fileName = path.getFileName().toString().replace(EXT, "");
        Component component = super.getListCellRendererComponent(list, fileName, index,
                    isSelected, cellHasFocus);
        return component;
    }
});

불행히도 이것은 작동하지 않습니다. 그것은 호출 올바르게 잘린 파일 이름을 표시하지만, setSelectedItem함께 String보다는 Path의미가 있지만 모델의 경로와 일치하지 것이다 -.

내 옵션은 다음과 같습니다.

  • BasicComboBoxRenderer레이블의 텍스트를 제외하고 기능을 복제하는 나만의 사용자 정의 구성 요소를 작성 하십시오.
  • setSelectedItem모델에서 재정 의하여 주어진 파일 이름을 가진 경로를 찾습니다.

두 번째는 구현하기가 더 간단합니다.

@Override
public void setSelectedItem(Object item) {
    for (int i = 0; i < getSize(); i++) {
        if (super.getElementAt(i).equals(Paths.get(item.toString()))) {
            super.setSelectedItem(super.getElementAt(i));
            return;
        }
    }
}

그러나 이것은 내가 Path모델에서 통과 한 것을 감안할 때 꽤 투박한 것처럼 보입니다 Path. 이것을 달성하는 더 간단한 방법을 놓치고 있습니까?

Camickr

하지만 이제는 경로가 아닌 문자열로 setSelectedItem을 호출합니다.

렌더러는 콤보 상자 모델의 다른 방법과 관련이 없습니다.

메서드에 Path객체 를 전달 하려면 모델이 적절한 .NET Framework를 선택할 수 있도록 객체가 메서드를 구현 setSelectedItem(...)하는지 확인해야합니다 .Pathequals(...)Path

그런 다음 사용자 지정 렌더러를 만들어 표시 Path하려는 개체 의 모든 부분 을 표시합니다.

경로를 되 찾는 것이 좋을 것입니다.

모델에 Path 개체가 포함 된 경우 getSelectedItem()메서드는 Path 개체를 반환합니다. 경로로 캐스트하거나 getSelectedPath()방법을 사용해야합니다 .

따라서 DefaultComboBoxModel의 메서드를 재정의 할 필요가 없으며 메서드 만 추가하면 getSelectedPath()됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

콤보 상자에 파일 목록을 추가하는 방법은 무엇입니까?

분류에서Dev

WPF의 콤보 박스에서 확인 된 항목을 가져 오는 방법은 무엇입니까?

분류에서Dev

콤보 박스에서 새 값과 이전 값을 비교하는 방법은 무엇입니까?

분류에서Dev

콤보 박스 드롭 다운을 다른 콤보 박스에 해당하는 목록으로 변경하는 방법은 무엇입니까?

분류에서Dev

콤보 박스에 연결된 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

전체 경로에서 확장자없이 파일 이름을 추출하는 방법은 무엇입니까?

분류에서Dev

버터 나이프를 사용하여 콤보 박스에 바인딩하는 방법은 무엇입니까?

분류에서Dev

URL에서 XML 데이터를 가져 와서 콤보 박스로 파싱하는 방법은 무엇입니까? 씨#

분류에서Dev

조건이 확인 된 경우 셀에 콤보 상자를 표시하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

콤보 박스에 참조를 전달하는 방법은 무엇입니까?

분류에서Dev

Apache Velocity 템플릿 lang에서 확장자없이 파일 이름을 얻는 방법은 무엇입니까?

분류에서Dev

bash 터미널의 % f에서 확장자없이 파일 이름을 얻는 방법은 무엇입니까?

분류에서Dev

PyQt : 콤보 박스 항목을 확인 가능하도록 설정하는 방법은 무엇입니까?

분류에서Dev

타사 소프트웨어에서 콤보 박스 목록을 얻는 방법은 무엇입니까?

분류에서Dev

Mac OSX Finder에서 .txt 또는 .text 확장자가없는 프로그래밍 텍스트 파일을 미리 보는 방법은 무엇입니까?

분류에서Dev

테이블에 콤보 박스를 표시하는 방법 RSS

분류에서Dev

ExtJS6에서 포커스에 콤보 박스를 확장하는 방법은 무엇입니까?

분류에서Dev

콤보 박스가 함께 변경되는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

Excel에서 파일을 연 사람의 사용자 이름을 표시하는 방법은 무엇입니까?

분류에서Dev

이름에 공백이있는 파일을 한 행에 표시하는 방법은 무엇입니까?

분류에서Dev

.txt 파일 확장자없이 텍스트 파일을 나열하는 방법은 무엇입니까?

분류에서Dev

.txt 파일 확장자없이 텍스트 파일을 나열하는 방법은 무엇입니까?

분류에서Dev

드롭 다운에 표시된 wpf 콤보 박스의 첫 번째 항목을 가져 오는 방법은 무엇입니까?

분류에서Dev

삼바 이름에 콜론이있는 파일을 표시하는 방법은 무엇입니까?

분류에서Dev

SceneKit – 장면보기에 SCN 파일을 표시하는 방법은 무엇입니까?

분류에서Dev

VBA-콤보 상자 이름에서 문자열을 찾는 방법은 무엇입니까?

분류에서Dev

Matlab GUI : statictextbox에서 파일 이름을 문자열로 표시하는 방법은 무엇입니까?

분류에서Dev

데이터베이스의 테이블 이름을 콤보 박스로 가져 오는 방법은 무엇입니까?

분류에서Dev

HTML을 표시하는 온라인 .py 파일의 소스를 보는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    콤보 상자에 파일 목록을 추가하는 방법은 무엇입니까?

  2. 2

    WPF의 콤보 박스에서 확인 된 항목을 가져 오는 방법은 무엇입니까?

  3. 3

    콤보 박스에서 새 값과 이전 값을 비교하는 방법은 무엇입니까?

  4. 4

    콤보 박스 드롭 다운을 다른 콤보 박스에 해당하는 목록으로 변경하는 방법은 무엇입니까?

  5. 5

    콤보 박스에 연결된 속성을 추가하는 방법은 무엇입니까?

  6. 6

    전체 경로에서 확장자없이 파일 이름을 추출하는 방법은 무엇입니까?

  7. 7

    버터 나이프를 사용하여 콤보 박스에 바인딩하는 방법은 무엇입니까?

  8. 8

    URL에서 XML 데이터를 가져 와서 콤보 박스로 파싱하는 방법은 무엇입니까? 씨#

  9. 9

    조건이 확인 된 경우 셀에 콤보 상자를 표시하는 가장 좋은 방법은 무엇입니까?

  10. 10

    콤보 박스에 참조를 전달하는 방법은 무엇입니까?

  11. 11

    Apache Velocity 템플릿 lang에서 확장자없이 파일 이름을 얻는 방법은 무엇입니까?

  12. 12

    bash 터미널의 % f에서 확장자없이 파일 이름을 얻는 방법은 무엇입니까?

  13. 13

    PyQt : 콤보 박스 항목을 확인 가능하도록 설정하는 방법은 무엇입니까?

  14. 14

    타사 소프트웨어에서 콤보 박스 목록을 얻는 방법은 무엇입니까?

  15. 15

    Mac OSX Finder에서 .txt 또는 .text 확장자가없는 프로그래밍 텍스트 파일을 미리 보는 방법은 무엇입니까?

  16. 16

    테이블에 콤보 박스를 표시하는 방법 RSS

  17. 17

    ExtJS6에서 포커스에 콤보 박스를 확장하는 방법은 무엇입니까?

  18. 18

    콤보 박스가 함께 변경되는 것을 방지하는 방법은 무엇입니까?

  19. 19

    Excel에서 파일을 연 사람의 사용자 이름을 표시하는 방법은 무엇입니까?

  20. 20

    이름에 공백이있는 파일을 한 행에 표시하는 방법은 무엇입니까?

  21. 21

    .txt 파일 확장자없이 텍스트 파일을 나열하는 방법은 무엇입니까?

  22. 22

    .txt 파일 확장자없이 텍스트 파일을 나열하는 방법은 무엇입니까?

  23. 23

    드롭 다운에 표시된 wpf 콤보 박스의 첫 번째 항목을 가져 오는 방법은 무엇입니까?

  24. 24

    삼바 이름에 콜론이있는 파일을 표시하는 방법은 무엇입니까?

  25. 25

    SceneKit – 장면보기에 SCN 파일을 표시하는 방법은 무엇입니까?

  26. 26

    VBA-콤보 상자 이름에서 문자열을 찾는 방법은 무엇입니까?

  27. 27

    Matlab GUI : statictextbox에서 파일 이름을 문자열로 표시하는 방법은 무엇입니까?

  28. 28

    데이터베이스의 테이블 이름을 콤보 박스로 가져 오는 방법은 무엇입니까?

  29. 29

    HTML을 표시하는 온라인 .py 파일의 소스를 보는 방법은 무엇입니까?

뜨겁다태그

보관