정중하게 동의하지 않습니다. 거기에 은이며, 특히 JFileChooser를 사용하여 항상 성공적으로 사용하며, 특히 DOS와 Mac 모두에서 저주받은 짐승을 만들 수 있습니다. 웹에는 수많은 예제가 있습니다. 제 작업 애플릿에서 추려낸 또 하나가 있습니다. 이 스 니펫은 모든 구성 요소의 배경색도 설정합니다.
짧은 설명 : 원본 포스터가 올바른 경로에 있었으므로 JFileChooser.getComponents()를 반복합니다. 그들은 구성 요소를 쉽게 식별 할 수 없으므로 텍스트 레이블을 찾고 원하는 조상을 얻습니다. 그런 다음 Container.getLayout(). remove (구성 요소)를 사용하여 레이아웃에서 제거하거나, 또는 Visible (false)을 설정하거나, 때때로 PreferredSize (새 치수 (0,0))를 설정하여 제거 할 수 있습니다.
// in wrapper:
modifyJChooser(fileChooser.getComponents(), Color.white);
// in component:
private void modifyJChooser(Component[] jc, Color bg) {
for (int i = 0; i < jc.length; i++) {
Component c = jc[i];
// hide file name selection
if (c.getClass().getSimpleName().equals("MetalFileChooserUI$3")) {
c.getParent().setVisible(false);
}
if (c instanceof JComboBox) {
Object sel = ((JComboBox) c).getSelectedItem();
if (sel.toString().contains("AcceptAllFileFilter")) {
c.setVisible(false);
}
} else if (c instanceof JLabel) {
// **** This is the part that the original poster is looking for ****
String text = ((JLabel) c).getText();
if (text.equals("Files of Type:") || text.equals("File Name:") || text.equals("Folder Name:")) {
c.getParent().getParent().remove(c.getParent());
}
} else if (c instanceof JButton) {
JButton j = (JButton) c;
String txt = j.getText();
if (txt != null) {
if (JCHOOSER_NEW_FOLDER.equalsIgnoreCase(txt)) {
j.getParent().setVisible(false); // Disable New Folder on Mac OS
} else if (JCHOOSER_BTN_CANCEL.equalsIgnoreCase(txt)) {
Component parent = c.getParent();
((Container) parent).remove(c);
}
}
}
if (c instanceof Container)
modifyJChooser(((Container) c).getComponents(), bg);
c.setBackground(bg);
}
}
주의 할이 제거 된 구성 요소를 한 번에 거주 간격을 조금 남긴다. 나는 그것의 근원을 확인할 수 없었다; 아무도 단서가 있다면 게시하십시오.
결과는 다음과 같습니다 (코드 스 니펫에 표시되지 않은 다른 수정 사항을 참고하십시오).
당신이 좋은 관행을 완전히 위반하고 있기 때문에 "나는 할 수있다.하지만 그렇게해서는 안된다"고 충고 할 것입니다. – DJClayworth