2017-04-16 83 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教程以瞭解更多信息和工作示例。