我正在独自开发一个项目,想要创建一个JComponent或 JFrame,看起来像链接中提供的屏幕快照(因为它 在这里说我没有足够的声誉来发布图像)。JTextPane被 三张图片包围,并且确实将单词包装到下一行。
因此,请帮助我。如果您通过 示例演示答案,我将不胜感激。这是图像的链接。
一个简单的解决方案可能是创建一个JLabel并将其icon属性设置为背景图片…
Icon icon = ...; JLabel background = new JLabel(icon);
将标签的布局管理器设置为 GridBagLayout…
GridBagLayout
background.setLayout(new GridBagLayout());
Set the GridBagConstraints insets so that the text pane will be offset within the contain…
GridBagConstraints
GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(40, 40, 40, 40); gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 1; gbc.weighty = 1;
And then simply add the JTextPane to the label…
JTextPane
JTextPane textPane = ...; background.add(textPane, gbc);
You can then either add the JLabel to the what ever container you want or even set it as the JFrame‘s content pane depending on your needs.
JLabel
JFrame
ps- You’ll need to make the text pane transparent…
For example…
import java.awt.Color; import java.awt.EventQueue; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextPane; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.text.BadLocationException; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; public class TextPaneWrapped { public static void main(String[] args) { new TextPaneWrapped(); } public TextPaneWrapped() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } try { JLabel background = new JLabel( new ImageIcon( ImageIO.read( new File("background.jpg")))); background.setLayout(new GridBagLayout()); JTextPane textPane = new JTextPane(); textPane.setOpaque(false); Style centerStyle = textPane.addStyle("center", null); StyleConstants.setAlignment(centerStyle, StyleConstants.ALIGN_CENTER); StyleConstants.setFontFamily(centerStyle, textPane.getFont().getFamily()); textPane.setParagraphAttributes(centerStyle, true); Style defaultStyle = textPane.addStyle("defaultStyle", centerStyle); StyleConstants.setFontSize(defaultStyle, 24); Style capWord = textPane.addStyle("capWord", defaultStyle); StyleConstants.setForeground(capWord, Color.RED); StyleConstants.setFontSize(capWord, 48); StyledDocument doc = textPane.getStyledDocument(); try { doc.insertString(0, "H", capWord); doc.insertString(1, "ello ", defaultStyle); doc.insertString(doc.getLength(), "W", capWord); doc.insertString(doc.getLength(), "orld", defaultStyle); } catch (BadLocationException exp) { exp.printStackTrace(); } GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(40, 40, 40, 40); gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 1; gbc.weighty = 1; background.add(textPane, gbc); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(background); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } catch (IOException exp) { exp.printStackTrace(); } } }); } }