gpt4 book ai didi

java - 在另一个类中添加组件时 JPanel 不更新

转载 作者:行者123 更新时间:2023-12-02 04:41:04 26 4
gpt4 key购买 nike

我对 Java Swing 相当陌生,遇到了一些问题。

  1. 顺便问一下,在制作相当大的 Java Swing 应用程序时,拆分代码的最佳方法是什么?就我而言,我想要一个具有与 Microsoft Word 相同布局的应用程序,其中有一个充满按钮的 JToolBar 和一个主 JPanel,其中根据工具栏中按下的按钮进行更改。
  2. 如下面的代码所示,我有一个 JFrame,我调用 MainPanel 类来创建一个面板并添加一个带有按钮的工具栏。当按下按钮时,它会向面板添加一个按钮。当您单击按钮时,问题就出现了,除非您调整窗口大小,否则不会显示任何内容(在我的情况下,我只是手动拖动屏幕以使其更大)。

    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();
    }
    });
    }

    }

    public class MainPanel implements ActionListener{JPanel mPanel;JToolBar mToolBar;JButton addQuestion;    public MainPanel() {        mPanel = new JPanel(new BorderLayout());        mToolBar = new 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 - 在另一个类中添加组件时 JPanel 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56516880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com