首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Swing 文字元件完整指南:JTextField、JPasswordField、JTextArea 實戰

     編輯:Java 相關知識

前言

Swing 提供三大核心文字元件:單行輸入 JTextField、密碼輸入 JPasswordField、多行文字區 JTextArea。本文系統整理建構子、常用方法、事件處理、捲動面板整合、登入表單與文字編輯器實戰範例。

JTextField / JPasswordField

常用建構子

建構子說明
JTextField()空白、欄寬 0
JTextField(int columns)指定欄寬 (字元數)
JTextField(String text)預設文字
JTextField(String text, int columns)預設文字 + 欄寬

JPasswordField 繼承 JTextField,差別在於:getPassword() 回傳 char[] (安全)、setEchoChar('*') 設定遮罩字元。

核心方法

  • setText/getText:設定/取得文字 (JPasswordField 用 getPassword())。
  • setEditable(false):唯讀模式。
  • setColumns(int):調整顯示寬度。
  • addActionListener:Enter 鍵觸發動作事件。
  • requestFocus():程式化聚焦。

JTextArea 多行文字區

常用建構子

建構子說明
JTextArea()空白
JTextArea(String text)預設文字
JTextArea(int rows, int cols)指定行/列數 (建議尺寸)
JTextArea(String text, int rows, int cols)全指定

關鍵設定

JTextArea area = new JTextArea(10, 30);
area.setLineWrap(true);           // 自動換行
area.setWrapStyleWord(true);      // 整詞換行 (不斷字)
area.setTabSize(4);               // Tab 寬度
area.setFont(new Font("微軟正黑體", Font.PLAIN, 16));
area.setBackground(Color.WHITE);

必須包裹 JScrollPane

JScrollPane scroll = new JScrollPane(area,
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
container.add(scroll, BorderLayout.CENTER);

否則文字超出可視區無法捲動。

實戰一:登入表單 (JTextField + JPasswordField)

public class LoginForm extends JFrame {
    private JTextField tfUser = new JTextField(15);
    private JPasswordField pfPass = new JPasswordField(15);
    private JLabel lblMsg = new JLabel(" ");
    
    public LoginForm() {
        setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.insets = new Insets(5,5,5,5);
        c.anchor = GridBagConstraints.WEST;
        
        addRow("帳號:", tfUser, 0);
        addRow("密碼:", pfPass, 1);
        
        JPanel btnPanel = new JPanel();
        JButton btnLogin = new JButton("登入");
        JButton btnReset = new JButton("重置");
        btnPanel.add(btnLogin); btnPanel.add(btnReset);
        
        c.gridx = 0; c.gridy = 2; c.gridwidth = 2;
        add(btnPanel, c);
        
        c.gridy = 3; c.gridwidth = 2;
        add(lblMsg, c);
        
        btnLogin.addActionListener(e -> doLogin());
        btnReset.addActionListener(e -> { tfUser.setText(""); pfPass.setText(""); lblMsg.setText(" "); tfUser.requestFocus(); });
        
        pack(); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    private void addRow(String label, JComponent field, int row) {
        GridBagConstraints c = new GridBagConstraints();
        c.gridx = 0; c.gridy = row; add(new JLabel(label), c);
        c.gridx = 1; add(field, c);
    }
    
    private void doLogin() {
        String user = tfUser.getText().trim();
        char[] pass = pfPass.getPassword();
        if ("admin".equals(user) && Arrays.equals("123456".toCharArray(), pass)) {
            lblMsg.setText("登入成功!");
        } else {
            lblMsg.setText("帳號或密碼錯誤");
        }
        Arrays.fill(pass, ' ');  // 清除記憶體殘留
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new LoginForm().setVisible(true));
    }
}

實戰二:迷你文字編輯器 (JTextArea + 工具列)

public class MiniEditor extends JFrame {
    private JTextArea area = new JTextArea(20, 60);
    
    public MiniEditor() {
        area.setLineWrap(true);
        area.setWrapStyleWord(true);
        area.setFont(new Font("Monospaced", Font.PLAIN, 14));
        
        JScrollPane scroll = new JScrollPane(area);
        add(scroll, BorderLayout.CENTER);
        
        JToolBar bar = new JToolBar();
        bar.add(new AbstractAction("剪下") { public void actionPerformed(ActionEvent e) { area.cut(); }});
        bar.add(new AbstractAction("複製") { public void actionPerformed(ActionEvent e) { area.copy(); }});
        bar.add(new AbstractAction("貼上") { public void actionPerformed(ActionEvent e) { area.paste(); }});
        bar.addSeparator();
        bar.add(new AbstractAction("全選") { public void actionPerformed(ActionEvent e) { area.selectAll(); }});
        add(bar, BorderLayout.NORTH);
        
        pack(); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new MiniEditor().setVisible(true));
    }
}

進階技巧

  • 文件監聽:area.getDocument().addDocumentListener(...) 即時統計字數、啟用/禁用儲存按鈕。
  • 語法高亮:需自訂 DocumentFilter 或使用 RSyntaxTextArea 等第三方庫。
  • 大量文字效能:DefaultStyledDocument + 分頁載入,避免一次載入巨大檔案導致 UI 凍結。

總結

掌握三大文字元件的建構細節、事件模型、捲動整合與安全處理 (密碼 char[]),即可打造從簡單表單到功能完整編輯器的各類文字介面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved