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

在另一个类中添加组件时,JPanel不会更新

安明亮
2023-03-14
问题内容

我对Java Swing还是很陌生,并且遇到了一些问题。

  1. 附带的问题是,在制作相当大的Java Swing应用程序时,拆分代码的最佳方法是什么?在我的情况下,我希望有一个布局与Microsoft Word一样的应用程序,其中的JToolBar充满按钮,而主JPanel则根据工具栏中的按钮进行更改。
  2. 因此,如下面的代码所示,我有一个JFrame并调用MainPanel类以创建面板并添加带有按钮的ToolBar。当按下按钮时,它将向面板添加一个按钮。当您单击按钮时,问题就来了,直到您调整窗口大小为止(在我的情况下,我只是手动拖动屏幕以使其变大),否则什么都不会显示。
        public class Main {

    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("MathMaker");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create the menu bar.  Make it have a green background.
        //MainToolBar mainTB = new MainToolBar();
        MainPanel mainPanel = new MainPanel();

        frame.getContentPane().add(mainPanel.getGUI(), BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    }


        公共类MainPanel实现ActionListener {
    JPanel mPanel;
    JToolBar mToolBar;
    JButton addQuestion;
        公共MainPanel(){
            mPanel = new JPanel(new BorderLayout());
            mToolBar =新的JToolBar();
            addQuestion = new JButton(“ test”);

        addQuestion.addActionListener(this);

        mPanel.setLayout(new BorderLayout());
        mPanel.setBackground(new Color(248, 213, 131));
        mPanel.setPreferredSize(new Dimension(200, 180));

        mToolBar.add(addQuestion);
        mPanel.add(mToolBar, BorderLayout.PAGE_START);
    }
    public JComponent getGUI()
    {
        return mPanel;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
         JButton temp = new JButton("temp");
         mPanel.add(temp);
    }


}

问题答案:

您应该重新验证面板

    @Override
    public void actionPerformed(ActionEvent e) {
       JButton temp = new JButton("temp");
       mPanel.add(temp);
       mPanel.revalidate();
       mPanel.repaint();
    }


 类似资料:
  • 我对Java Swing还很陌生,遇到了一些问题。

  • 我的主Java程序(MyFrame)应该使用其他类(MyPanel)启动的另一个JPanel更新其JFrame中的现有ContentPanel,具体取决于单击的JMenuItem以及新JPanel的参数。当我单击JMenuItem时,JPanel不会更新,它位于第一个项目的后面,在我调整窗口大小之前不在前景中。你能帮我解决这个问题吗?

  • 问题内容: 将包含图形的添加到时,效果很好。但是,当我尝试添加 其中添加了其他图形的时,它不会显示在中。请参见下面的代码 问题答案: 请注意类的构造函数,使其成为您的习惯,以遵循本示例中所示的顺序。首先向中添加组件,然后再进行调用,例如 ,而不是在此之前。 始终把它当作习惯,每当您覆盖方法时,也要覆盖方法。 并始终像在EDT- 事件调度线程中那样发出呼叫。请阅读Swing中的Concurrency

  • 问题内容: 如果我有我的Jpanel和我的JFreeChart。如何将此图表添加到JPanel中? 现在,如何在JPanle中添加图表? 问题答案: 从旧的Java论坛线程

  • 在运行时添加到当单击时。 我使用以下代码: 但是在中没有显示任何。

  • 问题内容: 如何在jpanel中动态添加组件?当我单击按钮时,我应该有添加按钮,组件应该添加到JPanel。 我的问题是,当我单击添加按钮时,将文本字段和按钮添加到jpanel时,用户可以根据需要将它们添加到jpanel中的任意次数单击添加按钮。我已将scrollerpane添加到我的jpanel,并且jpanel布局管理器设置为null。 问题答案: 像往常一样,除了必须调用: 完成后,因为容器