ITEEDU

swing的版面结构

版面管理器

事件处理

鼠标事件

键盘事件处理

窗口与面板的使用

JInternalFrame的使用(窗口与面板)

JTabbedPane,JScroolPane,JScrolBa的使用

标签与按钮的使用与介绍

[复选框、选项按钮、列表方框、下拉式列表的使用与介绍]

表格(Table)的使用与介绍

JTable的事件处理

1文字输入组件的使用与介绍

树(Tree)的使用与介绍

对话框(Option Pane与Dialog)的使用与介绍

菜单与工具栏的使用与介绍

文件选择对话框,颜色选择对话框,分隔线的使用与介绍.

Slider,Timer,Progress的使用

9-4:使用JTextArea组件:

JTextArea的类层次结构图:
       java.lang.Object
           --java.awt.Component
            --java.awt.Container
              --javax.swing.JCompontent
                --javax.swing.text.JTextComponent
                  --javax.swing.JTextArea

JTextArea继承JTextComponent为类,因此它也可以使用JTextComponent抽象类里面许多好用的方法,如compy(),paste(), setText(),isEditable()等等。我们在前面有提到JTextArea是一个多行的输入组件,在这个组件中可以利用Enter来做换行的操作 。

在使用JTextArea之前,我们先看看JTextArea有哪些构造函数可以使用:

JTextArea的构造函数:
  • JTextArea():建立一个新的JTextArea.
  • JTextArea(Document doc):使用指定的文件存储模式建立一个新的JTextArea.
  • JTextArea(Document doc,String text,int row ,int columns):使用指定的文件存储模式建立一个新的JTextArea并设置其初始 字符串和列、字段长度。
  • JTextArea(int row,int columns):建立一个新的JTextArea并设置其初始列、字段长度。
  • JTextArea(String text):建立一个新的JTextArea并设置其初始字符串.
  • JTextArea(String text,int row,int columns):建立一个新的JTextArea并设置其初始字符串和列、字段长度。

9-4-1:构造JTextArea组件:

我们可以发现到JTextArea的构造函数和JTextField及JPasswordField的构造函数是相同雷同,而JTextArea多了一个字段的参数 值是因为JTextArea是二维的输入组件,在构造时不仅要设置字段长度也要设置行数。我们来看下面这个范例:

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

public class JTextArea1 {
	public static void main(String[] args) {
		JFrame f = new JFrame("JTextArea1");
		Container contentPane = f.getContentPane();
		contentPane.setLayout(new BorderLayout());

		JPanel p1 = new JPanel();
		p1.setLayout(new GridBagLayout());
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.anchor = GridBagConstraints.WEST;
		gbc.insets = new Insets(2, 2, 2, 2);

		p1.setBorder(BorderFactory.createTitledBorder("构造一般的JTextArea"));
		JLabel l1 = new JLabel("一:");
		JLabel l2 = new JLabel("二:");
		JLabel l3 = new JLabel("三:");
		JLabel l4 = new JLabel("四:");

		JTextArea t1 = new JTextArea();
		JTextArea t2 = new JTextArea(2, 8);
		JTextArea t3 = new JTextArea("JTextArea3");
		JTextArea t4 = new JTextArea("JTextArea4", 5, 10);

		t1.setText("JTextArea1");// setText()方法会将原来的内容清除
		t2.append("JTextArea2");// append()方法会将设置的字符串接在原来JTextArea内容文字之后.
		t4.setLineWrap(true);// 设置换行

		gbc.gridy = 1;
		gbc.gridx = 0;
		p1.add(l1, gbc);
		gbc.gridx = 1;
		p1.add(t1, gbc);
		gbc.gridy = 2;
		gbc.gridx = 0;
		p1.add(l2, gbc);
		gbc.gridx = 1;
		p1.add(t2, gbc);
		gbc.gridy = 3;
		gbc.gridx = 0;
		p1.add(l3, gbc);
		gbc.gridx = 1;
		p1.add(t3, gbc);
		gbc.gridy = 4;
		gbc.gridx = 0;
		p1.add(l4, gbc);
		gbc.gridx = 1;
		p1.add(t4, gbc);
		contentPane.add(p1);
		f.pack();
		f.show();
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}
}

在JTextArea中我们可以使用setTabSize()方法设置[Tab]键的跳离距离,或是setFont()方法设置字体。当我们输入的文字超过 JTextArea的右边界及下边界时,会看不到接下来打的内容,那该怎么办呢?你可以使用JScrollPane使JTextArea具备滚动的能力, 或是搭配setLineWrap()方法就能让文字自动换行。JTextArea还提供一个setWrapStyleWord()方法,可以让换行的时候不会造成断 字的现象,这在Word或使用OutLook写信时都可以看到这个效果。例如我们在行尾中输入“自动换行”四个字,但此行最多只能在容 纳两个字,因此JTextArea会将此四个字均移到下一行,不会造成“自动”在上行,"换行"在下行的情形。这在处理英文输入上较为 重要,因为setWrapStyleWord()是利用空白当作是一个字输入的结果。我们来看下面的范例:

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

public class JTextArea2 {
	public static void main(String[] args) {
		JFrame f = new JFrame("JTextArea2");
		Container contentPane = f.getContentPane();
		contentPane.setLayout(new BorderLayout());

		JPanel p1 = new JPanel();
		p1.setLayout(new GridLayout(1, 1));
		p1.setBorder(BorderFactory
				.createTitledBorder("构造TextArea-使用GridLayout,加ScrollBar"));

		JTextArea t1 = new JTextArea(5, 25);
		t1.setTabSize(10);
		t1.setFont(new Font("标楷体", Font.BOLD, 16));
		t1.setLineWrap(true);// 激活自动换行功能
		t1.setWrapStyleWord(true);// 激活断行不断字功能

		p1.add(new JScrollPane(t1));// 将JTextArea放入JScrollPane中,这样就能利用滚动的效果看到输入超过JTextArea高度的
		// 文字.
		contentPane.add(p1);
		f.pack();
		f.show();
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}
}

我们再举一个例子,使JTextArea具有copy、paste、cut的功能:

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

public class JTextArea3 implements ActionListener {
	JTextArea textarea = null;
	JButton b1, b2, b3;

	public JTextArea3() {
		JFrame f = new JFrame("JTextArea3");
		Container contentPane = f.getContentPane();
		contentPane.setLayout(new BorderLayout());

		textarea = new JTextArea(10, 15);
		JScrollPane scrollPane = new JScrollPane(textarea);
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(1, 3));
		b1 = new JButton("Copy");
		b1.addActionListener(this);
		b2 = new JButton("Paste");
		b2.addActionListener(this);
		b3 = new JButton("Cut");
		b3.addActionListener(this);
		panel.add(b1);
		panel.add(b2);
		panel.add(b3);

		contentPane.add(scrollPane, BorderLayout.CENTER);
		contentPane.add(panel, BorderLayout.SOUTH);

		f.pack();
		f.show();
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	public static void main(String[] args) {
		new JTextArea3();
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == b1) {
			textarea.copy();
		}
		if (e.getSource() == b2) {
			textarea.paste();
		}
		if (e.getSource() == b3) {
			textarea.cut();
		}
	}
}