gpt4 book ai didi

java - 改变Java中文本的颜色

转载 作者:搜寻专家 更新时间:2023-10-31 20:13:37 25 4
gpt4 key购买 nike

我正在尝试创建一个单独的 CustomFont 类,我可以在其中设置不同的文本属性。因此,我创建了一个新类扩展 Font,并在内部创建了一个扩展 JComponent 的私有(private)类 Drawing。我在 paintComponent 方法中更改了字体和文本的颜色和其他特征。

问题是 paintComponent 方法没有被调用。我确信我犯了一些错误。

代码如下:

import javax.swing.JComponent;

public class CustomFont extends Font {
private String string;
private int FontStyle;

public CustomFont(String text, int style) {
super("Serif", style, 15);
FontStyle = style;
string = text;

Drawing draw = new Drawing();
draw.repaint();
}

private class Drawing extends JComponent {
public void paintComponent(Graphics g) {
Font font = new Font("Serif", Font.BOLD, 15);
g.setFont(font);
g.setColor(Color.YELLOW);
g.drawString(string, getX(), getY());
}
}
}

最佳答案

添加到我的评论中:

1) 您不通过调用 paintComponent(..) 方法的 super.XXX 实现来尊重绘画链,您应该这样做,它应该是重写方法,否则可能会发生异常:

@Override 
protected void paintComponent(Graphics g) {
super.paintComponent(g);

Font font = new Font("Serif", Font.BOLD, 15);
g.setFont(font);
g.setColor(Color.YELLOW);
g.drawString(string, 0, 0);
}

在上面的代码中,请注意 @Override 注释,因此我确信我正在覆盖正确的方法。并且 getX()getY() 已替换为 0,0,如 getXgetY 所指到组件位置,但是当我们调用 drawString 时,我们会为其提供容器内绘制位置的参数(当然,它必须在 bounds/size f 容器内。

2) 在绘制图形对象时,您应该覆盖 getPreferredSize 并返回适合您的组件绘图/内容的 Dimension,否则在视觉上不会有任何可见的组件尺寸将是 0,0:

private class Drawing extends JComponent {

@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);//you would infact caluclate text size using FontMetrics#getStringWidth(String s)
}
}

作为建议,使用一些 RenderHintsGraphics2D 来获得漂亮的文本 :) 更多信息请参见此处:

关于java - 改变Java中文本的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14174490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com