java - 将 JTextFields 行添加到 JScrollPane

标签 java swing jtable jtextfield layout-manager

我需要一些关于选择哪些 Swing 组件的建议,以实现以下目标:

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

我想要的是让额外的行出现在最后一行的下方,这样我就可以使用 JScrollPane 并滚动查看它。

enter image description here

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

谢谢。

最佳答案

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

关于java - 将 JTextFields 行添加到 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11286888/

相关文章:

java - 动态添加行到 JTable - 为什么它们一次出现?

java - 从 JPanel 之外的类对象访问变量

java - 自定义 JDBCUserStoreManager 无法创建 jar

java - 如何用eclipse设置JFrame背景图片

java - 如何在 JFrame 中放置一个表格和 3 个按钮

java - 无法使用 setValueAt() 编辑我的 JTable 数据

java - 打印出 Xpath 节点

java - 使用@Parameter 注解或ITestContext 读取TestNG 配置文件?

java - 更新 JList 组件

java - JTable 在 setBackground() 上指定列号和行号