2016-10-29 3 views
-1

Я добавил JScrollPane для своего JTable. Он появился, но не прокручивается.JScrollPane не принадлежит JTable

public class AddDepartment extends JFrame { 
    private static JPanel contentPane; 
    private Connection DBConnection; 
    static Connection conn = new DBConnection().connect(); 
    static PreparedStatement pstmt = null; 
    static ResultSet rs = null; 
    static DefaultTableModel model = null; 
    private static JTable tableDepartments; 
    private static JScrollPane scrollPane; 

    public AddDepartment() throws SQLException { 
     model = new DefaultTableModel(); 
     tableDepartments = new JTable(model); 
     tableDepartments.setRowSelectionAllowed(false); 
     tableDepartments.setEnabled(false); 
     tableDepartments.setSize(new Dimension(197, 66)); 
     tableDepartments.setLocation(161, 34); 
     tableDepartments.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

     updateDepartments(); 
    } 

    private static void updateDepartments() throws SQLException { 
     try { 
      String sql = "SELECT Name FROM Departments"; 
      pstmt = conn.prepareStatement(sql); 
      rs = pstmt.executeQuery(); 

      model.addColumn("Name"); 
      while (rs.next()) { 
       String departmentName = rs.getString("Name"); 
       model.addRow(new Object[] { departmentName }); 
      } 
      if (tableDepartments.getRowCount() > 5) { 
       scrollPane = new JScrollPane(tableDepartments); 
       scrollPane.setSize(new Dimension(10, 50)); 
       scrollPane.setLocation(360, 34); 
       scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
       contentPane.add(scrollPane); 
      } 
      contentPane.add(tableDepartments); 
     } catch (Exception ex) { 
      JOptionPane.showMessageDialog(null, ex); 
     } finally { 
      rs.close(); 
      pstmt.close(); 
     } 
    } 
} 

Отделы стол:

Departments table

This is how it looks like

На рисунке выше показано, как это выглядит. Я не могу прокрутить вниз.

+1

(1-) Это НЕ SSCCE. Сколько раз вам нужно сказать, что мы не можем выполнить этот код, потому что у нас нет доступа к вашей базе данных !!! Ваш вопрос касается прокрутки, которая абсолютно не связана с получением данных из базы данных. Вам было сказано несколько раз публиковать свой SSCCE с жестко закодированными данными, чтобы мы могли выполнить ваш код, чтобы увидеть, что именно происходит. Если вы хотите помочь приложить усилия, вместо того, чтобы задавать 4 вопроса по одной теме. При правильном SSCCE это было бы решено с первым вопросом. – camickr

ответ

2

Ограничивая свой JTable размер:

tableDepartments.setSize(new Dimension(197, 66)); 

предотвратить его от размера по мере необходимости и тем самым предотвратить его прокрутки. Не делайте этого, но вместо этого давайте расширяться до нужного размера. Если это не исправить вашу проблему, вам нужно будет создать и опубликовать действительный sscce, программу, не имеющую кода базы данных, без кода, не имеющего отношения к проблеме, и который демонстрирует вашу проблему для нас.

Другие вопросы включают в себя брутто по использованию статического модификатора, и ваши задания абсолютных размеров и позиций (и, вероятно использование нулевых макетов), но это еще вопрос


Редактировать
Вы добавив JTable дважды в графический интерфейс, один раз на JScrollPane (хорошо) и снова на ContentPane (плохо), и это приводит вас в замешательство, так как вы можете только добавить компонент в один контейнер. Второй add удаляет jtable из jscrollpane. Решение: не делайте этого. Добавьте jscrollpane в contentPane, не JTable.

Так избавиться:

contentPane.add(tableDepartments); 
+0

Но если я удаляю строку, которую вы написали, таблица исчезает. Можете ли вы также объяснить, что вы хотели сказать в своем последнем абзаце? – Munchmallow

+0

@Munchmallow: затем создайте и опубликуйте [mcve] a [sscce] (http://sscce.org). Проверьте ссылки. Повторите последние утверждения, если вы используете нулевые макеты и задаете размеры компонентов, вы создаете жесткие gui, которые почти невозможно отлаживать или улучшать. При использовании статического кода увеличивается возможность подключения кода и, следовательно, риски ошибок. –

+0

@Munchmallow: дерьмо, вы добавляете JTable ** Twice ** в GUI, один раз в jscrollpane (хорошо), а затем снова в contentpane (плохо). Не делай этого! –

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