我試圖創建一個大型遊戲板,只有它的一部分會在視口中可見,並且希望能夠使用箭頭移動視口鍵看到整個板。現在我有一個JScrollPane,它包含一個JPanel,它將具有圖像和文本以及其他內容,但這些都不相關。現在我有一個與JPanel相同大小的ImageIcon作爲背景,我希望有一個選項可以使用鍵移動視口,而不是任何可見的滾動條。 我已經嘗試在JPanel和JScrollPane上調用getViewPort()。setViewPosition(),然後再調用revalidate()。但它仍然不起作用。我的代碼如下如何將包含JPanel的JScrollPane視口滾動到特定位置
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);
}
}
感謝您的KeyEvent代碼,我已經有這個工作。但是,當涉及到視口位置時,setViewPosition()似乎不起作用。我甚至嘗試調用revalidate並重新繪製以防萬一。它仍然不起作用 – Heheas
發佈您的SSCCE,證明問題。 – camickr