nun*_*nos 2 java swing jtable jtextfield layout-manager
我需要一些关于选择Swing Components以获得以下内容的建议:
我有类似"表"结构的东西,每次单击"添加"按钮时,应在"表格"上插入另一个"行".每行由2组成JTextField.我使用GridLayout(下图中使用的布局)的问题是,如果我添加另一行,那么文本字段的高度将缩短,我不想要(右边的图片),I想要为每一行保留相同的高度.
我想要发生的是将额外的行显示在最后一行之下,以便我可以使用JScrollPane和滚动来查看它.

我应该使用其他布局而不是GridLayout吗?也许AbsoluteLayout甚至使用表组件?
谢谢.
我会使用JTable并将行高设置为您想要的任何值.例如:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class TableEg {
private static final int ROW_HEIGHT = 40;
private static final String[] TABLE_COLUMNS = {"Foo", "Bar"};
private static void createAndShowGui() {
final DefaultTableModel tableModel = new DefaultTableModel(TABLE_COLUMNS, 2);
JTable table = new JTable(tableModel );
table.setRowHeight(ROW_HEIGHT);
JScrollPane scrollpane = new JScrollPane(table);
JButton addRowBtn = new JButton(new AbstractAction("Add Row") {
@Override
public void actionPerformed(ActionEvent arg0) {
tableModel.addRow(new String[]{"", ""});
}
});
JPanel btnPanel = new JPanel();
btnPanel.add(addRowBtn);
JFrame frame = new JFrame("TableEg");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(scrollpane, BorderLayout.CENTER);
frame.getContentPane().add(btnPanel, BorderLayout.PAGE_END);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)