【问题标题】:trying yo update my JFrame [duplicate]试图更新我的 JFrame [重复]
【发布时间】:2014-05-22 16:48:52
【问题描述】:

在我的框架中,我有一个标题屏幕(J 面板),当我单击一个按钮时,我希望它被游戏屏幕(另一个 J 面板)替换。我有这个代码来替换它,但是当我单击按钮将它发送到我的启动方法时,它会清除 GUI,它只是保持空白。

public void start() {
         frame.remove(titlePanel);
         frame.repaint();
         frame.add(gamePanel);
}

如果我将 gamePanel 添加到我制作 titlePanel 的框架中,它工作正常,所以我知道它正在查找图像。

任何帮助将不胜感激。

【问题讨论】:

    标签: java swing


    【解决方案1】:

    首选的解决方案是使用CardLayout,这样您就可以轻松切换视图...

    添加gamePanel 后,应通过调用frame.revalidate() 来修复直接方法(您现在正在做的)...但我仍然推荐CardLayout

    【讨论】:

      【解决方案2】:

      您必须使用 frame.revalidate() 才能使更改生效。

      【讨论】:

        【解决方案3】:

        试试这个:

        import java.awt.BorderLayout;
        import java.awt.Color;
        import java.awt.EventQueue;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        
        import javax.swing.JFrame;
        import javax.swing.JPanel;
        import javax.swing.border.EmptyBorder;
        import javax.swing.JButton;
        public class test extends JFrame {
            private JPanel contentPane;
            JPanel panel1;
            JPanel panel2;
            public static void main(String[] args) {
                EventQueue.invokeLater(new Runnable() {
                    public void run() {
                        try {
                            test frame = new test();
                            frame.setVisible(true);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
            public test() {
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setBounds(100, 100, 450, 300);
                contentPane = new JPanel();
                contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
                contentPane.setLayout(new BorderLayout(0, 0));
                setContentPane(contentPane);
        
                panel1 = new JPanel();
                contentPane.add(panel1, BorderLayout.NORTH);
                panel1.setBackground(Color.red);
        
                 panel2 = new JPanel();
                 panel2.setBackground(Color.blue);
        
                JButton btnNewButton = new JButton("New button");
                contentPane.add(btnNewButton, BorderLayout.SOUTH);
                btnNewButton.addActionListener(new ActionListener() {
        
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        remove(panel1);
                        contentPane.add(panel2, BorderLayout.NORTH);
                        repaint();
                        validate();
                    }
                });
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 2014-04-29
          • 2010-12-09
          • 1970-01-01
          • 1970-01-01
          • 2013-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-04
          相关资源
          最近更新 更多