在Java中更改文本的颜色

Alf*_*red 5 java swing colors jlabel

我正在尝试创建一个单独的CustomFont类,其中我可以使用不同的文本属性.所以我创建了一个新的扩展类,Font并在里面创建了一个扩展的私有类Drawing JComponent.我改变了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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*amp 3

添加到我的评论:

super.XXX1)您不通过调用您应该调用的方法的实现来尊重绘制链,paintComponent(..)并且它应该是重写方法中的第一个调用,否则可能会发生异常:

@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);
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中请注意注释@Override,因此我确信我覆盖了正确的方法。而且getX()andgetY()已被替换为 0,0, AsgetXgetY引用组件位置,但是当我们调用时,drawString我们向它提供在容器内绘制位置的参数(当然它必须在容器的边界/大小内)。

getPreferredSize2)当绘制到图形对象时,您应该覆盖并返回Dimension适合您的组件绘图/内容的 s ,否则视觉上不会有任何可见的东西,因为组件大小将为 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

正如建议一样,使用一些RenderHintsandGraphics2D来获得美观的文本:) 请参阅此处了解更多信息: