2011-03-24 22 views
0
import java.awt.LayoutManager; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class LayoutTest extends JFrame { 

    public LayoutTest() { 
     initComponents(); 
    } 

    private void initComponents() { 

     jPanel1 = new javax.swing.JPanel(); 
     jButton = new JButton(); 

     jPanel1.setBackground(new java.awt.Color(204, 204, 255)); 
     jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); 

     jButton.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       LayoutManager tempGroupLayout = jPanel1.getLayout(); 
       jPanel1.setLayout(layoutManager2); 
       layoutManager = layoutManager2; 
       layoutManager2 = tempGroupLayout; 
      } 
     }); 

     javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
     jPanel1.setLayout(jPanel1Layout); 
     jPanel1Layout.setHorizontalGroup(
       jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). 
       addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup(). 
       addContainerGap(286, Short.MAX_VALUE). 
       addComponent(jButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))); 
     jPanel1Layout.setVerticalGroup(
       jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). 
       addComponent(jButton, javax.swing.GroupLayout.DEFAULT_SIZE, 442, Short.MAX_VALUE)); 
     layoutManager = jPanel1Layout; 

     javax.swing.GroupLayout jPanel1Layout2 = new javax.swing.GroupLayout(jPanel1); 
     jPanel1Layout2.setHorizontalGroup(
       jPanel1Layout2.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). 
       addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout2.createSequentialGroup(). 
       addComponent(jButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))); 
     jPanel1Layout2.setVerticalGroup(
       jPanel1Layout2.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). 
       addComponent(jButton, javax.swing.GroupLayout.DEFAULT_SIZE, 442, Short.MAX_VALUE)); 
     layoutManager2 = jPanel1Layout2; 
     getContentPane().add(jPanel1); 
     pack(); 
    } 

    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new LayoutTest().setVisible(true); 
      } 
     }); 
    } 
    private JButton jButton; 
    private JPanel jPanel1; 
    private LayoutManager layoutManager; 
    private LayoutManager layoutManager2; 
} 

此代碼不起作用,爲什麼? 但是,如果我每次在actionListener中創建一個佈局,它將工作。保存LayoutManager

+0

只需注意,如果您導入javax.swing.X文件,則可以直接使用X(例如'BorderLayout'而不是'javax.swing.BorderLayout') – MByD 2011-03-24 19:36:26

回答

1

切換layoutmanager後,您只需要致電validate()即可。

public void actionPerformed(ActionEvent e) { 
    LayoutManager tempGroupLayout = jPanel1.getLayout(); 
    jPanel1.setLayout(layoutManager2); 
    getContentPane().validate(); // <= added line 
    layoutManager = layoutManager2; 
    layoutManager2 = tempGroupLayout; 
} 

注意:在發佈的代碼中缺少一些行(例如jButton的初始化)。

+0

它不起作用 – itun 2011-03-24 19:29:57

+0

@itun你是什麼意思「這是行不通的」?它不編譯?它不顯示按鈕?如果你點擊它不改變佈局? – Howard 2011-03-24 19:31:02

+0

我按下按鈕,但它不會改變佈局 – itun 2011-03-24 19:33:37