private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {
        javax.swing.JButton jbuttonx = new javax.swing.JButton();
        jbuttonx.setText("test");
        jbuttonx.setName("jButtonx");
        
        mainPanel.add(jbuttonx);
    }比如我想按一下按钮,在Panel中再生成一个按钮控件,如上写该按钮不显示,请教一下该如何完善

解决方案 »

  1.   

    是呀,啥layout呀javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addGap(37, 37, 37)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
      

  2.   


    public class Test extends JFrame implements ActionListener{

    public Test(){
    this.setSize(200, 200);
    this.setLocation(200,200);
    this.setLayout(new GridLayout(3,3));

    JButton btn1 = null;
    btn1 = new JButton("添加按钮");
    btn1.addActionListener(this);
    this.getContentPane().add(btn1);

    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public static void main(String[] args) { JFrame frame = new Test();
    frame.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
    JButton btn2 = new JButton("新按钮");
    this.getContentPane().add(btn2);

                    //为什么没有下面两句话就没有新按钮出现呢?
                    btn2.setVisible(false);
    btn2.setVisible(true);

    }
    }
    本来想帮楼主解决问题的 但是现在自己出问题了。我是在Eclipse中测试的。希望高手解答。
      

  3.   


     private void jButton2MouseClicked(java.awt.event.MouseEvent evt) { 
            javax.swing.JButton jbuttonx = new javax.swing.JButton(); 
            jbuttonx.setText("test"); 
            jbuttonx.setName("jButtonx"); 
            
            mainPanel.add(jbuttonx); 
            mainPanel.revalidate();//加入这句话
     }
    调用revalidate()更新一下,就可以显示了
      

  4.   

    谢谢楼上几位回答,我测试了一下,还是没加layout的问题,如下即可显示了
        private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {                                      
            // TODO add your handling code here:
            javax.swing.JButton jbuttonx = new javax.swing.JButton();
            jbuttonx.setText("test");
            jbuttonx.setName("jButtonx");        javax.swing.GroupLayout mainPanelLayouttest = new javax.swing.GroupLayout(mainPanel);
            mainPanel.setLayout(mainPanelLayouttest);
            mainPanelLayouttest.setHorizontalGroup(
                mainPanelLayouttest.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(mainPanelLayouttest.createSequentialGroup()
                    .addGroup(mainPanelLayouttest.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(mainPanelLayouttest.createSequentialGroup()
                            .addGap(280, 280, 280)
                            .addComponent(jbuttonx, javax.swing.GroupLayout.PREFERRED_SIZE , 160, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            
                    .addContainerGap(80, Short.MAX_VALUE))
            );        mainPanelLayouttest.setVerticalGroup(
                mainPanelLayouttest.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(mainPanelLayouttest.createSequentialGroup()
                    .addGap(61, 61, 61)
                    .addComponent(jbuttonx))                
            );
        }