【问题标题】:Put JLabels and JTextField in same frame as JTable将 JLabels 和 JTextField 放在与 JTable 相同的框架中
【发布时间】:2014-01-14 10:16:37
【问题描述】:

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

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

我尝试使用JPanelJFrameJTable。但我无法让他们一起工作。

在 Swing/AWT 导入方面有哪些经验,对获得此结果的最佳方式有何建议?

【问题讨论】:

标签: java swing jlabel jtextfield layout-manager


【解决方案1】:

你可以....

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

将包含JLabelJTextFieldJPanel 使用FlowLayoutGridBagLayout 添加到SOUTH 位置

你可以...

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

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

【讨论】:

  • 这是一个非常简单的项目,应该尽可能简单。如果我填写字段,我想在表格中添加一行数据并计算一些东西。 GridBagLayout 会是一个很好的解决方案吗?
  • 向表格添加数据是无关紧要的,但是可以,GridBagLayout可以让你在两个字段上方添加表格...
【解决方案2】:

这可以通过BorderLayout 轻松完成。将JLabelJTextField 添加到具有默认FlowLayoutJPanel 并使用正确的BorderLayout 位置将JPanelJTabel 添加到框架中

类似的东西

    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 方法中执行类似操作

public void actionPerformed(ActionEvent e) {
    String data1 = textField1.getTex();
    String data2 = textField2.getTex();
    String data3 = textField3.getTex();

    Object[] row = {dat1, data2, data3};
    model.addRow(row);
}

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

【讨论】:

  • 非常感谢!我使用部分代码将所有字段和标签传递给我自己的项目。我现在得到了我想要的。
  • 如果它有助于解决问题,请accept回答。
猜你喜欢
  • 2017-12-24
  • 2012-09-26
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多