如何更改Java Swing中显示的内容?

时间:2016-04-07 15:21:50

标签: java swing menu

我真的不知道怎么说这个问题,但我可以解释一下我想要做什么。 我的程序绘制了一个带有背景图像的基本菜单和底部的3个按钮。我想这样做,当我按下其中一个按钮时,菜单和背景图像会变为另一个场景。比如按下开始游戏或按选项进入选项菜单。

这是我的主菜单代码:

private final void initUI() {
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    add(panel);

    panel.add(Box.createVerticalGlue());

    JPanel bottom = new JPanel();
    bottom.setAlignmentX(1f);
    bottom.setLayout(new BoxLayout(bottom, BoxLayout.X_AXIS));

    JButton plyBtn = new JButton("Play");
    plyBtn.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent event){
            GameFrame_Test1 game1 = new GameFrame_Test1();
            game1.setVisible(true);
        }
    });

    JButton opBtn = new JButton("Options");


    JButton quitButton = new JButton("Exit");

    quitButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            System.exit(0);
        }
    });
    bottom.add(plyBtn);
    bottom.add(Box.createRigidArea(new Dimension(100, 0)));
    bottom.add(opBtn);
    bottom.add(Box.createRigidArea(new Dimension(100, 0)));
    bottom.add(quitButton);
    bottom.add(Box.createRigidArea(new Dimension(100, 0)));

    panel.add(new GraphicTest_1());
    panel.add(bottom);
    panel.add(Box.createRigidArea(new Dimension(0,15)));


    setTitle("Justice GUI");
    setSize(1280, 720);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            DisplayFrame ex = new DisplayFrame();
            ex.setVisible(true);
        }
    });
}

这是我到目前为止要更改的框架的代码:

class GameFrame_Test1 extends JPanel{
    private Image mshi;

    public GameFrame_Test1() {

        loadImage();
        setSurfaceSize();
    }

    private void loadImage() {

        mshi = new ImageIcon("content/Placeholder_Map.png").getImage();
    }

    private void setSurfaceSize() {

        Dimension d = new Dimension();
        d.width = mshi.getWidth(null);
        d.height = mshi.getHeight(null);
        setPreferredSize(d);        
    }

    private void doDrawing(Graphics g) {

        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(mshi, 0, 0, null);
    }

    @Override
    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        doDrawing(g);
    }
}

我是Java Swing的新手,这是一个让我学习如何使用它的测试程序。我已经在线寻找解决方案,但无法说出我的问题会让人感到困难。感谢任何可以提供帮助的人!

1 个答案:

答案 0 :(得分:2)

  

我想这样做,当我按下其中一个按钮时,菜单和背景图像会变为另一个场景。

您应该使用Card Layout作为内容面板的布局管理器。然后,当单击按钮时,您可以在框架上交换不同的面板。

查看How to Use CardLayout上Swing教程中的部分,了解更多信息和工作示例。