2015-02-13 6 views
1

Я пытаюсь поставить JTable внутри JPanel, но появляется только в том случае, если я использую метод JOptionPane. Я также попытался добавить кнопку в таблицу, но это тоже не отображается. Я просто хочу, чтобы JTable открывался, и пользователь мог выбрать строку, которую я могу затем положить в строкуJTable открывается в новом окне, даже когда внутри JPanel?

У меня есть JFrame, но панель тоже добавлена, но это тоже не работает.

Thank you.

public static void main(String[] args) throws Exception { 
    // The Connection is obtained 

    ResultSet rs = stmt.executeQuery("select * from product_info"); 

    JPanel panel = new JPanel(); 
       panel.setLayout(new BorderLayout()); 

       JTable table = new JTable(buildTableModel(rs)); 
       System.out.println(table.getSelectedRow()); 
       JButton choose = new JButton("Choose"); 

       panel.add(choose, BorderLayout.SOUTH); // e.g. for the button 
       panel.add(new JScrollPane(table), BorderLayout.CENTER); 

       JOptionPane.showMessageDialog(null, new JScrollPane(table)); 

} 

public static DefaultTableModel buildTableModel(ResultSet rs) 
     throws SQLException { 

    ResultSetMetaData metaData = rs.getMetaData(); 

    // names of columns 
    Vector<String> columnNames = new Vector<String>(); 
    int columnCount = metaData.getColumnCount(); 
    for (int column = 1; column <= columnCount; column++) { 
     columnNames.add(metaData.getColumnName(column)); 
    } 

    // data of the table 
    Vector<Vector<Object>> data = new Vector<Vector<Object>>(); 
    while (rs.next()) { 
     Vector<Object> vector = new Vector<Object>(); 
     for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) { 
      vector.add(rs.getObject(columnIndex)); 
     } 
     data.add(vector); 
    } 

    return new DefaultTableModel(data, columnNames); 
} 
+0

re '" У меня есть JFrame, но панель тоже добавлена, но это тоже не работает. "' - пожалуйста, покажите код, где вы это делаете. '", но это тоже не работает. "' нам ничего не говорит. Вместо этого ** показать ** нас. –

ответ

2

Ваш JOptionPane содержит только таблицу (завернутое в JScrollPane), потому что вы сказали ей:

JOptionPane.showMessageDialog(null, new JScrollPane(table)); 

Если вы хотите, чтобы содержать панель, использование:

JOptionPane.showMessageDialog(null, panel); 
1

Если вы не используете JOptionPane, какое окно верхнего уровня у вас есть, что будет отображать что-нибудь? JPanel или JTable или JScrollPane не могут отображать себя, а должны быть в окне верхнего уровня для отображения, например JFrame или JDialog или (здесь) JOptionPane.

Решение: положите JPanel в JFrame, упакуйте JFrame и отобразите его. Редактировать: или показать JPanel в JOptionPane, как рекомендует immibis, 1+ к его ответу).

+0

У меня JFrame, его код просто не включен в код – Aceboy1993

+0

@ Aceboy1993, это довольно серьезная ошибка. Пожалуйста, покажите это. –

+0

@ Aceboy1993: Извините, но это не помогает: '' У меня JFrame, но панель тоже добавлена, но это тоже не работает. "' - вы должны показать свой ** код **, если мы у вас будет молитва угадать, что вы можете делать неправильно. –

Смежные вопросы