java彩色滚动条搜索结果

2024-05-28

我将如何在 Java 中自定义滚动条,以便我可以进行像 chrome 一样的搜索,也就是说在结果所在的位置放置彩色条纹?

我不想要一个库,因为我更喜欢自己编写代码。另外,我不想失去我拥有的 L&F。欢迎举例。

实际上,它将查看一个大的文本文件或一个长的 jtable,有没有人对我如何拥有一个有效的滚动条来查看这个文件有任何好主意? ...我应该有一个从头到尾的双滚动条和一个在短范围内滚动的内部滚动条???

(抱歉,这是一个双重问题,但彩色滚动条会打勾)

感谢您提供的所有可能的帮助和想法。

编辑:没有代码示例抱歉,因为我试图事先在脑海中计划好这一点...您会看到它将是一个带有快速搜索的长文本窗格。用户需要加载这个大文件并快速访问详细信息。目前我保持轻量加载速度。其次,文本将是动态的,因此通过单击某个单词,它会在滚动栏中放置一条条纹,就像激活了搜索一样。目前我们只说它是一个带有滚动条的简单文本区域。


import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.plaf.metal.MetalScrollBarUI;

public class ScrollBarSearchHighlighterTest {
  private static final Highlighter.HighlightPainter highlightPainter
    = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
  private static final String pattern = "Swing";
  private static final String initTxt =
    "Trail: Creating a GUI with JFC/Swing\n" +
    "Lesson: Learning Swing by Example\n" +
    "This lesson explains the concepts you need to\n" +
    " use Swing components in building a user interface.\n" +
    " First we examine the simplest Swing application you can write.\n" +
    " Then we present several progressively complicated examples of creating\n" +
    " user interfaces using components in the javax.swing package.\n" +
    " We cover several Swing components, such as buttons, labels, and text areas.\n" +
    " The handling of events is also discussed,\n" +
    " as are layout management and accessibility.\n" +
    " This lesson ends with a set of questions and exercises\n" +
    " so you can test yourself on what you've learned.\n" +
    "http://docs.oracle.com/javase/tutorial/uiswing/learn/index.html\n";

  private final JTextArea textArea   = new JTextArea();
  private final JScrollPane scroll   = new JScrollPane(textArea);
  private final JScrollBar scrollbar = new JScrollBar(JScrollBar.VERTICAL);
  public JComponent makeUI() {
    textArea.setEditable(false);
    textArea.setLineWrap(true);
    textArea.setText(initTxt+initTxt+initTxt);
    scrollbar.setUnitIncrement(10);

    scrollbar.setUI(new MetalScrollBarUI() {
      @Override protected void paintTrack(
            Graphics g, JComponent c, Rectangle trackBounds) {
        super.paintTrack(g, c, trackBounds);
        Rectangle rect = textArea.getBounds();
        double sy = trackBounds.getHeight() / rect.getHeight();
        AffineTransform at = AffineTransform.getScaleInstance(1.0, sy);
        Highlighter highlighter = textArea.getHighlighter();
        g.setColor(Color.YELLOW);
        try{
          for(Highlighter.Highlight hh: highlighter.getHighlights()) {
            Rectangle r = textArea.modelToView(hh.getStartOffset());
            Rectangle s = at.createTransformedShape(r).getBounds();
            int h = 2; //Math.max(2, s.height-2);
            g.fillRect(trackBounds.x+2, trackBounds.y+1+s.y, trackBounds.width, h);
          }
        } catch(BadLocationException e) {
          e.printStackTrace();
        }
      }
    });
    scroll.setVerticalScrollBar(scrollbar);

    Box box = Box.createHorizontalBox();
    box.add(Box.createHorizontalGlue());
    box.add(new JButton(new AbstractAction("highlight") {
      @Override public void actionPerformed(ActionEvent e) {
        setHighlight(textArea, pattern);
      }
    }));
    box.add(Box.createHorizontalStrut(2));
    box.add(new JButton(new AbstractAction("clear") {
      @Override public void actionPerformed(ActionEvent e) {
        textArea.getHighlighter().removeAllHighlights();
        scrollbar.repaint();
      }
    }));

    JPanel p = new JPanel(new BorderLayout());
    p.add(scroll);
    p.add(box, BorderLayout.SOUTH);
    return p;
  }
  public void setHighlight(JTextComponent jtc, String pattern) {
    Highlighter highlighter = jtc.getHighlighter();
    highlighter.removeAllHighlights();
    Document doc = jtc.getDocument();
    try{
      String text = doc.getText(0, doc.getLength());
      Matcher matcher = Pattern.compile(pattern).matcher(text);
      int pos = 0;
      while(matcher.find(pos)) {
        int start = matcher.start();
        int end   = matcher.end();
        highlighter.addHighlight(start, end, highlightPainter);
        pos = end;
      }
    }catch(BadLocationException e) {
      e.printStackTrace();
    }
    scroll.repaint();
  }
  public void removeHighlights(JTextComponent jtc) {
    Highlighter hilite = jtc.getHighlighter();
    Highlighter.Highlight[] hilites = hilite.getHighlights();
    for(int i=0; i<hilites.length; i++) {
      if(hilites[i].getPainter() instanceof
             DefaultHighlighter.DefaultHighlightPainter) {
        hilite.removeHighlight(hilites[i]);
      }
    }
    scroll.repaint();
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.getContentPane().add(new ScrollBarSearchHighlighterTest().makeUI());
    frame.setSize(320, 240);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}

或者另一种选择是使用“MatteBorder + Icon + RowHeader”:JScrollBar 搜索荧光笔 http://java-swing-tips.blogspot.jp/2013/01/jscrollbar-search-highlighter.html

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

java彩色滚动条搜索结果 的相关文章

随机推荐

