我目前正在设计一个包含多个屏幕的菜单,每个屏幕上有多个按钮。要在 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);
}
};
最佳答案
BG image with Swing without overriding paintComponent
我不知道为什么所有帖子都建议为此进行自定义绘画。如果您需要自动缩放背景图像,您只会进行自定义绘画。
如果您想要以实际大小绘制图像,请使用 JLabel。
I can't put buttons on TOP of the jLabel),
当然可以。只需为 JLabel 设置 LayoutManager,然后您就可以像向面板添加组件一样向其添加任何组件。
关于java - 使用 Swing 的 BG 图像而不覆盖 paintComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7542124/