2011-09-01 28 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的常见问题解答。 (摆脱图像背后的混乱。) –