我需要一些关于选择Swing Components以获得以下内容的建议:
我有类似“表”结构的东西,每次单击“添加”按钮时,应在“表格”上插入另一个“行”。每行由2 JTextField
组成。我使用GridLayout(下图中使用的布局)的问题是,如果我添加另一行,那么文本字段的高度将缩短,我不想要(右边的图片),I想要为每一行保留相同的高度。
我想要发生的是将额外的行显示在最后一行之下,以便我可以使用JScrollPane
并滚动查看它。
我应该使用其他布局而不是GridLayout吗?也许AbsoluteLayout甚至使用表组件?
感谢。
答案 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);
这会让你的桌子滚动....