【问题标题】:Styled Document for JScrollBar?JScrollBar 的样式化文档?
【发布时间】:2014-09-11 16:58:26
【问题描述】:

我想自定义滚动条对象的输出。下面的代码非常适合 JTextPane,JScrollBar 的等价物是什么?

    private JTextPane textPane;

    StyledDocument doc = textPane.getStyledDocument();

    SimpleAttributeSet keyWord = new SimpleAttributeSet();
    StyleConstants.setForeground(keyWord, Color.RED);
    StyleConstants.setBackground(keyWord, Color.YELLOW);
    StyleConstants.setBold(keyWord, true);

【问题讨论】:

  • JScrollBar 没有文档...它没有文本表示,需要文档...也许您将 JScrollBar 子类化并在其中插入您自己的文档?

标签: java swing document jtextpane jscrollbar


【解决方案1】:

如文档How to Use Scroll Panes中所述,

JScrollPane 提供组件的可滚动视图。当屏幕空间有限时,使用滚动窗格来显示较大的组件或大小可以动态变化的组件...

.. 下面是创建文本区域的代码,使其成为滚动窗格的客户端,并将滚动窗格添加到容器中。

所以你可以让你的 JTextPane 成为你的 JScrollBar 的客户端。

示例代码:

public class Sample extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Sample frame = new Sample();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Sample() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 300, 300);
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout(0, 0));
        setContentPane(panel);

        JTextPane textPane = new JTextPane();
        textPane.setEditable(false);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane
                .setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.add(textPane);
        scrollPane.setViewportView(textPane);
        panel.add(scrollPane, BorderLayout.CENTER);

        final StyledDocument doc = textPane.getStyledDocument();
        insertStringToDoc(getString() + "\n", doc, doc.getLength());

    }

    private void insertStringToDoc(String str, StyledDocument doc, int offset) {
        try {

            SimpleAttributeSet keyWord = new SimpleAttributeSet();
            StyleConstants.setForeground(keyWord, Color.RED);
            StyleConstants.setBackground(keyWord, Color.YELLOW);
            StyleConstants.setBold(keyWord, true);
            doc.insertString(doc.getLength(), str, keyWord);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private String getString() {
        return "hello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello "
                + "\nhello hello hello hello hello hello hello hello hello hello hello ";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多