2017-04-16 45 views
-1

我想提请后者又被添加到一个JFrame一个JPanel的图像,在这里看到:drawImage不显示整个图像?

JFrame screen; 

public void welcome(){ 
     screen = new JFrame("Welcome"); 
     screen.setVisible(true); 
     screen.pack(); 
     screen.setBackground(Color.darkGray); 
     screen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
} 

// in the original code there is series of methods here that eventually calls the drawBoard() method 

public void drawBoard(){ 
try { 
    final BufferedImage gboard = ImageIO.read(new File("cutsomGameBoard.jpg")); 
    final BufferedImage featPanel = ImageIO.read(new File("extraPanel.png")); 
    board = new JPanel(){ 
     protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       g.drawImage(gboard, 0, 0, this); 
      } 
     }; 
    extra = new JPanel(){ 
     protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       g.drawImage(featPanel, 0, 0, this); 
      } 
     }; 

     board.setSize(480, 480); 
     extra.setSize(480, 320); 

    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

    gameScreen.add(toolbar, BorderLayout.PAGE_START); 
    gameScreen.add(board, BorderLayout.EAST); 
    gameScreen.add(extra, BorderLayout.WEST); 
    gameScreen.setVisible(true); 
    screen.add(gameScreen); 
} 

我的问题是,当运行代码时,只缓冲图像的一个小角落可见我不确定这是否是框架布局,面板大小或drawImage方法参数,想法的问题?

P.S.输出:JAVA窗口的截图

https://i.stack.imgur.com/NkrWF.png

回答

2

所以默认大小基本上是你没有覆盖您的自定义组件的getPreferredSize()方法(10,10),这是使用具有的FlowLayout面板的尺寸没有添加组件。

不要使用JPanel来显示图像。或者如果您确实想使用JPanel,那么您需要实现getPreferredSize()方法来返回图像的大小。

最简单的解决方案是只使用JLabelImageIcon

请参阅How to Use Icons的Swing教程以了解更多信息和工作示例。