编辑框加上行号

运行效果如下所示:

示例代码如下:

public class LineNumberHeaderView extends javax.swing.JComponent {

    private final  Font DEFAULT_FONT = new Font(Font.MONOSPACED, Font.PLAIN, 13);
    public final Color DEFAULT_BACKGROUD = new Color(228, 228, 228);
    public final Color DEFAULT_FOREGROUD = Color.red;
    public final int nHEIGHT = Integer.MAX_VALUE - 1000000;
    public final int MARGIN = 5;
    private int lineHeight;
    private int fontLineHeight;
    private int currentRowWidth;
    private FontMetrics fontMetrics;

    public LineNumberHeaderView() {
        setFont(DEFAULT_FONT);
        setForeground(DEFAULT_FOREGROUD);
        setBackground(DEFAULT_BACKGROUD);
        setPreferredSize(9999);
    }

    public void setPreferredSize(int row) {
        int width = fontMetrics.stringWidth(String.valueOf(row));
        if (currentRowWidth < width) {
            currentRowWidth = width;
            setPreferredSize(new Dimension(2 * MARGIN + width + 1, nHEIGHT));
        }
    }

    @Override
    public void setFont(Font font) {
        super.setFont(font);
        fontMetrics = getFontMetrics(getFont());
        fontLineHeight = fontMetrics.getHeight();
    }

    public int getLineHeight() {
        if (lineHeight == 0) {
            return fontLineHeight;
        }
        return lineHeight;
    }

    public void setLineHeight(int lineHeight) {
        if (lineHeight > 0) {
            this.lineHeight = lineHeight;
        }
    }

    public int getStartOffset() {
        return 4;
    }

    @Override
    protected void paintComponent(Graphics g) {
        int nlineHeight = getLineHeight();
        int startOffset = getStartOffset();
        Rectangle drawHere = g.getClipBounds();
        g.setColor(getBackground());
        g.fillRect(drawHere.x, drawHere.y, drawHere.width, drawHere.height);
        g.setColor(getForeground());
        int startLineNum = (drawHere.y / nlineHeight) + 1;
        int endLineNum = startLineNum + (drawHere.height / nlineHeight);
        int start = (drawHere.y / nlineHeight) * nlineHeight + nlineHeight - startOffset;
        for (int i = startLineNum; i <= endLineNum; ++i) {
            String lineNum = String.valueOf(i);
            int width = fontMetrics.stringWidth(lineNum);
            g.drawString(lineNum + " ", MARGIN + currentRowWidth - width - 1, start);
            start += nlineHeight;
        }
        setPreferredSize(endLineNum);
    }
    
    public static void main(String[] args){
//    	try {
//			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
    	JFrame frame = new JFrame("带行号的TextArea Demo");
    	JLabel label = new JLabel("  编辑区域");
    	LineNumberHeaderView view = new LineNumberHeaderView();
    	JScrollPane scrollPane = new JScrollPane(new JTextArea());
    	scrollPane.setRowHeaderView(view);
    	frame.getContentPane().add(label, "North");
    	frame.getContentPane().add(scrollPane,"Center");
    	frame.setPreferredSize(new Dimension(300, 200));
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	frame.setBounds(200, 200, 300, 200);
    	frame.setVisible(true);
    }
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。ExtJs最开始基于YUI技术,由开发人员 JackSlocum开发,通过参考JavaSwing等机制来组织可视化组件,无论从UI界面上CSS样式的应用,到数据解析上的异常处理,都可算是 一款不可多得的JavaScript客户端技术的精品。 Ext的UI组件模型和开发理念脱胎、成型于Yahoo组件库YUI和Java平台上Swing两者,并为开发者屏蔽了大量跨浏览器方面的处理。相对来说,EXT要比开发者直接针对DOM、W3C对象模型开发UI组件轻松。 ExtJS(ajax框架) 4.2.1 功能介绍 功能丰富,无人能出其右。 无论是界面之美,还是功能之强,ext的表格控件都高居榜首。 单选行,多选行,高亮显示选中的行,拖拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现。 自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能。 再加上可编辑grid,添加新行,删除一或多行,提示多行数据,拖拽改变grid大小,grid之间拖拽一或多行,甚至可以在tree和grid之间进行拖拽,这些功能实在太神奇了。更令人惊叹的是,这些功能竟然都在ext表格控件里实现了。 其实从ext3开始就支持各种方式的统计,且有控件支持excel导出。 功能特点 高性能, customizable UI widgets Well designed, documented and extensible Component model Commercial and Open Source licenses available 更新说明 核心改进:检视框架的架构和重塑其基础。这些变化不单提供了产品性能,还提高了其健壮性。 测试框架:在所有支持的浏览器上对框架进行了持续全面的测试。 类系统:作为Extjs 4架构更新的一部分,引用了一个功能更完整的类系统。 沙盒:在ExtJS历史上,ExjJS 4首次提供了完整的沙盒模式。从ExtJS 4开始,框架不再扩展数组或函数等原生对象,因此,与其它的框架同时加载到页面时,再也不会产生冲突。 应用架构:在ExtJS 4,引入了一个标准化的几乎适合任何ExtJS应用程序的MVC风格的应用架构。使用MVC,开发团队只需要学习一种架构就能理解任何ExtJS 4的应用。 SDK工具:正在测试beta版的Sencha SDK工具,在第一版本中包括了优化工具、生成器和slicer工具。这些工具可让你优化Javascript程序,以确保主题能在IE6正常工作。 全新的图表库:ExtJS4中, 全新的、插件自由的图表库是最激动人心的新功能之一,创建了饼图、线图、面积图、雷达图等等,所有这些都是动画的、易于配置的和可扩展的。
Swing背单词&单词记忆系统    一、 [题目描述]  使用C语言设计一个背单词系统,该系统是帮助学生背诵单词的软件,要求用户可以选择背诵的词库,并可以编辑自己的词库。系统可以给出中文,让学生输入其英文意思,也可输出英文让学生输入中文意思。并判定词义是否正确。如不正确给出提示并要求用户重新输入。如正确给以鼓励。还应有词语预览功能。 基本功能:         词库的维护(单词的添加、修改、删除)        课程预览(单词的展示)         显示中文用户输入英文的背诵方法        显示英文用户输入中文的背诵方法         背诵成绩的记录(本程序设计运行一次程序所背诵的所有单词,答对一个得10分,打错一个扣5分)  二、 [功能模块分解及说明]  1、树形结构模块图    2、模块功能概述  程序概述:设计录入词库的结构体,结构体中分别存放英文和中文,整个程序基本上就是 关于结构体的操作,其中包括了顺序结构、循环结构、选择结构。  单词添加:用户自己输入单词以及翻译,存入结构体中。  单词修改:首先在词库中找到这个单词(如果没有则提示用户没有该单词),然后用户输 入修改后的单词及翻译。  单词删除:先在词库中找到单词,然后将这个单词之后的所有单词顺次前移,实现删除功 能。  输出词库:输出结构体存放的单词。  单词测试:用户首先选择测试模式,然后词库中输出现有单词,用户希望结束时输出 “jieshu”,并且在这两个函数中计分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值