2

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

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

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

在此处输入图像描述

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

谢谢。

4

3 回答 3

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();
         }
      });
   }
}
于 2012-07-02T01:22:21.230 回答
2

假设您将 JTextField 添加到 Jpanel 中,并将 Jpanel 添加到 JScrollPane 中。现在您将为您的 JScrollPane 设置一个 preferredSize(因为您想要一个固定的可显示区域),但是您根据当时放置的 JTextField 的数量动态地修改 JPanel 的高度。

换句话说,如果您在 GridLayout 为 2 列的 Jpanel 集中有 2 个 JTextField;你的 JTextField 会占据整个 Jpanel 的高度;但如果你再添加 2 个,他们将不得不为这两个腾出空间,因此会缩短。

请注意,JPanel 中有 2 行设置为“100”高度,每行将使用“50”。如果您添加另一行但还将 JPanel 的高度修改为“150”,则每个 JTextField 仍将占用“50”像素。

我是新手,我可能不是 100% 正确;如果是这样的话“对不起”。我只是想要帮助。

于 2012-11-16T21:08:08.557 回答
1

试试这个....

JScrollPane scroll = new JScrollPane(Your_Table);

这将使您的表格滚动....

于 2012-07-02T07:46:35.223 回答