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)
添加到我的评论:
super.XXX
1)您不通过调用您应该调用的方法的实现来尊重绘制链,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, AsgetX
并getY
引用组件位置,但是当我们调用时,drawString
我们向它提供在容器内绘制位置的参数(当然它必须在容器的边界/大小内)。
getPreferredSize
2)当绘制到图形对象时,您应该覆盖并返回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)
正如建议一样,使用一些RenderHints
andGraphics2D
来获得美观的文本:) 请参阅此处了解更多信息:
归档时间: |
|
查看次数: |
37500 次 |
最近记录: |