【问题标题】:populating JTable using values from another method [duplicate]使用来自另一种方法的值填充 JTable [重复]
【发布时间】:2017-04-06 03:22:46
【问题描述】:

我正在使用 Eclipse 和 Swing 创建这个项目。我正在尝试填充 JTable。我在方法Display_UserInfo_in_JTable() 中从数据库中获取了值。

但我不知道如何使用这种方法来填充我的 JTable。我认为该方法应该有一个返回类型,但我不知道该怎么做?

package view;

import controller.*;
import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class TableView {

    private JFrame frame;
    private JTable table;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TableView window = new TableView();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    private ArrayList<UserInfo> UserInfoList()
    {
        try
        {
            UserInfo userinfo;
            ArrayList<UserInfo> UserInfoList = new ArrayList<UserInfo>();
            Connection sqlCon = DB_con.getSQLConnection();
            PreparedStatement ps = sqlCon.prepareStatement("select id,name,username,contact,gender from temp");

            ResultSet rs = ps.executeQuery();
            while(rs.next())
            {
                userinfo = new UserInfo(
                                        rs.getInt("id"),
                                        rs.getString("name"),
                                        rs.getString("username"),
                                        rs.getString("contact"),
                                        rs.getString("gender")
                                        );
                UserInfoList.add(userinfo);
            }
            return UserInfoList;
        }
        catch(Exception ex)
        {
            System.out.println(ex.toString());
            return null;
        }       
    }

    public void Display_UserInfo_in_JTable()
    {
        try
        {
            ArrayList<UserInfo> list = UserInfoList();
            DefaultTableModel dtm = new DefaultTableModel();
            Object row[] = new Object[5];

            for(int i = 0 ; i < list.size(); i++)
            {
                row[0] = list.get(i).getId();
                row[1] = list.get(i).getName();
                row[2] = list.get(i).getUsername();
                row[3] = list.get(i).getContact();
                row[4] = list.get(i).getGender();

                dtm.addRow(row);
            }
            table.setModel(dtm);
        }
        catch(Exception ex)
        {
            System.out.println(ex.toString());
        }
    }

    /**
     * Create the application.
     */
    public TableView() {
        initialize();
        Display_UserInfo_in_JTable();

    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 598, 402);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JPanel panel = new JPanel();
        panel.setBounds(10, 11, 562, 341);
        frame.getContentPane().add(panel);
        panel.setLayout(null);

        table = new JTable();
        //table.setBounds(49, 163, 92, -97);
        JScrollPane jsp = new JScrollPane(table);
        panel.add(table);
    }
}

我在方法Display_UserInfo_in_JTable()中添加了table.setModel(dtm);,还是不能得到结果。

【问题讨论】:

标签: java swing jtable


【解决方案1】:

你的代码问题太多了:

  1. 编码和命名约定
  2. displayUserInfoInJTable() 永远不会被调用(或者至少您没有发布该代码)
  3. 表格模型不应该这样编码
  4. 没有列标识符,只有行
  5. 您使用了绝对布局(布局设置为 null),但您的 边界为负 -97,这可能是您的主要问题

对于第 5 点,要么使用标准布局,要么相应地设置边界。

【讨论】:

  • 感谢您的建议。我已经将方法放在构造函数中并注释了 JTable 的 setBounds 属性。还是拿不到表。请帮忙。
  • 遵循上述第 5 点的建议。使用标准布局或仅注释掉 panel.setLayout(null);
  • 评论了代码panel.setLayout(null); 仍然无法正常工作。我很困惑。请您提供在Eclipse中使用数据库填充JTable的链接。大多数教程都使用 Netbeans。
  • 你添加了dtm.setColumnIdentifiers()table.setModel(dtm)
猜你喜欢
  • 2013-05-05
  • 2016-10-03
  • 2016-05-25
  • 1970-01-01
  • 2015-04-18
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多