将JTextField行添加到JScrollPane

时间:2012-07-02 01:14:14

标签: java swing jtable jtextfield layout-manager

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

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

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

enter image description here

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

感谢。

3 个答案:

答案 0 :(得分: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();
         }
      });
   }
}

答案 1 :(得分:2)

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

换句话说,如果在Jpanel集合中有2个JTextField,GridLayout为2列;你JTextField将占据Jpanel的整个高度;但是如果再加上2个,他们将不得不为这两个人留出空间,从而缩短。

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

我是新手,我不是100%正确的可能性;如果是“抱歉”的情况。我只是想要帮助。

答案 2 :(得分:1)

试试这个......

JScrollPane scroll = new JScrollPane(Your_Table);

这会让你的桌子滚动....