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

Java Swing 文本框與文本區輸入輸出完整指南

     編輯:Java 相關知識

組件選擇指南

特性JTextField (文本框)JTextArea (文本區)
行數單行多行
預設觸發事件Enter 鍵觸發 ActionEvent無預設事件,需搭配按鈕
常用場景搜尋框、表單單行輸入日誌顯示、多行編輯、程式碼輸入
捲動支援不需需包裹於 JScrollPane

核心 API 快速查閱

JTextField

  • getText() / setText(String):取得/設定內容
  • setEditable(false):設為唯讀
  • setHorizontalAlignment(JTextField.CENTER):置中對齊
  • addActionListener(ActionListener):監聽 Enter 確認

JTextArea

  • append(String):尾部追加(高效,不重繪全文)
  • insert(String, int) / replaceRange(String, int, int):插入/取代指定位置
  • setLineWrap(true) / setWrapStyleWord(true):自動換行與單字換行
  • new JScrollPane(textArea):加入捲動條

實戰範例 1:簡易加總器

使用者在文本區輸入整數(空白/換行分隔),點擊按鈕計算總和顯示於文本框。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.StringTokenizer;

public class SumCalculator extends JFrame implements ActionListener {
    private JTextArea inputArea;
    private JTextField resultField;
    private JButton btnSum, btnClear;

    public SumCalculator() {
        setTitle("整數加總器");
        setLayout(new BorderLayout(5,5));
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        inputArea = new JTextArea(5, 20);
        inputArea.setLineWrap(true);
        add(new JScrollPane(inputArea), BorderLayout.CENTER);

        JPanel bottom = new JPanel(new FlowLayout(FlowLayout.LEFT));
        resultField = new JTextField(15);
        resultField.setEditable(false);
        btnSum = new JButton("計算總和");
        btnClear = new JButton("清除");
        btnSum.addActionListener(this);
        btnClear.addActionListener(this);
        bottom.add(new JLabel("總和:"));
        bottom.add(resultField);
        bottom.add(btnSum);
        bottom.add(btnClear);
        add(bottom, BorderLayout.SOUTH);

        pack();
        setLocationRelativeTo(null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btnSum) {
            String text = inputArea.getText();
            StringTokenizer st = new StringTokenizer(text); // 預設分隔:空白、換行、Tab
            int sum = 0;
            while (st.hasMoreTokens()) {
                try {
                    sum += Integer.parseInt(st.nextToken());
                } catch (NumberFormatException ex) {
                    // 忽略非整數
                }
            }
            resultField.setText(String.valueOf(sum));
        } else if (e.getSource() == btnClear) {
            inputArea.setText("");
            resultField.setText("");
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new SumCalculator().setVisible(true));
    }
}

實戰範例 2:倍數查找器(GridLayout 佈局示範)

輸入起始、結束值與因子,列出範圍內所有倍數。

// 關鍵佈局片段
JPanel panel1 = new JPanel(new GridLayout(1, 6));
panel1.add(new JLabel("起始數", JLabel.RIGHT)); panel1.add(startField);
panel1.add(new JLabel("結束數", JLabel.RIGHT)); panel1.add(endField);
panel1.add(new JLabel("因子", JLabel.RIGHT)); panel1.add(factorField);

JPanel panel2 = new JPanel(new GridLayout(1, 4));
panel2.add(new JLabel("計算結果:", JLabel.RIGHT));
panel2.add(new JScrollPane(resultArea));
panel2.add(new JLabel()); // 佔位
panel2.add(btnCompute);

Container cp = getContentPane();
cp.setLayout(new GridLayout(3, 1));
cp.add(new JLabel("倍數查找器", JLabel.CENTER));
cp.add(panel1);
cp.add(panel2);

密碼框 JPasswordField

繼承自 JTextField,差別在於:

  • getPassword() 回傳 char[] 而非 String,使用後應手動清空陣列(Arrays.fill),降低記憶體殘留風險。
  • setEchoChar('*') 設定遮罩字元(預設即為 *)。

總結

掌握 JTextField 與 JTextArea 的差異、事件模型與常用 API,是建立友善 Swing 介面的基礎。善用 JScrollPane、Document 過濾器與格式化文本框(JFormattedTextField)可進一步提升使用者體驗。

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