将JTextField行添加到JScrollPane

nun*_*nos 2 java swing jtable jtextfield layout-manager

我需要一些关于选择Swing Components以获得以下内容的建议:

我有类似"表"结构的东西,每次单击"添加"按钮时,应在"表格"上插入另一个"行".每行由2组成JTextField.我使用GridLayout(下图中使用的布局)的问题是,如果我添加另一行,那么文本字段的高度将缩短,我不想要(右边的图片),I想要为每一行保留相同的高度.

我想要发生的是将额外的行显示在最后一行之下,以便我可以使用JScrollPane和滚动来查看它.

在此输入图像描述

我应该使用其他布局而不是GridLayout吗?也许AbsoluteLayout甚至使用表组件?

谢谢.

Hov*_*els 7

我会使用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)