将JLabels和JTextField放在与JTable相同的框架中

时间:2014-01-14 10:16:37

标签: java swing jlabel jtextfield layout-manager

我正在尝试在JTable或类似的GridLayout下面放置一些文字字段和标签。

当我在字段中键入数据时,我想将它们传递给表。我现在在面板中有文本字段和标签,但是想在上面添加一个表。

我尝试使用JPanelJFrameJTable。但我不能让他们一起工作。

有关Swing / AWT导入的经验,有关获得此结果的最佳方法的任何建议吗?

2 个答案:

答案 0 :(得分:5)

你可以......

使用BorderLayout,将JTable(包含在JScrollPane中)保留在NORTH位置。

使用JPanelJLabel JTextField位置添加FlowLayout,其中包含GridBagLayoutSOUTH

你可以......

使用GridBagLayout,将所有组件添加到单个面板中......

您应该查看Laying Out Components Within a Container了解更多详情......

答案 1 :(得分:2)

这可以通过BorderLayout轻松完成。将JLabelJTextField添加到JPanel及其默认FlowLayout,并使用正确的{JPanelJTabel添加到框架中{1}}职位

像这样的东西

BorderLayout

朗姆酒这个例子

    JTable table = new JTable(data, cols);
    JTextField jtf = new JTextField(20);
    JLabel label = new JLabel("This is a text field");
    JPanel panel = new JPanel();
    panel.add(label);
    panel.add(jtf);

    JFrame frame = new JFrame();
    frame.add(panel, BorderLayout.SOUTH);                     <----
    frame.add(new JScrollPane(table), BorderLayout.CENTER);   <----

要动态添加行,您只需使用基本import java.awt.BorderLayout; import javax.swing.JFrame; import static javax.swing.JFrame.EXIT_ON_CLOSE; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.SwingUtilities; public class TableWithOthers { public TableWithOthers() { Object[][] data = {{"Hello", "World"}, {"Hello", "World"}, {"Hello", "World"}, {"Hello", "World"}}; String[] cols = {"Hello", "World"}; JTable table = new JTable(data, cols); JTextField jtf = new JTextField(20); JLabel label = new JLabel("This is a text field"); JPanel panel = new JPanel(); panel.add(label); panel.add(jtf); JFrame frame = new JFrame(); frame.add(panel, BorderLayout.SOUTH); frame.add(new JScrollPane(table), BorderLayout.CENTER); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new TableWithOthers(); } }); } } 即可。如果您知道列名称,则可以执行此类操作

DefaultTableModel

然后要添加行,只需在按钮String[] cols = {"Col 1, "Col 2", "Col 3}; DefaultTableModel model = new DefaultTableModel(cols, 0); JTable table = new JTabel(model); 方法

中执行此类操作
actionPerformed

只需向模型中添加行,动态更新表格