繁体   English   中英

如何使JPanel中的绘制图形可滚动?

[英]How can I make painted graphics in a JPanel scrollable?

我正在改版棋盘游戏。 将通过重写paintComponent(Graphics g)方法在JPanel上绘制该板。 该开发板可能大于其所绘制的JPanel的大小,因此我计划使用JScrollPane允许用户在整个开发板上滚动以查看它。 举例来说,我将板子做成一个大矩形,看是否可以使它在那上面滚动,但无济于事。 我以前曾经成功使用过JScrollPane ,但我不知道为什么这种情况与我以前使用的方式有什么不同。

谁能看到为什么它无法正常工作?

这是游戏的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();
        }
    }
}

这是我第一次发布问题,因此,如果您需要其他信息来解决此问题,请告诉我

您需要在BoardPanel上设置setPreferredSize ,这似乎可以解决问题。 不要问为什么;-)

-@ geert3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM