Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скролируемый набор компонентов 
:(
    Опции темы
engineer.dev
  Дата 24.9.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2007

Репутация: нет
Всего: нет



Имеется компонент который может по клику меняет свой размер, в нем так же есть JTextPane в котором обязательно надо иметь возможность скроллить содержимое.
Есть довольно большой набор данных, одним элементом данных заполняется одна компонента.
Проблема: если создавать на все данные сразу все компоненты, то это очень сильно нагружает систему и окно с компонентами довольно надолго подвисает, что не есть гуд.
JList не получается, т.к. все внутренние компоненты должны быть интерактивны.
Какие могут быть варианты для создания шустрого компонента?
PM MAIL ICQ Jabber   Вверх
duk
Дата 25.9.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



Вообще, для отображения компонент в списках и таблицах, можно использовать свой Renderer. 
Существует класс DefaultCellEditor:

Код

    DefaultCellEditor(JCheckBox checkBox)
          Constructs a DefaultCellEditor object that uses a check box.
    DefaultCellEditor(JComboBox comboBox)
          Constructs a DefaultCellEditor object that uses a combo box.
    DefaultCellEditor(JTextField textField)
          Constructs a DefaultCellEditor that uses a text field
.

Через него в таблице можно отображать чекбоксы, комбобоксы и поля ввода.

Пример:

Код

import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class EditableTable {

    public static void main(String[] a) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        String[] columnTitles = { "Combo", "Check" };
        Object[][] dataSet = { { "2", new Boolean(false) },
                { "3", new Boolean(true) }, { "5", new Boolean(false) },
                { "4", new Boolean(true) } };

        TableModel model = new MyTableModel(columnTitles, dataSet);
        JTable table = new JTable(model);
        table.createDefaultColumnsFromModel();

        String[] bloodGroups = { "1", "2", "3", "4", "5" };
        JComboBox comboBox = new JComboBox(bloodGroups);
        table.getColumnModel().getColumn(0).setCellEditor(
                new DefaultCellEditor(comboBox));

        JCheckBox yearsCheckBox = new JCheckBox();
        table.getColumnModel().getColumn(1).setCellEditor(
                new DefaultCellEditor(yearsCheckBox));

        frame.add(new JScrollPane(table));

        frame.setSize(300, 200);
        frame.setVisible(true);
    }

}

class MyTableModel extends AbstractTableModel {
    private static final long serialVersionUID = 6426795960468062652L;
    private String[] columnTitles;
    private Object[][] dataEntries;

    public MyTableModel(String[] columnTitles, Object[][] dataEntries) {
        this.columnTitles = columnTitles;
        this.dataEntries = dataEntries;
    }

    public int getRowCount() {
        return dataEntries.length;
    }

    public int getColumnCount() {
        return columnTitles.length;
    }

    public Object getValueAt(int row, int column) {
        return dataEntries[row][column];
    }

    public String getColumnName(int column) {
        return columnTitles[column];
    }

    public Class<?> getColumnClass(int column) {
        return getValueAt(0, column).getClass();
    }

    public boolean isCellEditable(int row, int column) {
        return true;
    }

    public void setValueAt(Object value, int row, int column) {
        dataEntries[row][column] = value;
    }
}

PM MAIL   Вверх
engineer.dev
Дата 25.9.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.12.2007

Репутация: нет
Всего: нет



Мне такой вариант не подойдет, у меня сложная разворачивающаяся компонента, с JTextPane'ом и скролом. Рендерер не позволяет использовать эти компоненты, на то он и рендерер, чтоб только отрисовывать. JTable не подойдет т.к. напихивание в него каких-то очень легких одиночных компонентов не интересно.
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0622 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.