这是我第一次在stackoverflow上,我遇到了一个我似乎无法理解的问题。我试图独立开发一个小型的桌面游戏,它使用一个名为“Frame.java”的类来创建一个包含所有菜单的JFrame,并且我需要使用名为“create()”的方法来返回该框架。我还使用另一个名为“MainPanel.java”的类,该类扩展了JPanel,以创建一个MainPanel实例以添加到框架的内容窗格。但是,当我在我的小驱动程序中运行所有代码时,似乎没有任何显示。任何帮助,将不胜感激!Java JPanel将不会显示在JFrame中
public class MainPanel extends JPanel{
//the background image of the game
private BufferedImage img = null;
//GUI components of the game
private JPanel gameWindow, gameWindowHolder, gameInfoHolder, LevelPanel, RevenuePanel,
ActionPanel, TimePanel;
public MainPanel(String path, int width, int height){
//create BufferedImage based on path
img = new ImageHelper().createBufferedImage(path);
//use img to create JPanel gameWindow
gameWindow = ImageHelper.makeImageComponent(img, width, height);
gameInfoHolder = new JPanel();
gameInfoHolder.setPreferredSize(new Dimension(width+10, height+10));
gameInfoHolder.setBackground(Color.black);
gameInfoHolder.add(gameWindow);
//set size of this MainPanel
setPreferredSize(new Dimension(width+300, height+10));
//add gameInfoHolder to MainPanel
add(gameInfoHolder);
}
public void paint(Graphics g) {
super.paintComponent(g);
}
}
public class Driver {
public static void main(String []args){
JFrame frame = Frame.create();
JPanel panel = new MainPanel("images/backgrounds/jessicaAlba.jpg", 330, 500);
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
public class ImageHelper {
//
//Returns an ImageIcon object based on the path
//
public ImageIcon createImageIcon(String path, String description){
URL imgURL = getClass().getResource(path);
if (imgURL != null)
return new ImageIcon(imgURL, description);
else {
System.err.println("Couldn't find this file: " + path + ". Check path.");
return null;
}
}
//
//Returns an Image object based on the path
//
public Image createImage(String path){
URL imgURL = getClass().getResource(path);
Toolkit kit = Toolkit.getDefaultToolkit();
if (imgURL != null){
return kit.createImage(imgURL);
}
else {
System.err.println("Couldn't find this file: " + path + ". Check path.");
return null;
}
}
//
//Returns a BufferedImage object based on the path
//
public BufferedImage createBufferedImage(String path){
BufferedImage image;
URL imgURL = getClass().getResource(path);
try
{
image = ImageIO.read(imgURL);
}
catch (IOException e)
{
System.err.println("Couldn't find this file: \""+ path +"\". Check path.");
return null;
}
return image;
}
//
//Returns a JPanel object composed of the image found in the path.
//
public static JPanel makeImageComponent(String path, int width, int height){
BufferedImage image;
JLabel picLabel;
ImageIcon icon;
JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
ImageHelper h = new ImageHelper();
image = h.createBufferedImage(path);
image = resize(image, width, height);
icon = new ImageIcon(image);
panel.setPreferredSize(new Dimension(width, height));
panel2.setPreferredSize(new Dimension(width+10, height+10));
panel2.setBackground(Color.black);
picLabel = new JLabel(icon);
panel.add(picLabel);
panel2.add(panel);
return panel2;
}
//
//Returns a JPanel object composed of the BufferedImage object in the argument
//
public static JPanel makeImageComponent(BufferedImage image, int width, int height){
JLabel picLabel;
ImageIcon icon;
JPanel panel = new JPanel();
image = resize(image, width, height);
icon = new ImageIcon(image);
panel.setPreferredSize(new Dimension(width, height));
picLabel = new JLabel(icon);
panel.add(picLabel);
return panel;
}
//
//Resizes the BufferedImage object to the specified new width and new height.
//
public static BufferedImage resize(BufferedImage img, int newW, int newH) {
int w = img.getWidth();
int h = img.getHeight();
BufferedImage dimg = new BufferedImage(newW, newH, img.getType());
Graphics2D g = dimg.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(img, 0, 0, newW, newH, 0, 0, w, h, null);
g.dispose();
return dimg;
}
}
请学习如何格式化SO的代码。选择代码示例,然后单击邮件发布区域上方的“{}”。可能需要在代码清单之间添加一些普通文本。如果是这样,请将它作为课程的标题。为了更快地提供帮助,请发布[SSCCE](http://sscce.org/)。 –
谢谢我会记住下次 – DarkyTheOdd
不用担心,我会更深入地考虑下一个问题(当有SSCCE时)。 –