java - 如何将包含 JPanel 的 JScrollPane 视口(viewport)滚动到特定位置

标签 java swing jpanel jscrollpane viewport

我正在尝试创建一个大型游戏板,它只有一部分在视口(viewport)中可见,并且希望能够使用箭头键移动视口(viewport)以查看整个板。现在我有一个 JScrollPane,其中包含一个 JPanel,其中包含图像、文本和其他内容,但这些无关紧要。现在我有一个与 JPanel 大小相同的 ImageIcon 作为背景,我希望可以选择使用键来移动视口(viewport),并且没有任何可见的滚动条。 我试过在 JPanel 和 JScrollPane 上调用 getViewPort().setViewPosition(),然后调用 revalidate()。但它仍然不起作用。我的代码在下面

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import java.awt.*;
import java.awt.event.*;


public class Game extends JPanel {

    JPanel game = new JPanel();
    JScrollPane scrollPane = new JScrollPane(game);
    JLabel grass = new JLabel();

    private KeyListener keys = new KeyListener() {
        public void keyTyped(KeyEvent e) {

        }
        public void keyReleased(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                System.out.println("Down");
                scrollPane.getViewport()

            } else if (e.getKeyCode() == KeyEvent.VK_UP) {
                System.out.println("up");
            }
            revalidate();
        }
        public void keyPressed(KeyEvent e) {

        }
    };

public void createGame(int turns) {

        int gameWidth = 1800;
        int gameHeight = 1600;

        int viewPortWidth = 800;
        int viewPortHeight = 600;

        //setLayout(null);
        setSize(new Dimension(viewPortWidth, viewPortHeight));

        game.setLayout(null);
        game.setSize(new Dimension(gameWidth, gameHeight));

        //add the background image
        ImageIcon background = new ImageIcon("Grass.png");
        grass.setIcon(background);
        grass.setBounds(0,0, gameWidth, gameHeight);
        game.setBackground(Color.GREEN);
        game.add(grass);
        game.setBounds(0,0, gameWidth, gameHeight);

        //key listener
        game.addKeyListener(keys);

        //add(game);
        scrollPane.setPreferredSize(new Dimension(viewPortWidth, viewPortHeight));

        add(scrollPane);

    }


}

最佳答案

有一个使用 scrollRectToVisible() 的示例herehere .您应该能够根据自己的使用情况调整它。

顺便说一句,考虑使用 key bindings , 如图所示 here , herehere .

关于java - 如何将包含 JPanel 的 JScrollPane 视口(viewport)滚动到特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883422/

相关文章:

java - 更改 Axis Web 服务 URL

java - Hibernate 3 到 4 迁移

java - 将值 String[] 传递给 String[] 值

java - JFrame 中的 JCommandButton

java - Grahpics2D Draw 和 JPanel 重绘的并发问题

java - 将处理应用程序组合成一个大的可执行文件?

java - 如何将 JFXPanel 添加到现有的 swing 应用程序

java - 在 Java Swing 中打印发票和类似文档的工具是什么?

java - 在 netbeans 中使用 JSlider 缩放 jPanel

java - 即使我双缓冲,JPanel 仍然撕裂?