java - 如何编辑转换为图像的文本?或任何其他实现/编辑文本的方法

标签 java swing text awt jtextpane

对于我的项目,我想像在 Adob​​e Photoshop 中一样调整文本大小。但是,当我尝试调整(通过鼠标拖动)文本 Pane 大小时,只有文本 Pane 正在调整大小,而不是其中的文本。然后我尝试将我的文本转换为图像并尝试再次调整它的大小(如帖子 How to resize text in java 中所述)并且它工作正常..现在我有另一个编辑文本的问题。即,一旦我的文本转换为图像,我该如何编辑它(例如:更改文本颜色等)。

对此有什么想法吗?

最佳答案

..once my text is converted to image then how do I edit it (eg: changing the text color, etc).

不要。更好(质量)并且更容易在请求时用文本绘制图像的每个选择,在所需的 Font 中,开始 PointAffineTransformRenderinhHintsColor(等)。

StretchLabels

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());
    }
}

.. how do I edit the text in the image?

我通常会提供这样的控件:

Text Control

当然,这不包括:

  1. Color,它在主 GUI 中有一个控件(一个基本的绘图应用程序。)
    Basic paint app.
  2. 通过“拖动”缩放生成的文本。这可以通过使用可调整大小的元素来实现,如@trashgod 或我本人(上文)所示。

关于java - 如何编辑转换为图像的文本?或任何其他实现/编辑文本的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13485501/

相关文章:

java - 无法加载servlet过滤器类: com. sap.cloud.sdk.cloudplatform.security.servlet.HttpSecurityHeadersFilter(SCP Neo)

java - 线程中的异常 "main"java.lang.IllegalArgumentException : adding a window to a container

java - 如何在Java中对文件数据进行排序和重新排列?

java - 如何让我的 Java 程序终止?

java - 从 yyyy-MM-dd 到时间戳

java - 用java流式传输音乐

java - 如何更改 JMenuBar 中 JMenus 的方向

java - 单击时 JList 值发生变化

text - TensorFlow:tf.summary.text 和换行符

python - 从 txt python 中读取行