|
|
思想:获取文件选择对话框中“文件名”显示栏的组件,设置组件不可编辑。
import java.awt.Component;import java.awt.Color;import javax.swing.*;/** * java文件选择对话框 * 文件名不可编辑 */public class JFileChooserUI { private static JLabel findLabel(JComponent comp, String s) { JLabel label = null; if (comp instanceof JLabel) { if (((JLabel) comp).getText().equals(s)) { label = (JLabel) comp; } } else if (comp instanceof JComponent) { Component[] comps = comp.getComponents(); for (int i = 0; i < comps.length; i++) { if (comps[i] instanceof JComponent) { label = findLabel((JComponent) comps[i], s); if (label != null) { break; } } } } return label; } public static Component getLabelForInChooser(JFileChooser chooser, String key) { java.util.Locale l = chooser.getLocale(); String s = UIManager.getString(key, l); javax.swing.plaf.FileChooserUI ui = chooser.getUI(); int count = ui.getAccessibleChildrenCount(chooser); for (int i = 0; i < count; i++) { javax.accessibility.Accessible a = ui.getAccessibleChild(chooser, i); JLabel label = findLabel((JComponent) a, s); if (label != null) { return label.getLabelFor(); } } return null; } public static void main(String[] args) { JFileChooser chooser = new JFileChooser(""); Component comp = getLabelForInChooser(chooser, "FileChooser.fileNameLabelText"); if (comp instanceof JTextField) { JTextField field = ((JTextField) comp); field.setEditable(false); // 随意 // field.setBackground(Color.WHITE); } chooser.showOpenDialog(null); }} |
|