Swing开发之JTextArea篇

 
JTextArea 是一个显示纯文本的多行区域。它作为一个轻量级组件,提供与 java.awt.TextArea 类的源兼容性,理应如此。有关使用所有文本组件的信息和示例,请参阅《The Java Tutorial》中 Using Text Components 一节。
此组件具有 java.awt.TextArea 类中没有的功能。有关其他功能,请参考超类。还有 JTextPane 和 JEditorPane 也是具有更多功能的多行文本类。
java.awt.TextArea 在内部处理滚动。JTextArea 的不同之处在于,它不管理滚动,但实现了 swing Scrollable 接口。这允许把它放置在 JScrollPane 的内部(如果需要滚动行为),或者直接使用(如果不需要滚动)。
java.awt.TextArea 具有换行能力。这由水平滚动策略来控制。由于滚动不是由 JTextArea 直接完成的,因此必须通过另一种方式来提供向后兼容性。JTextArea 具有用于换行的 bound 属性,该属性控制其是否换行。在默认情况下,换行属性设置为 false(不换行)。
java.awt.TextArea 具有两个属性 rows 和 columns,这两个属性用来确定首选大小。JTextArea 用这些属性来指示 viewport 的首选大小,此 viewport 被放置到 JScrollPane 中以匹配由 java.awt.TextArea 提供的功能。JTextArea 具有显示所有文本所需的首选大小,以便在 JScrollPane 内部正常工作。如果 rows 或 columns 的值等于 0,则沿该轴的首选大小将用于沿相同轴上 viewport 的首选大小。
JTextArea也具有跟JTextField一样的Document处理形式。

构造函数:
JTextArea()
          构造一个新的 TextArea。
JTextArea(Document doc)
          构造一个新的 JTextArea,使其具有给定的文档模型,所有其他参数均默认为 (null, 0, 0)。
JTextArea(Document doc, String text, int rows, int columns)
          构造具有指定行数和列数以及给定模型的新的 JTextArea。
JTextArea(int rows, int columns)
          构造具有指定行数和列数的新的空 TextArea。
JTextArea(String text)
          构造显示指定文本的新的 TextArea。
JTextArea(String text, int rows, int columns)
          构造具有指定文本、行数和列数的新的 TextArea。

常用方法:
insert(String str, int pos)
          将指定文本插入指定位置。
setColumns(int columns)
          设置此 TextArea 中的列数。
setFont(Font f)
          设置当前字体。
setLineWrap(boolean wrap)
          设置文本区的换行策略。如果设置为 true,则当行的长度大于所分配的宽度时,将换行。如果设置为 false,则始终不换行。当策略更改时,将激发 PropertyChange 事件("lineWrap")。此属性默认为 false。
setRows(int rows)
          设置此 TextArea 的行数。
setTabSize(int size)
          设置选项卡要扩大到的字符数。
setWrapStyleWord(boolean word)
          设置换行方式(如果文本区要换行)。如果设置为 true,则当行的长度大于所分配的宽度时,将在单词边界(空白)处换行。如果设置为 false,则将在字符边界处换行。此属性默认为 false。

例 1 :设置JTextArea背景图片
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.GrayFilter;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class BackgroundSample {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Background Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    final ImageIcon imageIcon = new ImageIcon("draft.gif");
    JTextArea textArea = new JTextArea() {
      Image image = imageIcon.getImage();

      Image grayImage = GrayFilter.createDisabledImage(image);
      {
        setOpaque(false);
      }

      public void paint(Graphics g) {
        g.drawImage(grayImage, 0, 0, this);
        super.paint(g);
      }
    };
    JScrollPane scrollPane = new JScrollPane(textArea);
    Container content = frame.getContentPane();
    content.add(scrollPane, BorderLayout.CENTER);
    frame.setSize(250, 250);
    frame.setVisible(true);
  }
}

例 2 :用JTextArea实现剪切 , 复制, 粘贴功能
import java.awt.BorderLayout;
import java.awt.Container;
import java.util.Hashtable;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.text.DefaultEditorKit;

public class CutPasteSample {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Cut/Paste Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container content = frame.getContentPane();

    JTextField textField = new JTextField();
    JTextArea textArea = new JTextArea();
    JScrollPane scrollPane = new JScrollPane(textArea);

    content.add(textField, BorderLayout.NORTH);
    content.add(scrollPane, BorderLayout.CENTER);

    Action actions[] = textField.getActions();

    Action cutAction = TextUtilities.findAction(actions,
        DefaultEditorKit.cutAction);
    Action copyAction = TextUtilities.findAction(actions,
        DefaultEditorKit.copyAction);
    Action pasteAction = TextUtilities.findAction(actions,
        DefaultEditorKit.pasteAction);

    JPanel panel = new JPanel();
    content.add(panel, BorderLayout.SOUTH);

    JButton cutButton = new JButton(cutAction);
    cutButton.setText("Cut");
    panel.add(cutButton);

    JButton copyButton = new JButton(copyAction);
    copyButton.setText("Copy");
    panel.add(copyButton);

    JButton pasteButton = new JButton(pasteAction);
    pasteButton.setText("Paste");
    panel.add(pasteButton);

    frame.setSize(250, 250);
    frame.setVisible(true);
  }
}

class TextUtilities {
  private TextUtilities() {
  }

  public static Action findAction(Action actions[], String key) {
    Hashtable commands = new Hashtable();
    for (int i = 0; i < actions.length; i++) {
      Action action = actions[i];
      commands.put(action.getValue(Action.NAME), action);
    }
    return (Action) commands.get(key);
  }
}


例 3 :处理JTextArea换行操作
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class TextAreaFrame extends JFrame implements ActionListener {

  private JButton insertButton = new JButton("Insert");

  private JButton wrapButton = new JButton("Wrap");

  private JButton noWrapButton = new JButton("No wrap");

  private JTextArea textArea = new JTextArea(8, 40);

  private JScrollPane scrollPane = new JScrollPane(textArea);

  public TextAreaFrame() {
    JPanel p = new JPanel();

    p.add(insertButton);
    insertButton.addActionListener(this);

    p.add(wrapButton);
    wrapButton.addActionListener(this);

    p.add(noWrapButton);
    noWrapButton.addActionListener(this);

    getContentPane().add(p, "South");

    getContentPane().add(scrollPane, "Center");

    setTitle("TextAreaTest");
    setSize(300, 300);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }

  public void actionPerformed(ActionEvent evt) {
    Object source = evt.getSource();
    if (source == insertButton)
      textArea
          .append("textArea The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.");
else if (source == wrapButton) {
  //常用方法有对两个方法介绍
      textArea.setWrapStyleWord(true);
      textArea.setLineWrap(true);
      scrollPane.validate();
    } else if (source == noWrapButton) {
      textArea.setLineWrap(false);
      textArea.setWrapStyleWord(false);
      scrollPane.validate();
    }
  }

  public static void main(String[] args) {
    JFrame f = new TextAreaFrame();
    f.show();
  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值