2014-06-06 3 views
-1

У меня есть рамка со столом, combobox, я хочу заполнить таблицу данными из базы данных с помощью combobox, но если я использую элемент itemlistener, я не вижу таблицу, без itemlistener и String sql="select * from Arlista" то я вижу таблицу с данными. (combob = ComboBox)Я не вижу свою таблицу

редактировать: теперь я получаю сообщение об ошибке на главный «„статический“разрешено только в постоянных объявлениях переменных Изменявших

public static class TableFromDatabase extends JFrame 
{   Vector columnNames = new Vector(); 
      Vector data = new Vector(); 
      String [] asd={"Arlista"}; 
      JComboBox combob=new JComboBox(asd); 

      String tesztvalt2; 
    public TableFromDatabase() { 

     combob.addItemListener(new ItemListener(){ 
      @Override 
      public void itemStateChanged(ItemEvent e){ 
       tesztvalt2=(combob.getSelectedItem()).toString(); 
     if (e.getItem().equals(tesztvalt2)) { 
       try { 

      String url="jdbc:sqlserver://FARKAS-PC;databaseName=Mozi;integratedSecurity=true;"; 
      String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
      Class.forName(driver); 
      Connection connection = DriverManager.getConnection(url); 

      String sql = "Select * from "+tesztvalt2+""; 
      Statement stmt = connection.createStatement(); 
      ResultSet rs = stmt.executeQuery(sql); 
      ResultSetMetaData md = rs.getMetaData(); 
      int columns = md.getColumnCount(); 

      for (int i = 1; i <= columns; i++) 
      { 
       columnNames.addElement(md.getColumnName(i)); 
      } 


      while (rs.next()) { 
       Vector row = new Vector(columns); 

       for (int i = 1; i <= columns; i++) 
       { 
        row.addElement(rs.getObject(i)); 
       } 

       data.addElement(row); 
      } 

      rs.close(); 
      stmt.close(); 
      connection.close(); 
     } 
     catch(Exception ex) 
     { 
      System.out.println(ex); 
     } 


     JTable table = new JTable(data, columnNames) 
     { 
      public Class getColumnClass(int column) 
      { 
       for (int row = 0; row < getRowCount(); row++) 
       { 
        Object o = getValueAt(row, column); 

        if (o != null) 
        { 
         return o.getClass(); 
        } 
       } 

       return Object.class; 
      } 
     }; 

     JScrollPane scrollPane = new JScrollPane(table); 
     getContentPane().add(scrollPane); 

     JPanel buttonPanel = new JPanel(); 
     getContentPane().add(buttonPanel, BorderLayout.SOUTH); 
     JPanel panel = (JPanel)getContentPane(); 
     panel.add(buttonPanel, BorderLayout.SOUTH); 
     panel.revalidate(); 
     panel.repaint(); 
    } 
      } 


    public static void main(String[] args) 
    { 
     TableFromDatabase frame = new TableFromDatabase(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     frame.pack(); 
    } 
     }); 
       }   
     } 

ответ

1

Код скопирован из Table From Database просто предназначены для показать основы того, как вызвать SQL и создать JTable, и добавить его в кадр ПЕРЕД кадром. Это означает, что метод pack() в этом коде вызовет диспетчер компоновки, так что новая созданная таблица будет иметь допустимый размер.

Вы пытаетесь динамически создавать JTable в видимом графическом интерфейсе. Поэтому вы не можете просто добавить таблицу/прокрутку в рамку. Вам также необходимо обновить() все компоненты. Основным кодом будет:

JPanel panel = (JPanel)getContentPane(); 
panel.add(buttonPanel, BorderLayout.SOUTH); 
panel.revalidate(); 
panel.repaint(); 
Смежные вопросы