在paintComponent中绘制另一个组件

4
2个回答

4

我认为您需要为标签设置大小。

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    // Draw Text
    g.drawString("This is my custom Panel!",10,20);

    JLabel c = new JLabel("Label");
    c.setBounds(0, 0, 400, 30);
    c.paint(g);
}

你应该尽量避免覆盖传递的 Graphics 对象。相反,使用一个副本 Graphics gCopy = g.create() - Moonbeam
c.setBounds - 我甚至还没有考虑过。谢谢! - Dmitry D

4
请参见此线程上的LabelRenderTest.java源代码。标签最终被绘制到屏幕上,但在显示之前会先绘制到BufferedImage中。

源代码中的重要行是...
textLabel.setSize(textLabel.getPreferredSize());

你的示例、HTML和图片一起+1 - mKorbel
@mKorbel:“一张图片胜过千言万语”(通常还能获得一些赞 :)。HTML只是因为我懒得计算每个文本元素的确切位置。;) - Andrew Thompson
我不能把你对我卓越、令人兴奋、独一无二的英语表达方式视为对我个人的攻击 :-),因为当我看到你(或其他母语为英语的人)对我的编辑时,肯定会有人笑得不行了。 - mKorbel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接