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();
}
}
}
這是我第一次張貼問題,所以讓我知道如果你需要更多的信息來解決這個問題
你需要'setPreferredSize'上BoardPanel,似乎這樣的伎倆。不要問爲什麼;-) – geert3
有時候,揮拍會讓我神經緊張。非常感謝@ geert3! –
另一種選擇是將其渲染爲bufferedimage並使關鍵聽衆改變bufferedimage的x和y。從技術上講,它不是滾動的,但根據您的需求可能會更好,尤其是對於遊戲。 – Arin