如何解决JScrollPane 中 JTextPane 文本后面的静态图像
所以我有一个 JScrollPane,我需要滚动(仅垂直)居中的自动换行文本。文本后面应该是静态的、不可滚动的部分透明图像。
我的第一种方法是将图像添加到 JScrollPane 中的 JTextPane。由于强制图像从其存在的位置滚动而失败。
我的第二种方法是使 JTextPane 的背景透明并在 JLabel 上显示 JTextPane 后面的图像。由于 JTextPane 的 bacakground 无法在 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,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();
}
});
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。