繁体   English   中英

通过按Java中的另一个JButton添加JButton

[英]Add JButton by pressing another JButton in Java

我是Java开发的新手。 我想问问,有什么方法可以在用户按下一个JButton时添加一个新的JButton?

当然。 我建议阅读Action Listeners 您可以将一个按钮的可见性设置为false,然后按如下所示使其可见:

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        otherButton.setVisible(true);
    }
});

希望这可以帮助!

import javax.swing.JButton;

public class NewJFrame1 extends javax.swing.JFrame {

    /**
     * Creates new form NewJFrame1
     */
    public NewJFrame1() {
        initComponents();
    }

    @SuppressWarnings("unchecked")

    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.FlowLayout());

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);

        pack();
    }                     
int button = 0;
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        JButton jButton = new javax.swing.JButton();
        jButton.setText("button " + (++button));
        jButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton);

        this.revalidate();
    }                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                NewJFrame1 frame = new NewJFrame1();
                frame.setSize(800, 600);
                frame.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    // End of variables declaration                   
}

首先通读...

这里的窍门是处理LayoutManager 某些布局(例如BorderLayout会给您动态添加新组件的问题。 确保您使用的LayoutManager会在向其中添加新组件(例如FlowLayoutGridLayoutGridBagLayout )时更新。

将组件添加到容器后,还需要在更新后的容器上调用revalidaterepaint ,以便安排布局和绘制过程,并可以根据您的更改来更新UI。 记住,Swing是懒惰的,它将一直等待直到您告诉它需要更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM