加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Java中更改文本的颜色

发布时间:2020-12-14 19:23:20 所属栏目:Java 来源:网络整理
导读:我正在尝试创建一个单独的CustomFont类,其中我可以使用不同的文本属性.所以我创建了一个新的类扩展Font,并在里面创建了一个扩展JComponent的私有类Drawing.我在paintComponent方法中更改了字体和文本的颜色和其他特征. 问题是paintComponent方法没有被调用.

我正在尝试创建一个单独的CustomFont类,其中我可以使用不同的文本属性.所以我创建了一个新的类扩展Font,并在里面创建了一个扩展JComponent的私有类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实现来尊重paint链,它应该是覆盖方法中的第一个调用,否则可能发生异常:

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

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

在上面的代码中注意@Override注释,所以我确信我重写了正确的方法.并且getX()和getY()已被替换为0,因为getX和getY引用了组件位置,但是当我们调用drawString时,我们为它提供了在容器内绘制的位置的参数(并且它必须在当然,边界/大小是容器.

2)你应该在绘制到图形对象时覆盖getPreferredSize并返回适合你的组件绘图/内容的Dimensions,否则在视觉上不会有任何可见的,因为组件大小将是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)
    }
}

正如一个建议使用一些RenderHints和Graphics2D看起来很漂亮的文本:)请看这里更多:

> Displaying Antialiased Text by Using Rendering Hints

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读