如何设置JTable中特定单元格的值? [英] How to set the value of specific cell in JTable?

查看:94
本文介绍了如何设置JTable中特定单元格的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只想知道如何update specific cell in JTable

就像我想将cell(1,1)设置为具有Test Value的值一样.

like if I want to set the cell(1,1) to have the value of Test Value.

我的代码像这样,但对我不起作用:

my code goes like this but does not work for me:

String s = "Test Value";
tableName.setValueAt((Object)s, 1, 1);

推荐答案

您可能正在使用DefaultTableModel#setValueAt()

DefaultTableModel model = (DefaultTableModel)tableName.getModel();

model.setValueAt(s, 1, 1);

您首先需要使用DefaultTableModel

 DefaultTableModel model = new DefaultTableModel(data, cols);
 JTable table = new JTable(model);


您可以运行此示例以查看


You can run this example to see

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class TestTable {
    String[] cols = {"Col 1", "Col2"};
    String[][] data = {{"Hello", "World"},{"Hello", "World"}};
    DefaultTableModel model = new DefaultTableModel(data, cols);
    JTable table = new JTable(model);
    JButton button = new JButton("Set Value at 1, 1");
    JTextField text = new JTextField(20);

    public TestTable() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(table, BorderLayout.NORTH);
        panel.add(text, BorderLayout.CENTER);
        panel.add(button, BorderLayout.SOUTH);

        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                String value = text.getText();
                model.setValueAt(value, 1, 1);
            }
        });

        JFrame frame = new JFrame();
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.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 TestTable();
            }
        });
    }
}

编辑使用产品类别.

我创建了一个具有8个字段的产品类,我要做的是使用循环将ArrayList中的数据填充到我的表中"

"I created a class Products with 8 fields, What I want to do is populate the data in ArrayList to my table using loop"

您要使用.addRow动态添加行.您需要从每个Product中获取每个字段并使其连续.然后像这样添加该行.注意:您应该使用getters,但是为了简洁起见,我没有使用.

You want to add rows dynamically by using .addRow. You need to get each field from each Product and make it a row. Then add that row like this. Note: You should use getters but for brevity, I didn't.

for (Product p : list) {
    String data1 = p.field1;
    int data2 = p.field2;
    int data3 = p.field3;
    int data4 = p.field4;
    int data5 = p.field5;
    int data6 = p.field6;
    int data7 = p.field7;
    int data8 = p.field8;

    Object[] row = {data1, data2, data3, data4, data5, data6, data7, data8};
    model.addRow(row);

}


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class TestTable {
    String[] cols = {"Col 1", "Col 2", "Col 3", "Col 4", "Col 5", "Col 6", "COl 7", "Col 8"};
    DefaultTableModel model = new DefaultTableModel(cols, 0);
    JTable table = new JTable(model);
    JButton button = new JButton("Set Table");
    List<Product> list;

    public TestTable() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JScrollPane(table), BorderLayout.CENTER);
        panel.add(button, BorderLayout.SOUTH);

        list = getOneRow();

        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                for (Product p : list) {
                    String data1 = p.field1;
                    int data2 = p.field2;
                    int data3 = p.field3;
                    int data4 = p.field4;
                    int data5 = p.field5;
                    int data6 = p.field6;
                    int data7 = p.field7;
                    int data8 = p.field8;

                    Object[] row = {data1, data2, data3, data4, data5, data6, data7, data8};
                    model.addRow(row);

                }
            }
        });

        JFrame frame = new JFrame();
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public List<Product> getOneRow() {
        List<Product> list = new ArrayList<>();
        list.add(new Product("Product 1", 1, 2, 3, 4, 5, 6, 7));
        list.add(new Product("Product 2", 1, 2, 3, 4, 5, 6, 7));
        list.add(new Product("Product 3", 1, 2, 3, 4, 5, 6, 7));
        list.add(new Product("Product 4", 1, 2, 3, 4, 5, 6, 7));


        return list;
    }


    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
               new TestTable();
            }
        });
    }
}

class Product {
    String field1;
    int field2;
    int field3;
    int field4;
    int field5;
    int field6;
    int field7;
    int field8;

    public Product(String s, int f2, int f3, int f4, int f5, int f6, int f7, int f8) {
        field1 = s;
        field2 = f2;
        field3 = f3;
        field4 = f4;
        field5 = f5;
        field6 = f6;
        field7 = f7;
        field8 = f8;

    }  
}

这篇关于如何设置JTable中特定单元格的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