<转载>获取JFileChooser中JTextField

本文介绍了一种在Java Swing应用程序中查找特定JLabel的方法,并演示了如何使用该方法来定位文件选择器中的文件名文本字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	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; 
	    } 

 获取JTextFiled

JFileChooser chooser = new JFileChooser(""); 
        Component comp = getLabelForInChooser(chooser, "FileChooser.fileNameLabelText"); 
        if (comp instanceof JTextField) { 
            JTextField field = ((JTextField)comp);
            field.setText(fileName);
        } 

 

 

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import java.util.*; import java.util.regex.*; public class WebCrawlerApp extends JFrame { // 界面组件 private JTextField urlField = new JTextField(40); private JTextArea resultArea = new JTextArea(20, 60); private JButton fetchBtn = new JButton("抓取网页"); private JButton batchBtn = new JButton("批量处理"); private JButton saveSensitiveBtn = new JButton("保存敏感词"); // 数据存储 private Set<String> visitedUrls = new HashSet<>(); private Set<String> sensitiveWords = new HashSet<>(); private Set<String> foundEmails = new HashSet<>(); private Map<String, Set<String>> sensitiveRecords = new HashMap<>(); public WebCrawlerApp() { super("简易网页爬虫"); setupUI(); loadSensitiveWords("sensitive_words.txt"); } private void setupUI() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); // 主布局 JPanel mainPanel = new JPanel(new BorderLayout(10, 10)); // 顶部输入区域 JPanel topPanel = new JPanel(); topPanel.add(new JLabel("网址:")); topPanel.add(urlField); topPanel.add(fetchBtn); topPanel.add(batchBtn); topPanel.add(saveSensitiveBtn); // 结果区域 JScrollPane scrollPane = new JScrollPane(resultArea); resultArea.setEditable(false); // 事件监听 fetchBtn.addActionListener(e -> fetchSingleUrl()); batchBtn.addActionListener(e -> batchProcess()); saveSensitiveBtn.addActionListener(e -> saveSensitiveRecords()); mainPanel.add(topPanel, BorderLayout.NORTH); mainPanel.add(scrollPane, BorderLayout.CENTER); add(mainPanel); } // ================= 核心功能实现 ================= private void fetchSingleUrl() { String url = urlField.getText().trim(); if (url.isEmpty()) return; processUrl(url); } private void batchProcess() { JFileChooser chooser = new JFileChooser(); if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); try (BufferedReader reader = new BufferedReader(new FileReader(file))) { String url; while ((url = reader.readLine()) != null) { urlField.setText(url); processUrl(url); } } catch (Exception e) { resultArea.append("\n批量处理错误: " + e.getMessage()); } } } private void processUrl(String urlStr) { try { // 避免重复爬取 if (visitedUrls.contains(urlStr)) { resultArea.append("\n[跳过] 已访问URL: " + urlStr); return; } visitedUrls.add(urlStr); // 处理相对地址 URL baseUrl = new URL(urlStr); URLConnection conn = baseUrl.openConnection(); conn.setRequestProperty("User-Agent", "Mozilla/5.0"); conn.setConnectTimeout(5000); // 猜测编码 String charset = "UTF-8"; String contentType = conn.getContentType(); if (contentType != null) { for (String param : contentType.replace(" ", "").split(";")) { if (param.startsWith("charset=")) { charset = param.split("=")[1]; break; } } } // 读取内容 StringBuilder content = new StringBuilder(); try (BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream(), charset))) { String line; while ((line = reader.readLine()) != null) { content.append(line).append("\n"); } } // 验证HTML内容 if (!content.toString().toLowerCase().contains("<html")) { resultArea.append("\n[警告] 非HTML内容: " + urlStr); return; } // 提取纯文本和敏感词 String plainText = extractPlainText(content.toString()); Set<String> detectedWords = detectSensitiveWords(plainText); sensitiveRecords.put(urlStr, detectedWords); // 提取Email extractEmails(content.toString()); // 显示结果 resultArea.append("\n\n===== 抓取结果 =====\n"); resultArea.append("URL: " + urlStr + "\n"); resultArea.append("编码: " + charset + "\n"); resultArea.append("敏感词: " + detectedWords.size() + "个\n"); resultArea.append("发现Email: " + foundEmails.size() + "个"); } catch (Exception e) { resultArea.append("\n[错误] " + e.getMessage()); } } // ================= 数据处理方法 ================= private String extractPlainText(String html) { // 简易HTML标签去除 return html.replaceAll("<[^>]+>", " "); } private Set<String> detectSensitiveWords(String text) { Set<String> detected = new HashSet<>(); for (String word : sensitiveWords) { if (text.toLowerCase().contains(word.toLowerCase())) { detected.add(word); } } return detected; } private void extractEmails(String content) { Pattern pattern = Pattern.compile("\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b"); Matcher matcher = pattern.matcher(content); while (matcher.find()) { foundEmails.add(matcher.group()); } } private void loadSensitiveWords(String filename) { try (BufferedReader reader = new BufferedReader(new FileReader(filename))) { String line; while ((line = reader.readLine()) != null) { sensitiveWords.add(line.trim().toLowerCase()); } resultArea.append("已加载敏感词: " + sensitiveWords.size() + "个"); } catch (Exception e) { resultArea.append("敏感词库加载失败: " + e.getMessage()); } } private void saveSensitiveRecords() { try (PrintWriter writer = new PrintWriter("sensitive_records.txt")) { for (Map.Entry<String, Set<String>> entry : sensitiveRecords.entrySet()) { writer.println("URL: " + entry.getKey()); writer.println("敏感词: " + String.join(", ", entry.getValue())); writer.println("----------------------"); } resultArea.append("\n敏感词记录已保存到 sensitive_records.txt"); } catch (Exception e) { resultArea.append("\n保存失败: " + e.getMessage()); } } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { WebCrawlerApp app = new WebCrawlerApp(); app.setVisible(true); }); } } 帮我优化这段代码
06-08
package com.student.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.student.entity.Student; import com.student.util.DBUtil; public class StudentDAO { // 插入学生 public void insertStudent(Student student) { String sql = "INSERT INTO students (sid, name, age, score) VALUES (?, ?, ?, ?)"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, student.getSid()); pstmt.setString(2, student.getName()); pstmt.setInt(3, student.getAge()); pstmt.setDouble(4, student.getScore()); pstmt.executeUpdate(); } catch (SQLException e) { System.err.println("插入学生信息时出现错误: " + e.getMessage()); } } // 获取所有学生 public List<Student> getAllStudents() { List<Student> students = new ArrayList<>(); String sql = "SELECT * FROM students"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery()) { while (rs.next()) { students.add(extractStudentFromResultSet(rs)); } } catch (SQLException e) { e.printStackTrace(); } return students; } // 删除学生(修改方法名) public void deleteStudent(String sid) { // 这里修改了方法名 String sql = "DELETE FROM students WHERE sid = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, sid); int rowsAffected = pstmt.executeUpdate(); if (rowsAffected == 0) { System.err.println("未找到学号为 " + sid + " 的学生"); } } catch (SQLException e) { e.printStackTrace(); } } // 更新学生信息 public void updateStudent(Student student) { String sql = "UPDATE students SET name = ?, age = ?, score = ? WHERE sid = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, student.getName()); pstmt.setInt(2, student.getAge()); pstmt.setDouble(3, student.getScore()); pstmt.setString(4, student.getSid()); int rowsAffected = pstmt.executeUpdate(); if (rowsAffected == 0) { System.err.println("未找到学号为 " + student.getSid() + " 的学生"); } } catch (SQLException e) { e.printStackTrace(); } } // 搜索学生 public List<Student> searchStudents(String keyword) { List<Student> students = new ArrayList<>(); String sql = "SELECT * FROM students WHERE sid LIKE ? OR name LIKE ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { String searchPattern = "%" + keyword + "%"; pstmt.setString(1, searchPattern); pstmt.setString(2, searchPattern); try (ResultSet rs = pstmt.executeQuery()) { while (rs.next()) { students.add(extractStudentFromResultSet(rs)); } } } catch (SQLException e) { e.printStackTrace(); } return students; } // 排序学生 public List<Student> getStudentsOrderBy(String field) { List<Student> students = new ArrayList<>(); String validField = validateSortField(field); String sql = "SELECT * FROM students ORDER BY " + validField; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery()) { while (rs.next()) { students.add(extractStudentFromResultSet(rs)); } } catch (SQLException e) { e.printStackTrace(); } return students; } // 根据ID获取学生 public Student getStudentById(String sid) { String sql = "SELECT * FROM students WHERE sid = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, sid); try (ResultSet rs = pstmt.executeQuery()) { if (rs.next()) { return extractStudentFromResultSet(rs); } } } catch (SQLException e) { e.printStackTrace(); } return null; } // 验证排序字段(防止SQL注入) private String validateSortField(String field) { String[] validFields = {"sid", "name", "age", "score"}; for (String valid : validFields) { if (valid.equalsIgnoreCase(field)) { return valid; } } return "sid"; // 默认值 } // 从ResultSet提取学生对象(复用代码) private Student extractStudentFromResultSet(ResultSet rs) throws SQLException { String sid = rs.getString("sid"); String name = rs.getString("name"); int age = rs.getInt("age"); double score = rs.getDouble("score"); return new Student(sid, name, age, score); } } 根据上面的给我一个可运行的完整代码
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值