【问题标题】:How to fill a jframe table from an arraylist?如何从数组列表中填充 jframe 表?
【发布时间】:2015-07-22 23:52:42
【问题描述】:

我有一个使用 java GUI 创建的 jtable,我需要从数组列表中填充。我不熟悉java,也不知道如何填写jTable。我不知道我是否需要使用 TableModel 或只使用 JTable table = new JTable(data, columnNames)。这是我的代码:

 public void filltable(){

    ArrayList A=new ArrayList();
    jframe4 j=new jframe4();
    String m=j.getloggedemail();

  //  A=s.getEmails(m);
  //this is an example of my arraylist

    A.add("sender@gmail.com");
    A.add("my subject");
    A.add("hiiii");

    try {
        String[] columnNames = {"Sender",
                        "Subject",
                        "Body",
                     };

         //here I need to fill my table


            }

        catch(Exception e) {
           JOptionPane.showMessageDialog(null, e);
        }
    }

这是我需要填写的jTable1的声明:

   jTable1.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null}
        },
        new String [] {
            "Sender", "Subject", "Body"
        }
    ));
    jScrollPane1.setViewportView(jTable1);

【问题讨论】:

  • 有了list,填表比较麻烦。如何定义一行。一行将有一组字段。在列表中你将如何分成行。?
  • A.add("sender@gmail.com"); A.add("my subject"); A.add("hiiii"); 这些不应该是ArrayList 的连续行/元素,而是单个Email 对象的属性。然后,您可以从 Email 对象的集合创建一个表模型。
  • 我投票决定将此问题作为离题结束,因为此任务在 Java 教程中通过How to Use Tables: Creating a Table Model 得到了很好的描述。

标签: java swing arraylist jtable jframe


【解决方案1】:

我不知道我需要使用 TableModel 还是只使用 JTable table = new JTable(data, columnNames)

取决于你的需要,你可以做任何一个。我将演示如何使用后者。如果您想使用自己的TableModel,请参阅@Andrew Thompson 评论中的链接。

public class Example extends JFrame {

    Example() {

        String[] colNames = new String[] {"Sender", "Subject", "Body"};

        List<String> list = new ArrayList<>();
        list.add("sender@gmail.com");
        list.add("my subject");
        list.add("hiiii");
        list.add("sender2@gmail.com");
        list.add("my subject2");
        list.add("hiiii2");

        String[][] rowData = new String[list.size() / colNames.length][colNames.length];
        for (int i = 0; i < rowData.length; i++) {
            for (int j = 0; j < rowData[i].length; j++) {
                rowData[i][j] = list.get(i * colNames.length + j);
            }
        }

        JTable table = new JTable(rowData, colNames);

        add(new JScrollPane(table));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {

        new Example();
    }
}

请注意,如果列表不包含一行中的 3 个元素,则不会显示整行。

【讨论】:

    【解决方案2】:

    您可以使用自定义 bean 类并指定您的数据,然后将其加载到您的表中。甚至我也做过类似的工作。我已针对您的数据进行了修改。

    public class ListToJtable {
    public static void main(String[] args) {
        List<Message> messags = new ArrayList<>();
        Message message = new Message("sender@gmail.com", "my subject", "hiiii");
        messags.add(message);
        Message message1 = new Message("sender1@gmail.com", "my subject1",
                "hiiii1");
        messags.add(message1);
        JTable t = new JTable();
        t.setModel(new javax.swing.table.DefaultTableModel(
                new Object[][] {}, 
                new String[] { "Sender", "Subject", "Body" }));
        addToTable(messags, t);
        JPanel panel = new JPanel();
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setViewportView(t);
        panel.add(scrollPane);
    
        JFrame frame = new JFrame();
        frame.add(panel);
        frame.setSize(500, 500);
        frame.setVisible(true);
    }
    
    public static void addToTable(List<Message> messags, JTable jTable) {
        for (Message message : messags) {
            ((DefaultTableModel) jTable.getModel()).addRow(new Object[] {
                    message.getSender(), message.getSubject(),
                    message.getBody() });
        }
    }
    
    }
    
    
    public class Message {
    
    String sender;
    String subject;
    String body;
    public Message(String a1,String a2,String a3){
        sender = a1;
        subject = a2;
        body = a3;
    }
    public String getSender() {
        return sender;
    }
    public void setSender(String sender) {
        this.sender = sender;
    }
    public String getSubject() {
        return subject;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }
    public String getBody() {
        return body;
    }
    public void setBody(String body) {
        this.body = body;
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多