java - 在 actionListener 中将 JPanel 添加到 contentPane

标签 java swing jpanel actionlistener

我试图在 actionListener 方法中将 JPanel 添加到我的 JFrame,但它仅在第二次单击按钮后出现。这是我的代码的一部分,其中 panCours 是一个 JPanelConstituerData 是目标 JFrame :

addCours.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            panCours.setBounds(215, 2, 480, 400);
            panCours.setBorder(BorderFactory.createTitledBorder("Saisir les données concernant le cours"));
            ConstituerData.this.getContentPane().add(panCours);
        }
    });

我不明白为什么一点击按钮就没有出现。关于如何解决这个问题的任何解释和帮助?

最佳答案

您需要添加对 repaint(); 的调用(可能还有 revalidate();)以使 JPanel 立即显示。下面的一个基本示例演示了您的问题(和解决方案);

public class Test {

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(null);

        JButton button = new JButton("Test");                       
        button.setBounds(20, 30, 100, 40);
        button.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                JPanel panel = new JPanel();
                panel.setBackground(Color.red);
                panel.setBounds(215, 2, 480, 480);
                frame.add(panel);
                frame.revalidate(); // Repaint here!! Removing these calls
                frame.repaint(); // demonstrates the problem you are having.

            }
        }); 

        frame.add(button);
        frame.setSize(695, 482);
        frame.setVisible(true);              

    }
}

上面说,(正如其他人所建议的)我建议将来不要使用 null 布局是正确的。 Swing 布局一开始有点尴尬,但从长远来看,它们会对你有很大帮助。

关于java - 在 actionListener 中将 JPanel 添加到 contentPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22210050/

相关文章:

java - 如何在一页中打印多个 Jtable

java - 每次调整 JFrame 大小时 JPanel 都会刷新

java - 卡片布局 Java 应用程序不会显示任何内容

java - 我的 KeyListener 没有响应我的 JPanel

java - 在这种情况下,部分模拟有什么问题?

java - 使用 Spring oAuth2.0 进行身份验证

java - 反射性地获取项目中的所有包?

java - 任务集上的 DefaultTaskContainer#NamedDomainObjectProvider.configure(Action) 无法在当前上下文中执行

java - 没有灰色区域的可滚动 JPanel

java - 如何让按钮只工作一次;