使用 swing 组件在框架中打开文本文件

2023-12-13

我想使用 swing 组件打开框架中的文本文件,最好具有突出显示功能。我在第一帧中提交的文本中获取文本文件的名称,并想在第二帧中打开该文本文件。我的代码是


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

public class FirstGUI extends JFrame {

private JLabel label;
private JTextField textfield;
private JButton button;

public FirstGUI() {
    setLayout(new FlowLayout());

    label = new JLabel("Enter the file path:");
    add(label);

    textfield = new JTextField();
    add(textfield);

    button = new JButton("Open");
    add(button);

    AnyClass ob = new AnyClass();
    button.addActionListener(ob);
}

public class AnyClass implements ActionListener {
    public void actionPerformed(ActionEvent obj) {
        //SecondGUI s =new SecondGUI();
        //s.setVisible(true);
    }
}

public static void main(String[] args) {

    FirstGUI obj= new FirstGUI();
    obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    obj.setSize(600,600);
    obj.setLocation(100,100);
    obj.setVisible(true);
}
}

我应该在第二个框架中使用什么 swing 组件来打开其中的文本文件?如果可以的话请提供一下代码概要!!


扩展 mKorbel 和 Dans 的答案:

那么你可以使用JTextArea像这样:

enter image description here

import java.awt.BorderLayout;
import java.awt.Color;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.text.*;

public class LineHighlightPainter {

    String revisedText = "Hello, World! ";
    String token = "Hello";

    public static void main(String args[]) {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {

                @Override
                public void run() {
                    new LineHighlightPainter().createAndShowGUI();
                }
            });
        } catch (InterruptedException | InvocationTargetException ex) {
            ex.printStackTrace();
        }
    }

    public void createAndShowGUI() {
        JFrame frame = new JFrame("LineHighlightPainter demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTextArea area = new JTextArea(9, 45);
        area.setLineWrap(true);
        area.setWrapStyleWord(true);
        area.setText(revisedText);

        // Highlighting part of the text in the instance of JTextArea
        // based on token.
        highlight(area, token);

        frame.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }

    // Creates highlights around all occurrences of pattern in textComp
    public void highlight(JTextComponent textComp, String pattern) {
        // First remove all old highlights
        removeHighlights(textComp);

        try {
            Highlighter hilite = textComp.getHighlighter();
            Document doc = textComp.getDocument();
            String text = doc.getText(0, doc.getLength());

            int pos = 0;
            // Search for pattern
            while ((pos = text.indexOf(pattern, pos)) >= 0) {
                // Create highlighter using private painter and apply around pattern
                hilite.addHighlight(pos, pos + pattern.length(), myHighlightPainter);
                pos += pattern.length();
            }

        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }

    // Removes only our private highlights
    public void removeHighlights(JTextComponent textComp) {
        Highlighter hilite = textComp.getHighlighter();
        Highlighter.Highlight[] hilites = hilite.getHighlights();

        for (int i = 0; i < hilites.length; i++) {
            if (hilites[i].getPainter() instanceof MyHighlightPainter) {
                hilite.removeHighlight(hilites[i]);
            }
        }
    }
    // An instance of the private subclass of the default highlight painter
    Highlighter.HighlightPainter myHighlightPainter = new MyHighlightPainter(Color.red);

    // A private subclass of the default highlight painter
    class MyHighlightPainter
            extends DefaultHighlighter.DefaultHighlightPainter {

        public MyHighlightPainter(Color color) {
            super(color);
        }
    }
}

或者使用JTextPane文本可以通过以下方式突出显示:

1)在文档级别更改任意文本部分的任何样式属性,例如:

SimpleAttributeSet sas = new SimpleAttributeSet();
StyleConstants.setForeground(sas, Color.YELLOW);
doc.setCharacterAttributes(start, length, sas, false);

2) 通过文本窗格级别的荧光笔突出显示:

DefaultHighlighter.DefaultHighlightPainter highlightPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
textPane.getHighlighter().addHighlight(startPos, endPos,highlightPainter);

参考:

  • java中的高亮文本
  • JTextPane突出显示文本
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 swing 组件在框架中打开文本文件 的相关文章

