嗨,我正在关注一个在线教程,用Java制作节奏游戏,我在显示菜单栏时遇到问题。当我执行程序时,菜单栏似乎覆盖了背景图像,而我所看到的只是屏幕顶部的菜单栏和其下方的黑屏。该代码似乎可以在Windows上运行,但在Mac上却无法使用。有人知道如何解决这个问题吗?
package dynamic_beat_4;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class DynamicBeat extends JFrame {
private Image screenImage;
private Graphics screenGraphic;
private Image introBackground = new ImageIcon(Main.class.getResource("../images/introBackground.jpg")).getImage();
private JLabel menuBar = new JLabel(new ImageIcon(Main.class.getResource("../images/menuBar.png")));
public DynamicBeat() {
setUndecorated(true);
setTitle("Dynamic Beat");
setSize(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBackground(new Color(0, 0, 0, 0));
setLayout(null);
menuBar.setBounds(0, 0, 1280, 30);
add(menuBar);
Music introMusic = new Music("intromusic.mp3", true);
introMusic.start();
}
public void paint(Graphics g) {
screenImage = createImage(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT);
screenGraphic = screenImage.getGraphics();
screenDraw(screenGraphic);
g.drawImage(screenImage, 0, 0, null);
}
public void screenDraw(Graphics g) {
g.drawImage(introBackground, 0, 0, null);
paintComponents(g);
this.repaint();
}
}
答案 0 :(得分:0)
您为什么称其为“菜单”?这是一个JLabel。 Swing有一个称为JMenuBar的特定组件,因此您在理解自己的实际工作时会感到非常困惑。
我看到许多不一致之处:
不是很确定您要尝试做什么,但我建议您使用框架的默认Defender BorderLayout即可。那么基本代码是:
add(menuBar, BorderLayout.PAGE_START);
add(introBackground, BorderLayout.CENTER)
pack();
setVisible( true );
阅读How to Use BorderLayout的Swing教程中的这一节,以获取更多信息和工作示例,以帮助您入门。