【问题标题】:How do I create a JLabel in the background of a JDesktopPane?如何在 JDesktopPane 的背景中创建 JLabel?
【发布时间】:2021-02-12 04:18:08
【问题描述】:
我正在使用具有拖放功能的JDesktopPane,到目前为止一切顺利,但我想在窗口中心添加一个JLabel,上面写着“拖动并把文件放在这里”纯粹是为了装饰目的。如果可能的话,我希望它始终在后台,即使它们前面有 JInternalFrames。
我在这里还没有真正找到任何可以解决我的问题的东西,而且我正处于放弃这个想法并让我的程序保持原样的边缘。如果已经有解决方案但我还没有找到,请告诉我,以便我立即删除此问题。
【问题讨论】:
标签:
java
swing
jlabel
jinternalframe
jdesktoppane
【解决方案1】:
覆盖JDesktopPane 的paintComponent(...) 方法。
代码可能是这样的:
JDesktopPane desktop = new JDesktopPane()
{
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
String text = "drag and drop here";
FontMetrics fm = g.getFontMetrics();
int stringWidth = fm.stringWidth( text );
int x = (getWidth() - stringWidth) / 2;
int y = getHeight() / 2;
g.drawString(text, x, y);
};
}
阅读 A Closer Look at the Paint Mechanism 上的 Swing 教程部分,了解有关自定义绘画的更多信息并了解其工作原理。