Swing: не получается заставить JTable правильно показывать - PullRequest
1 голос
/ 04 февраля 2010

Следующий код показывает ошибку, которую я пытаюсь исправить. У меня есть два способа отображения таблицы (иерархия ниже):

  1. JTable непосредственно в JOptionPane: показывает таблицу отлично.

    JOptionPane
        JTable
    
  2. JTable в области прокрутки в JPanel в панели JOptionPane: не может показывать таблицу.

    JOptionPane
        JPanel
            JScrollPane
                JTable
    

Поскольку это та же самая функция для создания таблицы, я вполне уверен, что я просто делаю что-то не так с изменением размера / макета. Есть предложения?

import java.awt.Dimension;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class TableTest2 {   
    public static void testTable(JTable t) {
        t.setModel(new AbstractTableModel() {
            public String getColumnName(int col) { return "col"+Integer.toString(col); }
            public int getRowCount() { return 4; }
            public int getColumnCount() { return 4; }
            public Object getValueAt(int row, int col) {
                return Integer.toString(row*col);
            }
            public boolean isCellEditable(int row, int col) { return false; }
            public void setValueAt(Object value, int row, int col) { }
        });
    }
    public static void main(String[] args) {
        doTest1();
        doTest2(null, null);
        doTest2(new Dimension(500,500), null);
        doTest2(new Dimension(500,500), new Dimension(400,400));
    }
    private static void doTest1() {
        JTable t = new JTable();
        t.setPreferredSize(new Dimension(500,500));
        TableTest2.testTable(t);
        JOptionPane.showMessageDialog(null, t, "test1", JOptionPane.INFORMATION_MESSAGE);
    }
    private static void doTest2(Dimension d1, Dimension d2) {
        JTable t = new JTable();
        TableTest2.testTable(t);
        JPanel panel = new JPanel();
        JScrollPane sp = new JScrollPane();
        sp.add(t);
        if (d1 != null)
            sp.setPreferredSize(d1);
        panel.add(sp);
        if (d2 != null)
            panel.setPreferredSize(d2);
        JOptionPane.showMessageDialog(null, panel, "test2", JOptionPane.INFORMATION_MESSAGE);
    }
}

1 Ответ

2 голосов
/ 04 февраля 2010

Попробуйте это:

  JScrollPane sp = new JScrollPane(t);

предоставление компонента для полосы прокрутки в конструкторе.

Вы не добавляете компоненты в полосу прокрутки. Вы можете установить область просмотра lik ethis:

  sp.getViewPort().setView(t);

вместо

  sp.add(t);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...