`
luoweifu
  • 浏览: 63385 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JTextArea的多行整体左缩进与右缩进

 
阅读更多
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.text.BadLocationException;

public class Indentation extends JFrame implements KeyListener{
	public static final int WIDTH = 1000;
	public static final int HEIGHT = 700;
	JTextArea ta;
	
	public Indentation() {
		initialize();
	}
	
	public void initialize() {
		ta = new JTextArea();
		ta.addKeyListener(this);
		Container c = this.getContentPane();
		c.setLayout(new BorderLayout());
		c.add(ta, BorderLayout.CENTER);
		setBounds(100, 100, WIDTH, HEIGHT);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	public static void main(String args[]) {
		new Indentation();
	}

	public void keyPressed(KeyEvent e) {
		//在Eclipse中是通过Tab来实现的,但在JTextArea控件中按Tab键的时候是当作输入'\t'字符来处理的,所以换成Ctrl+Q快捷键来实现
		if(e.isControlDown() && KeyEvent.VK_Q == e.getKeyCode()) {
			//多行右整体缩进
			String text = ta.getText();
			int start = ta.getSelectionStart();
			int end = ta.getSelectionEnd();
			int startRow = 0;
			int endRow = 0;
			int n = 0; 
			try {
				startRow = ta.getLineOfOffset(start);
				endRow = ta.getLineOfOffset(end);
				//n = endRow - startRow;
				while(endRow >= startRow) {
					end = text.substring(0, end).lastIndexOf(10);
					ta.insert("\t",end+1);
					//ta.replaceRange("\t", end, end+1);
					endRow --;
				}
			} catch (BadLocationException e1) {
				e1.printStackTrace();
			}
		}else if(e.isShiftDown() && KeyEvent.VK_TAB == e.getKeyCode()) {
			//多行左整体取消缩进
			int start = ta.getSelectionStart();
			int end = ta.getSelectionEnd();
			int startRow = 0;
			int endRow = 0;
			int n = 0; 
			try {
				startRow = ta.getLineOfOffset(start);
				endRow = ta.getLineOfOffset(end);
				//n = endRow - startRow;
				while(endRow >= startRow) {
					end = ta.getText().substring(0, end).lastIndexOf(10);
					if(ta.getText().charAt(end+1) == '\t') {
						ta.replaceRange("", end+1, end+2);
					}
					endRow --;
				}
			} catch (BadLocationException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}	
		}
	}

	public void keyReleased(KeyEvent arg0) {		
	}

	public void keyTyped(KeyEvent arg0) {		
	}
}

分享到:
评论

相关推荐

    java_JTextArea_实现不可修改文本内容、右键菜单

    在Java Swing开发中,`JTextArea` 是一个非常常用的组件,用于显示或编辑多行文本。有时候,我们可能需要创建一个只读的文本区域或者为`JTextArea`添加额外的功能,比如右键菜单,来提高用户体验或实现特定的功能...

    JTextArea 实现行号

    在Java Swing库中,`JTextArea` 是一个用于显示和编辑多行文本的组件。有时候在编程时,我们可能需要为 `JTextArea` 添加行号功能,以方便用户阅读和编辑代码或者数据。这个功能可以通过自定义边框来实现,就像标题...

    重定向log4j日志到jtextarea

    而JTextArea是Swing组件库中的一个文本区域,常用于显示多行文本,用户可以读取但不能编辑。在某些情况下,我们可能希望将Log4j的日志输出直接重定向到JTextArea,以便于在GUI应用程序中实时查看日志信息。这在调试...

    java 使用JTextArea组件

    总结,`JTextArea`是Java GUI开发中用于处理多行文本的核心组件,具备丰富的功能,如设置文本、获取文本、文件操作、可编辑性控制、换行模式以及与`JScrollPane`的集成等。理解和熟练运用这些特性,可以帮助我们构建...

    设置多行显示与滚动条.rar

    在IT界,尤其是在软件开发和用户界面设计中,设置多行显示与滚动条是常见的需求。这涉及到文本处理、布局管理以及用户交互等多个方面。在本文中,我们将深入探讨这个主题,了解如何在不同的编程环境和应用中实现这一...

    改变JTextArea指定位置的背景色

    - `JTextArea`: 可编辑的多行文本区域。 - `JMenuBar`、`JMenu`、`JMenuItem`: 构建菜单栏及其下拉菜单。 - `ActionListener`: 处理菜单项点击事件。 - `Color`: Java内置的颜色类。 #### 2.2 实现方案 - 创建一个...

    Java弹出菜单,为JTextArea添加了右键弹出式菜单,实现了复制、粘贴、剪切

    今天,我们将学习如何使用 Java 弹出菜单来为 JTextArea 添加右键弹出式菜单,实现复制、粘贴、剪切功能。 一、Java 弹出菜单概述 Java 弹出菜单是一种 context-sensitive 菜单,即在用户点击右键时出现的菜单。它...

    JAVA初级编码——继承JDialog, 利用JTextArea显示文档中的内容

    将JTextArea与JDialog结合,用于显示文档内容,一般需要以下步骤: 1. 创建一个JTextArea实例,根据文档的长度设定合适的行列数。 2. 读取.txt文件的内容,可以使用java.io.BufferedReader或其他I/O流类来实现。 3. ...

    swing jtextArea滚动条和文字缩放效果

    swing jtextArea是Java Swing中的一种组件,用于显示多行文本。今天,我们将详细介绍swing jtextArea滚动条和文字缩放效果,并提供了相关的代码实例。 首先,让我们了解一下swing jtextArea的基本概念。swing ...

    java swing-JTextArea的使用

    JTextArea是Swing库提供的一个多行文本编辑框组件,可以用于在GUI应用程序中显示和编辑大段文本。

    Swing常用组件之多行文本区JTextArea

    在本节中,我们将深入探讨`JTextArea`的创建、配置以及与之相关的`JScrollPane`。 首先,`JTextArea`可以通过多种构造函数创建。最基础的构造函数是`JTextArea()`,它创建一个没有初始内容、默认行数和列数的文本...

    JScrollPane

    在JTextArea下添加滚动条以及JTextArea与TextArea的区别

    Java Swing JTextArea文本区域的实现示例

    Java Swing JTextArea 文本区域是 Java Swing 库中的一种基本组件,用于编辑多行文本。JTextArea 组件可以编辑多行文本,并提供了许多有用的方法来处理文本。 概述 JTextArea 是 javax.swing.JTextArea 的实例,...

    如何在整个数组列表的jtextarea中显示结果

    JTextArea是Java Swing提供的一种组件,它允许用户输入和查看多行文本。下面将详细解释如何在JTextArea中有效地显示数组列表中的所有数据。 首先,我们需要创建一个JTextArea实例。这可以通过调用`new JTextArea()`...

    java程序文件字符编码转换器

    JTextArea jTextArea = new JTextArea("转换器处理结果"); JButton startLogin = new JButton("开始转换"); JComboBox<String> jComboBoxsuffix ; //制定后缀 JComboBox<String> jComboBoxCharacter ; //制定...

    swing java

    JTextArea用于显示或编辑多行文本。由于内容可能超出视口,通常将其放入JScrollPane中,以便提供滚动功能。 **10. JPane中级容器** JPane是一个通用的容器,使用默认的流布局管理器。你可以根据需要自定义其布局。 ...

    Java Swing中的文本框(JTextField)与文本区(JTextArea)使用实例

    - 与`JTextField`类似,`JTextArea`也提供了`setText()`和`getText()`方法来设置和获取文本内容。 - 另外,`JTextArea`还提供了更多的方法,如`append(text)`用于在现有文本末尾添加文本,`setLineWrap(boolean)`...

    Java_Swing的复杂控件

    首先,JTextArea是一个显示纯文本的多行区域,它具有换行功能,同时也可以借助JScrollPane提供垂直和水平滚动的功能。JTextArea有多种构造函数,例如JTextArea()构造新的TextArea、JTextArea(Document doc)构造新的...

    ModelDialog.zip

    JTextArea是一个多行文本组件,可以用来显示和编辑多行文本。它可以设置行数和列数,也可以添加滚动条。在对话框中使用JTextArea时,我们需要注意它的布局管理,以及如何处理用户输入和显示文本内容。 总结来说,...

    SwingComponent

    `JTextArea`组件用于创建多行文本输入框。如果需要显示大量文本或允许用户输入多行文本,则可以使用它。 - **创建多行文本框**: ```java JTextArea textArea = new JTextArea(15, 10); // 创建15行10列的多行文本...

Global site tag (gtag.js) - Google Analytics