我正在自己创建一个项目,并希望创建一个看起来像链接中提供的屏幕截图的JComponent或JFrame(因为它在这里说我没有足够的声誉来发布图像)。 JTextPane被三张图片包围,它确实将单词包装到下一行。
所以请帮助我。如果你用一个例子证明你的答案,我将不胜感激。 以下是图片的链接。
布局
屏幕截图
答案 0 :(得分:2)
一个简单的解决方案可能是创建JLabel
并将其icon
属性设置为背景图片......
Icon icon = ...;
JLabel background = new JLabel(icon);
将标签的布局管理器设置为GridBagLayout
...
background.setLayout(new GridBagLayout());
设置GridBagConstraints
插图,以便文本窗格在包含...
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(40, 40, 40, 40);
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1;
gbc.weighty = 1;
然后只需将JTextPane
添加到标签...
JTextPane textPane = ...;
background.add(textPane, gbc);
然后,您可以将JLabel
添加到您想要的容器中,或者根据您的需要将其设置为JFrame
的内容窗格。
ps-您需要使文本窗格透明......
例如......
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();
}
}
});
}
}