2016-03-10 45 views
0

我正在改編一個棋盤遊戲。該板將通過覆蓋paintComponent(Graphics g)方法在JPanel上繪製。該板可能大於它所插入的JPanel的大小,所以我計劃使用JScrollPane以允許用戶滾動查看板。舉個例子,我製作了一個大的矩形板,看看我能不能滾動它,但無濟於事。我之前已成功使用JScrollPane,但我無法弄清楚爲什麼這種情況與我以前使用它的方式有什麼不同。如何在JPanel滾動條中繪製圖形?

任何人都可以看到爲什麼它不能正常工作?

下面是本場比賽的JFrame的代碼:

public class GameFrame extends JFrame{ 

    JPanel playerDeckPanel, contentPane; 
    JScrollPane gameScrollPane; 

    BoardPanel boardPanel; 

    public GameFrame(){ 
     super(); 

     SwingUtilities.invokeLater(new Runnable(){ 
       public void run(){ 
        boardPanel = new BoardPanel(); 
        playerDeckPanel = new JPanel(); 

        boardPanel.setLayout(new GridLayout(1,1)); 
        playerDeckPanel.setLayout(new CardLayout()); 

        boardPanel.setSize(1000,1000); 

        gameScrollPane = new JScrollPane(boardPanel); 
        gameScrollPane.setPreferredSize(new Dimension(300,300)); 

        contentPane = ((JPanel) getContentPane()); 

        contentPane.setLayout(new GridLayout(1,2)); 
        contentPane.add(gameScrollPane); 
        contentPane.add(playerDeckPanel); 

        setMinimumSize(new Dimension(800,600)); 
       } 
      }); 
    } 

    public static void main(String[] args){ 
     GameFrame gameFrame = new GameFrame(); 
     gameFrame.setVisible(true); 
    } 

    private class BoardPanel extends JPanel{ 

     public BoardPanel(){ 
      super(); 
     } 

     @Override 
     public void paintComponent(Graphics g){ 
      super.paintComponent(g); 

      g.setColor(Color.red); 
      g.fillRect(100, 10, 700, 600); 

      revalidate(); 
     } 
    } 
} 

這是我第一次張貼問題,所以讓我知道如果你需要更多的信息來解決這個問題

+2

你需要'setPreferredSize'上BoardPanel,似乎這樣的伎倆。不要問爲什麼;-) – geert3

+1

有時候,揮拍會讓我神經緊張。非常感謝@ geert3! –

+1

另一種選擇是將其渲染爲bufferedimage並使關鍵聽衆改變bufferedimage的x和y。從技術上講,它不是滾動的,但根據您的需求可能會更好,尤其是對於遊戲。 – Arin

回答

0

您需要在BoardPanel上登錄setPreferredSize,這似乎是個竅門。不要問爲什麼;-)

- @ geert3