随机推荐

  • 将 MySQL 数据库导入 SQL Server

    我有一个 sql来自 MySQL 转储的文件 其中包含表 定义和要插入这些表中的数据 如何将转储文件中表示的数据库转换为 SQL Server 数据库 Use SQL Server 迁移助手 SSMA 除了 MySQL 之外 它还支持 Or
  • 在 Java 中为变量分配新值

    我是 Java 新手 有一个关于变量的问题 这是一个例子 int hello 6 int goodbye 7 int combined hello goodbye System out println combined hello 10 S
  • 您能解释一下 bash shell 中的数学语法吗?

    for i in 1 99 do if i 2 eq 1 then echo i fi done 我正在学习 bash 并且我正在尝试更好地理解第 3 行 为什么 i 2 必须用括号双层包裹 为什么我不能把 旁边的符号i like i 2
  • 包含存储在向量中的 auto_ptr 的类

    在回答中将具有 std auto ptr 作为其成员变量的类的对象存储在 std vector 中是否安全 我说过包含 auto ptr 的类可以存储在向量中假设该类有一个用户定义的复制构造函数 有一些评论表明情况并非如此 因此这个问题是试
  • 使用内联表单集创建模型和相关模型

    我已将其发布在Django 用户 谷歌网上论坛 also 使用中的示例内联表单集文档 我能够edit属于特定模型的对象 使用 模型 我一直在尝试遵循相同的模式creating使用内联表单集的新对象 但无法 我的头脑足够清醒 可以为此目的提出
  • Android gradle:buildtoolsVersion 与compileSdkVersion

    有什么区别buildtoolsVersion vs compileSdkVersion在 Android 项目的 build gradle 中 编辑 具体来说 我想澄清一下构建工具是什么 compileSdkVersion是您编译所针对的
  • 获取数字范围内的数字列表

    我有一个数据框 其中一列包含一个 或多个 数字范围 我想将其转换为基于给定范围的数字列表 输入示例 35 40 or 35 43 45 47 这应该产生 1 35 36 37 38 39 40 and 1 35 36 37 38 39 40
  • 无法实现 androidx.appcompat.appcompat:1.0.0

    我是 Android 开发的绝对初学者 并尝试构建测试自动化来测试移动应用程序 在设置 IntelliJ 数周后 我仍然面临问题 其中包括以下问题 由于我使用的是 SDK 版本 29 我被告知应该将所有 support 关键字转换为 and
  • C# 的单例模式 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我需要存储一堆需要全局访问的变量 我想知道单例模式是否适用 从我看到的例子来看 单例模式只是一个不能被继承的静态类 但我见过的例子对于我的需求来说过于复杂 最简单的单例类是什么 我不能创建
  • android - 让 onTouch 优先于 onClick

    我有一个允许用户在 3 个不同视图之间滑动的活动 每个视图都显示图像列表 这些图像具有调用新活动并使图像全屏显示的 onClick 事件 这一切都正常 但是如果我尝试在 3 个不同的视图之间滑动并且我的手指在图像上滑动 它将触发 onCli
  • JavaFX 3D 对象之间的并集、交集和差异

    有没有办法在 JavaFX 3D 对象之间执行布尔运算 例如并集 交集和差集 例如在 Sphere 实例 Cylinder 实例和 Box 实例之间 从 Shape 类继承的 JavaFX 2D 对象已经具有 union 和 minus 方
  • 从外部模块访问资源文件

    到目前为止 在非模块化 java 之前 您只需将文件放入src main java resources确保它在类路径中 然后加载它 file getClass getClassLoader getResourceAsStream myfil
  • 如何存储和搜索 IP 地址

    我有 4 个 IP 地址源 我想将它们存储在 SQL Server 中 并允许按来源国家 地区代码分类的范围按国家 地区在排除列表中创建 为此我有两张桌子 IP地址范围 国家代码 我需要知道的是 如果此数据返回到客户端然后缓存以供快速查询
  • 如何在后台状态下获取来电/去电事件

    在我的一个应用程序中 它具有我成功实现的播放声音的功能 即使当应用程序正在运行 前台状态 并且我们收到来电时 应用程序音乐也会停止并在呼叫断开时再次恢复 现在真正的问题就在这里 当应用程序进入后台状态时 我们不会收到任何来电 去电事件 在后
  • 改进 Retina iPad 上的缓慢画布动画 - KineticJS

    我正在使用 KineticJS 执行 HTML Canvas 动画 动画可以在所有桌面浏览器和非视网膜 iDevices 包括 iPad mini 上完美运行 但是 从视网膜设备 浏览器或使用 appcelerator 的应用内 Web 视
  • 这个打印样式表如何工作?

    我真的很喜欢如何http www honorshaven com 看起来是打印出来的 pdf 我浏览了源代码 试图弄清楚他们是如何做到的 我的导航总是在打印时变成丑陋的项目符号列表 我不知所措 有人知道吗 任何帮助都是极好的 谢谢 马丁 编
  • 获取所有模型类型

    如何获取属于模型一部分的实体类型列表 以便我可以测试模型是否确实适用于该实体类型 var dcx new MyDbContext var lst new List
  • 是否可以将 JavaVM * 和 JNIEnv * 保存为全局变量并在其他地方使用?

    JavaVM javaVM NULL JNIEnv jniEnv NULL createJavaVM javaVM 无效 jniEnv javaVMInitArgs 其中 javaVM 和 jniEnv 是全局变量 是否可以将JavaVM
  • Z3 Java API 文档

    我已经安装了Z3 API for Java我正在尝试使用它 但找不到任何解释如何使用此 API 的文档 到目前为止我找到的唯一资源是源代码和示例程序 所以我想知道是否有人知道任何其他文档Z3 Java API 目前 Java API 没有单
  • 使用 swing 组件在框架中打开文本文件

    我想使用 swing 组件打开框架中的文本文件 最好具有突出显示功能 我在第一帧中提交的文本中获取文本文件的名称 并想在第二帧中打开该文本文件 我的代码是 import javax swing import java awt import