对于我的项目,我想像在 Adobe Photoshop 中一样调整文本大小。但是当我尝试调整(通过鼠标拖动)文本窗格的大小时,只有文本窗格被调整大小,而不是其中的文本。然后我尝试将我的文本转换为图像并再次尝试调整它的大小(如如何在 java 中调整文本大小一文中所述)并且效果很好。现在我有另一个编辑文本的问题。即,一旦我的文本转换为图像,那么我该如何编辑它(例如:更改文本颜色等)。
对此有任何想法吗?
..一旦我的文本转换为图像,那么我该如何编辑它(例如:更改文本颜色等)。
不。当请求时,在所需的Font
、开始Point
的AffineTransform
、RenderinhHints
和Color
(等)中,用文本绘制每个选择的图像会更好(质量)且更容易。
import java.awt.*;
import java.awt.geom.AffineTransform;
import javax.swing.*;
public class StretchLabels {
String s = "The quick brown fox jumps over the lazy dog!";
Font font = new Font(Font.SERIF, Font.PLAIN, 24);
public JComponent getGUI() {
JPanel gui = new JPanel(new BorderLayout());
JLabel l1 = new StretchTextLabel(s);
l1.setFont(font);
gui.add(l1, BorderLayout.CENTER);
return gui;
}
public static void main(String[] args) throws Exception {
Runnable r = new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("Streeetch me!");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
StretchLabels eg = new StretchLabels();
f.setContentPane(eg.getGUI());
f.pack();
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
class StretchTextLabel extends JLabel {
private static final long serialVersionUID = 1L;
public StretchTextLabel(String s) {
super(s);
}
@Override
public void paintComponent(Graphics gr) {
Color c = gr.getColor();
setForeground(new Color(0,0,0,0));
super.paintComponent(gr);
setForeground(c);
gr.setColor(c);
Graphics2D g = (Graphics2D)gr;
g.setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
double pw = this.getPreferredSize().width;
double ph = this.getPreferredSize().height;
double w = this.getSize().width;
double h = this.getSize().height;
// Set FG (text) color
g.setColor(this.getForeground());
// stretch
AffineTransform stretch =
AffineTransform.getScaleInstance(w/pw, h/ph);
g.setTransform(stretch);
g.drawString(getText(), 0, this.getFont().getSize());
}
}
..如何编辑图像中的文字?
我通常会提供这样的控件:
但当然,这不包括:
与其将文本转换为图像,不如增加文本的大小以使其与窗格一起增长?