2010-02-04 2 views
1

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

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

    JOptionPane 
        JTable 
    
  2. JTable в ScrollPane в 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); 
    } 
} 

ответ

2

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

JScrollPane sp = new JScrollPane(t); 

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

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

sp.getViewPort().setView(t); 

вместо

sp.add(t); 
+0

Ха. Это работает. Зачем? –

+0

А, ваше редактирование ясно. Благодаря! –

+0

@Jason S Нет проблем. Рад помочь. –