JScrollPane中JTextPane文本后面的静态图像

所以我有一个 JScrollPane,我需要滚动(仅垂直)通过居中的自动换行文本。文本后面应该是静态的、不可滚动的部分透明图像。

我的第一种方法是将图像添加到 JScrollPane 中的 JTextPane。由于强制图像从其存在的位置滚动而失败。

我的第二种方法是使 JTextPane 的背景透明并在 JLabel 上显示 JTextPane 后面的图像。由于 JTextPane 的背景无法在 JScrollPane 中透明,因此失败。- 现在我可以让它透明,但它会留下损坏、颜色错误和错位的文本以及随机出现在 JTextPane 上的滚动条。

我的第三种方法是使用 JTextArea 代替并在其后面显示图像。由于 JTextArea 无法将文本居中,这失败了。

我的第四种方法是使用 JLabel 来显示文本。由于 JLabel 无法自动换行,这失败了。尽管有些人似乎对此进行了 html 修复,但没有一个有效,因为它们都包裹在不正确的位置。

所以我不确定接下来应该尝试什么,任何帮助表示赞赏。

回答

我的第二种方法是使 JTextPane 的背景透明

是的,这是查看任何背景图像所必需的

文本后面应该是静态的、不可滚动的部分透明图像。

您想要对JViewport滚动窗格进行自定义绘制以显示图像。

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

public class ViewportBackground
{
    private static void createAndShowUI()
    {
        JTextArea textArea = new JTextArea(10, 30);
//      JTextPane textArea = new JTextPane();
        textArea.setOpaque(false);

        Image image = new ImageIcon("mong.jpg").getImage();

        JViewport viewport = new JViewport()
        {
            @Override
            protected void paintComponent(Graphics g)
            {
                super.paintComponent(g);

                //  add custom painting here. 
                //  For a scaled image you can use:

                g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
            }
        };

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setViewport(viewport);
        scrollPane.setViewportView( textArea );

        JFrame frame = new JFrame("Viewport Background");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( scrollPane );
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}


以上是JScrollPane中JTextPane文本后面的静态图像的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>