Я использую CamTick ListTableModel и RowTableModel, НЕТ ДАННЫХ В JTABLE - PullRequest
1 голос
/ 01 июля 2011

Я пытаюсь использовать ListTableModel и пытался следовать некоторым примерам в Интернете, но мне все еще трудно показывать данные 'resultSet' в моей Jtable.Я использую метод model-view-controller для создания приложения с графическим интерфейсом в NetBeans.Все мои компоненты GUI размещены в представлениях, и контроллер обрабатывает любые обновления, а также видимость этого представления.Класс модели имеет все запросы и отвечает за прямой доступ к базе данных с использованием JDBC.

«Jtable» «searchTable» создается и инициализируется внутри класса представления и доступен для моего контроллера через метод (getSearchTable ()).

public JTable getSearchTable(){
// view class
return searchTable;

}

У меня есть "ListTableModel", созданная внутри класса контроллера и следующая за учебником Camick.

private Product_View productView;
private Product_Model productModel;
    private Product product;

public Product_Controller(Product_Model model, Product_View view){
    this.productModel = model;
    this.productView = view;

    view.addSaveListener(new SaveListener());
    view.addCloseListener(new CloseListener());
            view.addSearchSingleListener(new SearchListener());
}

public void displayProductView(){
    this.productView.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            this.productView.setVisible(true);
} class SearchListener implements ActionListener {

    public SearchListener() {
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        ListTableModel model = null;
        String prodName = productView.getProductName();
        JTable tempTable = productView.getSearchTable();

        model = productModel.getProduct(prodName, model);
        tempTable = new JTable(model);

    }
}

Наконец, метод "getProduct" находится внутри моделиclass и вызывается моим классом контроллера.

public ListTableModel getProduct(String productName, ListTableModel model){
    String query = "SELECT * FROM Products WHERE name='" + productName + "';";

    Statement stmt;

    try {
        stmt = this.conn.createStatement();
        stmt.executeQuery (query);
        ResultSet rs = stmt.getResultSet();
                    writeResultSet(rs);
        model = ListTableModel.createModelFromResultSet(rs);  
        rs.close ();
        stmt.close ();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }           
    return model;
} 

Jtable ничего не возвращает, как я могу просмотреть мои данные ResultSet (я распечатал значения, возвращаемые "writeResultSet" на консоль, и такзапрос работает правильно?

1 Ответ

2 голосов
/ 01 июля 2011

Создание таблицы не добавляет таблицу в графический интерфейс.Где-то в вашем коде вам нужен код, такой как:

frame.add( table );

Если вы обновляете существующую таблицу, вы не создаете новую таблицу, все, что вы делаете:

table.setModel(...);

после воссозданиямодель.

Редактировать:

Чтобы проверить ваш SQL, создайте простой SSCCE с кодом, похожим на:

ListTableModel model = ListTableModel.createModelFromResultSet( resultSet );
JTable table = new JTable( model );
frame.add( new JScrollPane( table ) );
frame.setSize(...);
frame.setVisible( true );
...