【发布时间】:2011-09-24 21:42:06
【问题描述】:
我目前正在设计一个包含多个屏幕的菜单,每个屏幕上有多个按钮。要在 jLabel 中的背景图像顶部使用按钮(默认情况下,我不能将按钮放在 jLabel 的顶部),我使用 GridBagLayout 和两个面板/菜单屏幕,一个面板包含按钮(不透明 = false) 和一个带有背景图像的面板,或 jLabel。为了根据用户在菜单中的位置切换当前显示的面板,我用单独的方法而不是类来制作每个菜单屏幕(也就是每 2 个面板)。
现在,我已经到了我正在处理不必要复杂的界面部分的地步,我觉得 GridBag 不能满足我的目的,所以我想知道是否有不同的方法绘制我的背景图像,仍然可以使用图像顶部的按钮。
我查找的最流行的方法是覆盖 paintComponent 方法,但我不能这样做,因为我已经在单独的方法中创建了 JPanel,而不是在类中。它们都包含在我原来的 JFrame 中。
非常感谢您的帮助,谢谢!
刚刚添加了这段代码,但由于某种原因我的背景仍然是白色的?立即尝试其他建议,谢谢大家!
private void mainPanel() {
icon = new ImageIcon(getClass().getResource("/phantasma/menuv1.png"));
mainContainer1 = new javax.swing.JPanel() {
@Override
protected void paintComponent(Graphics g) {
g.drawImage(icon.getImage(), 0,0, null);
super.paintComponent(g);
}
};
【问题讨论】:
-
为什么不能覆盖paintComponet?我没有看到任何上面的东西让我相信它不能在你的程序中完成。您始终可以创建一个匿名的内部 JPanel 派生类,并在需要时覆盖其中的 paintComponent 方法。
-
再次根据我的评论,您应该调用
super.paintComponent()方法作为您的 paintComponent 覆盖的第一个调用。否则你可以抹去之前画的所有东西。 -
@user962797,你为什么要做自定义绘画?您的问题是关于在不覆盖paintComponent() 的情况下绘制图像。你没看我的评论吗?为什么不使用为您绘制的组件?不需要的时候为什么要重新发明轮子。
标签: java image background jframe jpanel