JViewport中有多个视图?

时间:2012-02-27 10:55:02

标签: java swing

目前我有一个漂亮的JViewport,其中设置了Jlabel并用作视图。我想知道是否可以使用分层Jlabels作为Viewport的视图。 IE:我想将新的JLabel添加到预先存在的视口中。

谢谢!

编辑:关于StanislavL的建议,我现在在JScrollPane中使用JLayeredPane。目前JLayeredPane中有两个JLabel,当我滚动JScrollPane时,较大的背景图像正确滚动,较小的shipSprite保持在相同的位置。有什么想法我可以让他们一起滚动吗?

public void initViewport() {
    explorePort = new JScrollPane();
    explorePort.setBounds(0, 0, retailWidth, retailHeight);
    explorePort.setBackground(new Color(0, 100, 0));
    explorePort.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    explorePort.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

    ImageIcon background = Main.global.imgScaler.scaleImage(new ImageIcon("images/blankgrid.jpg"), retailWidth*2, retailHeight*2);
    JLabel backSplash = new JLabel(background);
    backSplash.setBounds(0, 0, retailWidth*2, retailHeight*2);

    ImageIcon shipIcon = Main.global.imgScaler.scaleImage(new ImageIcon("images/ship.png"), Main.global.nodeWidth, Main.global.nodeHeight);
    JLabel shipSprite = new JLabel(shipIcon);
    shipSprite.setBounds(100, 100, Main.global.nodeWidth, Main.global.nodeHeight);

    Main.global.gamePanel.add(backSplash, 0);

    explorePort.setViewportView(backSplash);
    Main.global.gamePanel.add(shipSprite, 1);
    Main.global.gamePanel.add(explorePort, 2);

    //explorePort.addMouseListener(this);
    Main.global.gameFrame.addKeyListener(new ListenKey());
}

1 个答案:

答案 0 :(得分:3)

使用“分层”窗格向容器添加多个标签,并将容器放在JScrollPane中 http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html