JTextpane 加入的行号

最近项目需求,在需求JTextPane加入行号等信息,网上找了半天才发现JTextArea加入行号信息。copy正在研究在线程序。他发现自己能够做出改变来改变JTextPane显示行号。

代码:

package com.cml.line;

import java.awt.Color;

import java.awt.FontMetrics;

import java.awt.Component;

import java.awt.Graphics;

import java.awt.Insets;

import javax.swing.JTextArea;

import javax.swing.JTextPane;

import javax.swing.border.AbstractBorder;

public class LineNumberBorder extends AbstractBorder

{

public LineNumberBorder()

{

}

/*

* Insets 对象是容器边界的表示形式。 它指定容器必须在其各个边缘留出的空间。

*/

// 此方法在实例化时自己主动调用

// 此方法关系到边框是否占用组件的空间

public Insets getBorderInsets(Component c)

{

return getBorderInsets(c, new Insets(0, 0, 0, 0));

}

public Insets getBorderInsets(Component c, Insets insets)

{

if (c instanceof JTextPane)

{

//这里设置行号左边边距

insets.left = 20;

}

return insets;

}

public boolean isBorderOpaque()

{

return false;

}

// 边框的绘制方法

// 此方法必须实现

public void paintBorder(Component c, Graphics g, int x, int y, int width,

int height)

{

// 获得当前剪贴区域的边界矩形。

java.awt.Rectangle clip = g.getClipBounds();

FontMetrics fm = g.getFontMetrics();

int fontHeight = fm.getHeight();

// starting location at the "top" of the page...

// y is the starting baseline for the font...

int ybaseline = y + fm.getAscent();

// now determine if it is the "top" of the page...or somewhere

// else

int startingLineNumber = (clip.y / fontHeight) + 1;

if (startingLineNumber != 1)

{

ybaseline = y + startingLineNumber * fontHeight

- (fontHeight - fm.getAscent());

}

int yend = ybaseline + height;

if (yend > (y + height))

{

yend = y + height;

}

g.setColor(Color.blue);

// 绘制行号

while (ybaseline < yend)

{

String label = padLabel(startingLineNumber, 0, true);

g.drawString(label, 0, ybaseline);

ybaseline += fontHeight;

startingLineNumber++;

}

}

// 寻找适合的数字宽度

private int lineNumberWidth(JTextArea jta)

{

int lineCount = Math.max(jta.getRows(), jta.getLineCount());

return jta.getFontMetrics(jta.getFont()).stringWidth(lineCount + " ");

}

private String padLabel(int lineNumber, int length, boolean addSpace)

{

StringBuffer buffer = new StringBuffer();

buffer.append(lineNumber);

for (int count = (length - buffer.length()); count > 0; count--)

{

buffer.insert(0, ‘ ‘);

}

if (addSpace)

{

buffer.append(‘ ‘);

}

return buffer.toString();

}

}

源码是网上下的。下了好久了,忘了是谁的了。

使用时仅只有哟呼jtextpane的setBorder();方法就可以了。

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-10-28 04:01:20

JTextpane 加入的行号的相关文章

java decompiler如何去掉行号

今天想反编译jar包保存源代码,默认前面加了行号,不知道这个小工具如何设置去掉行号? 反编译后: 找到它的安装路径,我的是:C:\Program Files\decomp.然后将该路径加入到环境变量path中. 首先将要反编译的jar文件,用Winrar解压到和jar文件名称一样的文件夹中 在命令输入框中输入如下命令: jad -o -r -dF:\am -sjava F:\amclientsdk\**\*.class 其中:F:\am 表示编译后文件的存放路径 F:\amclientsdk\*

拷贝的代码中去除行号的方法

对于新手来说,从其他地方拷贝代码来研究学习是很经常的事情,但是有的时候很不幸,拷贝过来的代码附带了令人烦恼的"行号".比如下图的一段JavaScript代码: 如果代码少的话还可以,一个一个删除呗.多的话就是噩梦哦,还不如自己照着把代码输一遍呢.怎么办呢? 在vs中有一个小技巧,按住Alt键然后鼠标左键选择可以一整块的代码.如图: 哈哈,利用这个小技巧我们就可以很轻松的选中代码前部的一竖排行号了.如图: 剩下的事情当然是按删除键喽. 当然这里并不是让我们只是简单的复制粘贴来学习,自己动

Java如何取源文件中文件名和行号

package com.github.jdk; /**  * Java如何取源文件中文件名和行号  *   * {@code StackTraceElement}的定义详见文档  *   * @author doctor  *  * @time 2015年3月13日 上午9:16:16  */ public class StackTraceElementPractice { public static void main(String[] args) { StackTraceElement[] 

如何让vim编辑器永久显示行号

在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的.我们有二种办法可以解决: 第一种是,手动显示:在vim命令行模式下输入  :set nu 取消显示:在vim命令行模式下输入:  set nonu 第二种是,永久自动显示:我们修改一个配置文件. 我们输入命令:vim   ~/.vimrc     (vim   /etc/vimrc ) 打开后是一个空文件,我们添加 set nu,保存退出,再次进

Android studio 显示代码行号 设置

首先我们打开我们的Android Studio.   这时会弹出setting页面,我们选择show line numbers然后点击确定按钮.   此时我们就可以看到代码左侧显示出行号了   我们可以看到不仅Java代码显示了行号,而且XML代码区域也显示了行号,大家可以自己试试.欢迎关注,后面会继续写Android开发的系列经验的.

MyEclipse使用总结——MyEclipse去除网上复制下来的来代码带有的行号

一.正则表达式去除代码行号 作为开发人员,我们经常从网上复制一些代码,有些时候复制的代码前面是带有行号,如: MyEclipse本身自带有查找替换功能,并且支持正则表达式替换,使用正则替换就可以很容易去除这些行号 使用快捷键“ctrl+F”打开MyEclipse的查找替换功能,如下图所示: 这样就可以把代码中的行号全部去掉 去除代码行号的正则表达式:^\s*\d+\.

SQL查询显示行号、随机查询、取指定行数据

1.显示行号 如果数据没有删除的情况下主键与行号是一致的,但在删除某些数据,行号就与主键不一致了,这时需要查询行号就需要用新的方法,在SQL Server2005之前,需要使用临时表,但在SQL Server2005中,使用ROW_NUMBER()非常方便. select row_number() over (order by UseriD) as rowNum,* from UserInfo 查询结果: 2.随机查询 有的时候我们需要查询出的数据是随机排序的,newid()函数在扫描每条记录时

gridcontrol显示行号,总行,打印,导出Excel,设置标头及内容居中方法

1.一般为了表格显示数据更直观,经常会显示行号以及总数.让gridcontrol显示行号,首先你需要设置一下显示行号的宽度,也就是IndicatorWith.默认值为-1,可根据实际数值需要设置宽度,案例设置为50:然后在gridView1_CustomDrawRowIndicator事件中添加如下代码: //设置显示行号样式,文字居中,也可根据e.Info.Appearance设置其他属性 e.Info.Appearance.TextOptions.HAlignment = DevExpres

vs2012中如何显示代码行号

打开一个项目,里面没有显示行号   打开工具-选项   选择文本编辑器-C#   在行号前面上打钩   点击确定,就可以看到代码前面显示出行号 6 还可以按此办法添加其他类型文件的代码行号