【问题标题】:Adding rows of JTextFields to a JScrollPane将 JTextField 行添加到 JScrollPane
【发布时间】:2012-07-02 11:12:17
【问题描述】:

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

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

我希望将多余的行显示在最后一行下方,以便我可以使用 JScrollPane 并滚动查看它。

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

谢谢。

【问题讨论】:

  • 问题:您真的想要具有那么大高度的 JTextField 吗?为什么不使用 JTable?然后设置行高属性。您是否尝试过嵌套布局,这通常是简化复杂 Swing 布局问题的好方法?

标签: java swing jtable jtextfield layout-manager


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这个....

    JScrollPane scroll = new JScrollPane(Your_Table);
    

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

    【讨论】:

      【解决方案3】:

      假设您将 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% 正确;如果是这样的话“对不起”。我只是想要帮助。

      【讨论】:

        猜你喜欢
        • 2017-03-03
        • 1970-01-01
        • 2012-11-07
        • 2012-11-17
        • 2013-12-17
        • 2014-01-08
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多