  • 帮助在 UIWebView 中使用 Javascript 代码

    我想在 webView 中运行以下代码 以便内容可编辑 javascript document body contentEditable true document designMode on void 0 到目前为止 我已经尝试过这个 v
  • 如何从 URL 获取当前的 Web 目录?

    如果我有一个网址http www example com sites dir index html http www example com sites dir index html 我想提取 sites 这个词 我知道我必须使用正则表达式
  • Xcode 8:使用 iOS 9.3 基础 SDK 编译?

    我在 Xcode 8 0 beta 8S128d 中将 iOS 应用程序升级到 Swift 3 0 我以为一切都已准备就绪 并将其上传到 iTunes Connect 当我点击 提交审核 时 它给了我一个包含 26 个错误的列表 每个嵌入式
  • 为什么 count 比 $count 差

    我只是在查看不同问题的答案以了解更多信息 我看到一个answer https stackoverflow com a 4891402 429850这表明在 php 中编写这样的做法是不好的做法 for i 0 i
  • Rails 上的 SASS 无效 CSS 错误

    我正在尝试使用http startbootstrap com stylish portfolio http startbootstrap com stylish portfolio但是 在我的 Rails 应用程序中 我在 vintage
  • 将 Python 字典中的键替换为唯一值

    a 0 PtpMotion 1 PtpMotion 2 LinMotion 3 LinMotion 4 LinMotion 5 LinMotion 6 LinMotion 7 LinMotion 8 LinMotion 9 PtpMotio
  • 我的 Kafka 流应用程序刚刚退出,代码为 0,什么也不做

    为了尝试 Kafka 流 我这样做了 public static void main String args final StreamsBuilder builder new StreamsBuilder final Properties
  • SQL 中的代码重用和模块化

    代码重用和模块化对于 SQL 存储过程编程来说是一个好主意吗 如果是这样 将这些功能添加到 SQL 存储过程代码库的最佳方法是什么 我通常为常见且重复的任务创建标量值函数 我发现它不仅可以简化与现有程序类似的新程序的开发 而且还有助于错误跟
  • JFrame 在连续运行代码时冻结

    我在使用时遇到问题JFrame 它会冻结 连续运行代码 下面是我的代码 点击时btnRun 我调用了该函数MainLoop ActionListener btnRun Click new ActionListener Override pu
  • 代码终止后保持 matplotlib / pyplot 窗口打开

    我希望 python 绘制一个图 在不阻塞控制流的情况下显示它 并在代码退出后使图保持打开状态 这可能吗 这个以及相关的主题存在于许多其他线程中 见下文 但我无法让情节保持开放且非阻塞 例如 如果我使用pyplot ion before p
  • Zurb 基金会粘性页脚

    我想使用 Foundation 4 拥有粘性页脚 并且我想使用 HTML5
  • 构建qt程序时未定义的符号:找不到qt_version_tag

    我正在学习Qt5 6 我正在使用 Ubuntu 14 4 当我链接我的程序时 出现以下错误 undefined reference to qt version tag 在 CMakeLists txt 中 link libraries Qt
  • xlwt 可以在单元格中创建一个包含标题和链接变量的超链接吗?

    例如 如何更改以下行 使 test 为变量 T 且 http google com http google com 是变量L ws write 0 0 xlwt Formula test HYPERLINK http google com
  • Postgresql 致命数据库系统正在启动 - Windows 10

    我已经安装了postgresql on windows 10 on usb disk 每天当我启动电脑工作时sleep并再次插入磁盘然后尝试启动postgresql我收到这个错误 FATAL the database system is s
  • 组内条件计数

    我想在之后进行条件计数groupby 例如 按列的值分组A 然后计算每组中值出现的频率5出现在列中B 如果我整个过程都这样做DataFrame 只是len df df B 5 所以我希望我能做到df groupby A df B 5 siz
  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • Spring SpEL - 用于创建字符串和自定义对象映射的表达式语言

    我在用着春季启动从属性文件中读取以下内容的示例 sub region data AF subRegionCd 34 subRegionName Southern Asia subRegionDesc status A 我在下面使用过 但不起
  • 如何让游戏音频在某个点循环播放

    我的游戏中有一场风暴 所以我制作了一个环境音频文件 它慢慢成长为一场风暴 雨逐渐消失 然后变成一个可循环的风暴音频文件 我是这样做的 Play intro clip and merge into main loop var introTim
  • 在特定主机组上运行 ansible

    我正在尝试使用以下命令运行 ansible ansible playbook provision yml l webserver 我的主机文件包含以下主机组 webclient 172 29 4 75 webserver 172 29 4
  • java彩色滚动条搜索结果

    我将如何在 Java 中自定义滚动条 以便我可以进行像 chrome 一样的搜索 也就是说在结果所在的位置放置彩色条纹 我不想要一个库 因为我更喜欢自己编写代码 另外 我不想失去我拥有的 L F 欢迎举例 实际上 它将查看一个大的文本文件或