当前位置: 首页 > 面试题库 >

JFrame删除JPanels并添加新的JPanel

史智志
2023-03-14
问题内容

我现在有一个发送HTTP请求的SwingWorker,并且我重写了SwingWorker的done()方法来更改JFrame中的内容。我想基本上删除所有内容,并根据服务器返回的值在JFrame上添加一个新的成员面板。

现在,我面临的问题是,当我在JFrame上调用以下方法时,它不会从JFrame中删除任何内容,也不会更改它在Frame中包含的内容。

//TODO: Investigate why JFrame content pane won't repaint.
f.removeAll();
//Pass the frame f reference only into MainDisplay, it doesn't actually do anything apart from allowing a class to add a JMenuBar on the JFrame.
f.add(new MainDisplay(f)); 
f.getContentPane().invalidate();
f.getContentPane().validate();
f.getContentPane().repaint();

我当前的修复方法如下,但我宁愿更改JFrame的内容,而不是加载新的内容。

f.dispose();
f=new ApplicationFrame();

我在这里和Google上浏览了以前的答案,并在调用repaint()重新绘制JFrame时使用了validate()或invalidate()来实现某些状态。

任何建议/帮助将不胜感激。

编辑:我想我将进行更多调试,因为肯定还有其他问题。


问题答案:

例如

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyFrame extends JFrame {

    private static final long serialVersionUID = 1L;

    public MyFrame() {
        final JPanel parentPanel = new JPanel();
        parentPanel.setLayout(new BorderLayout(10, 10));

        final JPanel childPanel1 = new JPanel();
        childPanel1.setBackground(Color.red);
        childPanel1.setPreferredSize(new Dimension(300, 40));

        final JPanel childPanel2 = new JPanel();
        childPanel2.setBackground(Color.blue);
        childPanel2.setPreferredSize(new Dimension(800, 600));

        JButton myButton = new JButton("Add Component ");
        myButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                parentPanel.remove(childPanel1);
                parentPanel.add(childPanel2, BorderLayout.CENTER);
                parentPanel.revalidate();
                parentPanel.repaint();
                pack();
            }
        });
        setTitle("My Empty Frame");
        setLocation(10, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        parentPanel.add(childPanel1, BorderLayout.CENTER);
        parentPanel.add(myButton, BorderLayout.SOUTH);
        add(parentPanel);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                MyFrame myFrame = new MyFrame();
            }
        });
    }
}


 类似资料:
  • 问题内容: 我有一个,其中有一些选择。当按下“确定”按钮时,我希望它清除内容并添加新内容。我已经尝试过,但是弹出的问题是新的。我究竟做错了什么? 问题答案: 解决方案很简单:使用CardLayout并让此布局管理器为您完成所有繁重的工作。有关如何执行此操作的更多详细信息,请参见教程:如何使用CardLayout。 至于您的代码,请注意,实际上它在启动时实际上创建了两个JFrame,如果按下JBut

  • 我有一个JPanel、窗口和一组JPanel和JLabel。我想在JFrame中添加5个JPanel,在每个JPanel中添加一个JLabel。每个JPanel将用于表示有关骰子的数据。 但是,当我运行代码时,只有最后一个JPanel出现在JFrame上,并带有文本“Dice 4”。我不明白为什么。 守则:

  • 如何在更改jPanels高度后刷新它?在我编译代码之后,它确实显示了它,但是在我单击两次random按钮(我使用random按钮将高度更改为随机数)之后,它并没有以我想要的方式显示它。 还有安托赫的事。jPanel是颠倒的。我该怎么改变呢? 下面是我到目前为止编写的代码:

  • 问题内容: 在StackOverflow上有很多次用户问这样的问题… 我有一个包含一个孩子的主体。当用户单击按钮时,孩子应更改为另一个。我该如何做到这一点。 通常,用户实际上曾尝试实现此问题,但无法使其正常工作。 每当我回答这个问题时,我都会告诉他们做这样的事情(简单地说)… 我认为这是一个很合理的答案,而且我个人在许多自己的Java项目中都使用了它,没有问题。但是,我总是不满意我的回答,每个人都

  • 所以我开始学习OOP,也开始学习swing库,但我遇到了麻烦。当我试图删除所有JFrame组件时,它不起作用。我想做的是,当用户单击一个按钮时,我必须删除所有JFrame组件并添加新组件,但它不起作用,尽管我使用了removeAll()repait()、revalidate()等。下面是我的BankApp类代码: 这里是BankGUI: 下面是我的ButtonListener课程: 当我尝试这样做

  • 问题内容: 我想在运行时按下按钮时向JFrame中添加一些新组件。到目前为止,该方法仍然有效,但是我必须手动调整窗口大小才能看到新组件。 有什么我可以触发的动作或可以调用的方法来刷新窗口吗?任何帮助表示赞赏。提前致谢。 问题答案: 你必须去框架。如果这样不起作用,您还必须致电