我想使用Swing实现以下屏幕设计:
----------------------------------------------- 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
点击ADD ROW BUTTON一套新的JTextfield&浏览按钮被添加到适当的文件类型部分,每个文件类型部分是一个具有miglayout的Jpanel,但问题是添加新行时Jpanel不会展开,因此新行仅显示部分而屏幕的部分显示为不被推倒。
如何实现同样的目标。 请帮忙。
Rajiv Jha
答案 0 :(得分:3)
我并不完全明白你需要什么。但试试这个例子。它应该做你想要的。
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;
}
}