2016-01-05 6 views
1

У меня проблема с JTable использованием JDialog. Я хочу, чтобы показать свою таблицу в диалоге с этим кодом:JTable in JDialog

public class ShortcutKeys extends JDialog { 
    public ShortcutKeys(JFrame parent) { 
    super(parent); 
    this.setTitle("Shortcut Keys of..."); 
    this.setLocationRelativeTo(null); 
    this.setModal(true); 
    this.setResizable(false); 
    this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
    this.getContentPane().setLayout(new BorderLayout()); 

    JTable shortcutKeysTable = getShortcutKeysTable(); 
    this.add(shortcutKeysTable, BorderLayout.CENTER); 

    this.pack(); 
    } 

    private JTable getShortcutKeysTable() { 
    JTable shortcutKeysTable; 

    Object rowData[][] = { { "1", "11" }, { "2", "22"} }; 
    Object columnNames[] = { "Column One", "Column Two" }; 

    shortcutKeysTable = new JTable(rowData, columnNames); 
    JScrollPane scrollPane = new JScrollPane(shortcutKeysTable); 

    this.add(scrollPane, BorderLayout.CENTER); 
    this.setSize(300, 150); 

    return shortcutKeysTable; 
    } 

} 

Итак, проблема такова, что точно с этим кодом, не показывает имена столбцов - только строку данных без моего размера, результат находится в небольшой таблице не с моими предпочтениями. НО когда в методе или в конструкторе добавить эту строку:

this.setVisible(true); 

Затем эта таблица показывает данные строки и столбцы с моим размером 300x150 НО когда я нажимаю ОК Выход «X», то, конечно, это диалог исчезала, но показать новый пустой диалог:

http://i.imgur.com/SzkF5iK.png

Что я сделал не так и как я могу решить эту проблему?

ответ

3

В диалоговом окне должно быть указано scollPane, которое содержит таблицу. Не сама таблица.

Вы должны решить, что getShortcutKeysTable() делает:

  • либо он создает таблицу, в ScrollPane, и добавляет scollPane к диалогу (и должен быть переработан в void createAndAddTable())
  • или он просто создает table и возвращает его, и вызывающий отвечает за его перенос в scollpane и добавление scrollpane в диалог.

Смешивание двух обязанностей делает код запутанным, даже для вас, кто написал код.

В любом случае, установка размера диалогового окна не является его обязанностью, и он не нужен, поскольку вы все равно вызываете пакет().

+0

Спасибо за быстрый ответ. Я удалил из объекта JScrollPanel метода, а в конструкторе изменил это this.add (shortcutKeysTable, BorderLayout.CENTER); to this.add (новый JScrollPanel (shortcutKeysTable), BorderLayout.CENTER); и теперь все работает. Спасибо :) – ullQuiorra

1

Для того, чтобы показать диалог, необходимо позвонить в: JDialog.setVisible(true);.

Но у вас есть ошибка в коде: вы помещаете таблицу в scrollpane и добавляете прокрутку в диалог (в методе getShortcutKeysTable), а затем снова добавляете таблицу в диалог (в конструкторе).

Ваш код работает хорошо, если вы будете делать в конструкторе

... 
    getShortcutKeysTable(); 

    this.pack(); 
    this.setVisible(true); 
} 

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

  • Нет связанных вопросов^_^