Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Как правильно работать с jScrollPane ?


Автор: erslgoeirjh 28.1.2011, 14:42
Есть код:

Код

public Object[][] data = { { "" }, { "" }, { "" }, { "" }, { "" }, { "" },
            { "" }, { "" }, { "" }, { "" }, { "" }, { "" }, { "" }, { "" },
            { "" }, { "" } };
 
    public Object[] columnnames = { "DT_PREKR_L", "T_PREKR_L", "SH_PREKR_L", "DLG_PREKR_L", "DT_PREKR", "T_PREKR", "SH_PREKR", "DLG_PREKR", "DT_PREKR_R", 
  "T_PREKR_R", "SH_PREKR_R", "DLG_PREKR_R", "DT", "T", "WR", "DWRD" };
 
    public DefaultTableModel myTM = new DefaultTableModel(data, columnnames);
 
    private JPanel getJPanel1() {
        if (jPanel1 == null) {
            jPanel1 = new JPanel();
            jPanel1.setLayout(null);
            jPanel1.setBounds(2, 2, 896, 336);
            jPanel1.setBorder(BorderFactory
                    .createEtchedBorder(EtchedBorder.LOWERED));
            jPanel1.setVisible(false);
            jPanel1.add(getJTextField1(), null);
            jPanel1.add(getJTextField2(), null);
            jPanel1.add(getJTextField3(), null);
            jPanel1.add(getJTextField4(), null);
            jPanel1.add(getJTextField5(), null);
            jPanel1.add(getJTextField6(), null);
            jPanel1.add(getJLabel2(), null);
            jPanel1.add(getJLabel3(), null);
            jPanel1.add(getJLabel4(), null);
            jPanel1.add(getJLabel5(), null);
            jPanel1.add(getJLabel6(), null);
            jPanel1.add(getJLabel7(), null);
            jPanel1.add(getJScrollPane(), null);
        }
        return jPanel1;
    }
 
    private JScrollPane getJScrollPane() {
        if (jScrollPane == null) {
            jScrollPane = new JScrollPane();
            jScrollPane.setBounds(new Rectangle(16, 211, 861, 126));
            jScrollPane.setViewportView(getJTable());
            jScrollPane
                    .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            jScrollPane
                    .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        }
        return jScrollPane;
    }
 
private JTable getJTable() {
        if (jTable == null) {
            TableColumnModel jthcm;
            TableColumn jthc0, jthc1, jthc2, jthc3, jthc4, jthc5, jthc6, jthc7, jthc8, jthc9, jthc10, jthc11, jthc12, jthc13, jthc14, jthc15;
 
            jTable = new JTable(myTM);
            jTable.setBounds(0, 0, 1120, 16);
            jTable.setSize(1120, 16);
            jTable.setPreferredSize(new Dimension(1120, 16));
            jTableHeader = jTable.getTableHeader();
            jTableHeader.setBounds(0, 0, 1120, 16);
            jTableHeader.setSize(1120, 16);
            jTableHeader.setPreferredSize(new Dimension(1120, 16));
            jthcm = jTableHeader.getColumnModel();
            jthc0 = jthcm.getColumn(0);
            //jthc0.setHeaderValue("DT_PREKR_L");
            jthc1 = jthcm.getColumn(1);
            //jthc1.setHeaderValue("T_PREKR_L");
            jthc2 = jthcm.getColumn(2);
            //jthc2.setHeaderValue("SH_PREKR_L");
            jthc3 = jthcm.getColumn(3);
            //jthc3.setHeaderValue("DLG_PREKR_L");
            jthc4 = jthcm.getColumn(4);
            //jthc4.setHeaderValue("DT_PREKR");
            jthc5 = jthcm.getColumn(5);
            //jthc5.setHeaderValue("T_PREKR");
            jthc6 = jthcm.getColumn(6);
            //jthc6.setHeaderValue("SH_PREKR");
            jthc7 = jthcm.getColumn(7);
            //jthc7.setHeaderValue("DLG_PREKR");
            jthc8 = jthcm.getColumn(8);
            //jthc8.setHeaderValue("DT_PREKR_R");
            jthc9 = jthcm.getColumn(9);
            //jthc9.setHeaderValue("T_PREKR_R");
            jthc10 = jthcm.getColumn(10);
            //jthc10.setHeaderValue("SH_PREKR_R");
            jthc11 = jthcm.getColumn(11);
            //jthc11.setHeaderValue("DLG_PREKR_R");
            jthc12 = jthcm.getColumn(12);
            //jthc12.setHeaderValue("DT");
            jthc13 = jthcm.getColumn(13);
            //jthc13.setHeaderValue("T");
            jthc14 = jthcm.getColumn(14);
            //jthc14.setHeaderValue("WR");
            jthc15 = jthcm.getColumn(15);
            //jthc15.setHeaderValue("DWRD");
            jTableHeader.setVisible(true);
            jTable.setTableHeader(jTableHeader);
        }
        return jTable;
    }


Как видно из этого кода, на панель jPanel1 посажен jScrollPane, а внутри jScrollPane помещена jTable. У jTable есть заголовок jTableHeader. Причём ширина jTable--больше, чем ширина jScrollPane.

Скроллирование по вертикали нормально работает. Но что касается скроллирования по горизонтали, то его нет--все 16 столбцов таблицы отображаются внутри скроллпейна сразу. Я же хочу, чтобы внутри скроллпейна отображалось только 12 столбцов, а для просмотра остальных 4 столбцов нужно было производить скроллирование по горизонтали.

Как это сделать? Может быть, использовать TableColumnModel и TableColumn и задать для столбцов (тип TableColumn) значение PreferredSize равное, например, 70 ?
Или же мне как-то следует поработать с jScrollPaneLayout? 

Автор: COVD 28.1.2011, 16:39
Цитата

задать для столбцов (тип TableColumn) значение PreferredSize MinimumSize


Автор: _Y_ 28.1.2011, 17:14
У таблицыНадо отменить автоподгонку ширины колонок. Ну и установить желательную ширину колонок или каждой колонки по отдельности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)