2011-09-01 65 views
0

我想實現下面的屏幕設計採用擺動:搖擺的JPanel自動調整內容問題

 
----------------------------------------------- 
File Type 1: JTextfield1 Browse Button1 ADD ROW BUTTON 
       JTextfield2 Browse Button2 

File Type 2: JTextfield3 Browse Button3 ADD ROW BUTTON 
       JTextfield4 Browse Button4 

File Type 1: JTextfield5 Browse Button5 ADD ROW BUTTON 
       JTextfield6 Browse Button6 

添加行按鈕的點擊一組新的JTextField,&瀏覽按鈕在相應的文件類型部分添加得到,每個文件類型部分是一個具有miglayout的Jpanel,但問題在於添加新行後,Jpanel不擴展,因此新行只能部分顯示,屏幕上的部分dowm不會被推下。

如何去實現相同。 請幫忙。

拉吉夫Jha

+0

你可以發佈一些代碼? – bragboy

回答

2

我不完全明白你需要什麼。但試試這個例子。它應該做你想要的。

enter image description here enter image description here

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class DynaFrame extends JFrame{ 

    private JPanel basePnl = new JPanel(); 

    public DynaFrame(){ 
     this.setTitle("Dynamic panel addition"); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //this.setSize(600, 700); 
     this.add(getMainPanel()); 
     this.setLocationRelativeTo(null); 
     this.pack(); 
     this.setVisible(true); 
    } 

    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new DynaFrame(); 
      } 
     }); 
    } 

    public JPanel getMainPanel(){ 
     basePnl.setLayout(new BoxLayout(basePnl, BoxLayout.Y_AXIS)); 
     basePnl.add(getRowPanel()); 
     return basePnl; 
    } 

    public JPanel getRowPanel(){ 
     JPanel pnl = new JPanel(); 
     GridLayout gLayout = new GridLayout(); 
     gLayout.setColumns(4); 
     gLayout.setRows(1); 
     pnl.setLayout(gLayout); 
     pnl.add(new JLabel("Filetype")); 
     pnl.add(new JTextField()); 
     pnl.add(new JButton("Browse")); 
     JButton addBtn = new JButton("Add"); 
     addBtn.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       basePnl.add(getRowPanel()); 
       DynaFrame.this.pack(); 
      } 
     }); 
     pnl.add(addBtn); 
     return pnl; 
    } 
} 
+2

1)thisFrame = this;'? 2)應該在EDT上構建(並更新)Swing GUI。 3)關於製作截圖的提示,請參閱[如何創建截圖?](http://meta.stackexchange.com/questions/99734/how-do-i-create-a-screenshot-to-illustrate-a - 郵政)常見問題。 4)調用pack()的替代方法是使用'JScrollPane'。 –

+0

@Andrew Thompson:#1)我想在按鈕偵聽器的當前幀中再次做一個包。這就是爲什麼我把它放在那裏。 #2)將研究這一點並重構代碼。 #3)我做了一個體面的截圖,你想說什麼建議。 #4)同意。將嘗試重構。 – bragboy

+1

1)交換'DynaFrame.this.pack();'3)的當前代碼是的,他們很棒(得到了我的贊成票),但他們可能*非常出色*我指的是在提交屏幕截圖之前提到將UI用於白色BG的常見問題解答。 (擺脫圖像背後的混亂。) –