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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jTable & JComboBox 
:(
    Опции темы
sol78
Дата 13.9.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проблема такая не могу корректно вставить  в таблицу  JComboBox:

Код

package GUI.Models.Renderer;

import javax.swing.table.*;
import java.awt.Component;
import javax.swing.*;
import javax.swing.event.ListDataListener;
import DataBase.ControlDB;

public class PlaginRenderer  implements TableCellRenderer {
    private JComboBox list=new JComboBox();
    private ControlDB db=ControlDB.getInstance();

public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        
     for(int i=0; i<db.getCountPlaginRecords(); i++){
         list.addItem( db.getPlaginIndexOf(i).getNameAction());
     }
        return list;
    }
}

PM MAIL   Вверх
_Michael
Дата 13.9.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вроде все должно работать. А некорректно ето как? У меня вот такой код отлично работает. 
Код

public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
return new JComboBox(new String[]{"qwerty1","qwerty2","qwerty3"});
}



--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
sol78
Дата 14.9.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не корректно , в моем коде не заполняется весь комбобокс, только 1 айтем....
а все айтемы хранятся в ArrayList поэтому твой код использавать не могу, что делать?

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


Опытный
**


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

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



Может проблема из за таблицы, при нажатие на комбо, таблица не прорисовывает весь лист...
PM MAIL   Вверх
_Michael
Дата 14.9.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sol78, а может у тебя в ArrayList'е и содержится всего один елемент?

Добавлено через 1 минуту и 38 секунд
Точнее может у тебя db.getCountPlaginRecords() возвращает 1 ?


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
sol78
Дата 14.9.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



net проблема в таблице она не прорисовивает все ....
Код

    private ArrayList m_Plagins=new ArrayList();


     private ControlDB() {
         m_Plagins.add(new Action("CmdLine", new CmdLine()));
         m_Plagins.add(new Action("EMail", new EMail()));
         m_Plagins.add(new Action("BackUp", new BackUp()));



Добавлено @ 15:43
Дело в том, когда я кликаю по таблице и вижу лист-он вообще пуст...
Гуру помогите разобраться!?

Это сообщение отредактировал(а) sol78 - 14.9.2007, 15:50
PM MAIL   Вверх
_Michael
Дата 14.9.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А TableModel  у тебя какая?

Добавлено через 3 минуты и 58 секунд
У меня если просто в getTableCellRendererComponent возвращать JComboBox то он рисуется но на нем кликай не кликай ничего не просходит, поскольку таблиця не знает как ето правильно обрабоать ети клики по простому она не знает что у тебя там в ячейке JComboBox который должен раскрываться при клике. Для етого надо еще модель в которой ты грубо говоря указываеш что у тебя в ячейке лежит JComboBoх


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
sol78
Дата 14.9.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да в модели у меня нет комбобокса.....у меня там элемент Folder, через которое я помучаю нужно текущее значение...
PM MAIL   Вверх
_Michael
Дата 14.9.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну не знаю ето вроде как неправильно. Поскольку в модели у тебя собственно должно быть то что есть действительно в таблице . Впрочем возьми шас и проверь. измени свою модель чтоб вместо етих Folder'ов в ней были JComboBox'ы smile И посмотри  далее ли они не прорисовуются.

Это сообщение отредактировал(а) _Michael - 14.9.2007, 16:31


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
sol78
Дата 14.9.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



возмож но и так, но мне нужни ети значения 
вот моя модел
Код

package GUI.Models;

import DataBase.*;
import ManageMonitor.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.TableModelListener;

public class ManageMonitorModel extends AbstractTableModel implements TableModel{
    private ControlDB db = ControlDB.getInstance();
    private ArrayList m_Folders = new ArrayList();

    public ManageMonitorModel() {
        Folder currentFolder;

        for (int ind = 0; ind < db.getCountFolderRecords(); ind++) {
            currentFolder = db.getFolderIndexOf(ind);
            m_Folders.add(ind, currentFolder);
//           m_Process.add(ind,new Thread(currentFolder));
//
//            if(currentFolder.getStateAction()){
//               // currentFolder.run();
//               ((Thread) m_Process.get(ind)).start();
//           }
        }
    }

    public int getColumnCount() {
        return 5;
    }

    public int getRowCount() {
        return m_Folders.size();
    }

    public Object getValueAt(int rowIndex, int columnIndex) {

        switch (columnIndex) {
        case 0:
            return rowIndex + 1;
        case 1:
            return (Folder) m_Folders.get(rowIndex);
        case 2:
            return (Folder)m_Folders.get(rowIndex);
        case 3:
            return (Folder) m_Folders.get(rowIndex);
        case 4:
            return (Folder) m_Folders.get(rowIndex);
        }
        return null;
    }

    public String getColumnName(int columnIndex) {
        switch (columnIndex) {
        case 0:
            return "N";
        case 1:
            return "Folder Name";
        case 2:
            return "Plagin";
        case 3:
            return "Status";
        case 4:
            return "Working Process";
        }
        return new String("NULL");
    }

    public Class getColumnClass(int columnIndex) {
        switch (columnIndex) {
        case 0:
            return String.class;
        case 1:
            return Folder.class;
        case 2:
            return JComboBox.class;
        case 3:
            return Folder.class;
        case 4:
            return Folder.class;
        default:
            return Object.class;
        }
    }

    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if (columnIndex >= 1 && columnIndex <= 3) {
            return true;
        }
        return false;
    }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Folder currentFolder = (Folder) m_Folders.get(rowIndex);
        switch (columnIndex) {
        case 0: //N
            break;
        case 1: //FolderName
            currentFolder.setPath(((Folder) aValue).getPath());
            break;
        case 2: //Plagin
            currentFolder.setNameAction(((Folder)aValue).getNameAction());
            break;
        case 3: //Status
            currentFolder.setStateAction(((Folder) aValue).getStateAction());
            break;
        case 4: //Work Process
            break;
        }
        m_Folders.set(rowIndex, currentFolder);
        this.fireTableDataChanged();
    }

    public void addTableModelListener(TableModelListener l) {
        super.addTableModelListener(l);
    }

    public void removeTableModelListener(TableModelListener l) {
        super.removeTableModelListener(l);
    }

}



PM MAIL   Вверх
_Michael
Дата 14.9.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sol78, а как между собой связаны JComboBox'ы и Folder'ы ? Если твои JComboBox'ы cсстоят из Folder'ов значения которых тебе надо, так в модели тоже используй JComboBox'ы чтоб было соответствие между моделью и возвращаемим getTableCellRendererComponent обьектом. А потом где тебе надо будет значение так будещь брать из комбобокса getItemAt(int index)  методом.

Добавлено через 57 секунд
И как там експеримент с моделью ты пробовала вместо Folder'ов туда засунуть JComboBox'ы?


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
sol78
Дата 14.9.2007, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



пробивала....ничего хорошего...
может бить пример, а???

Добавлено через 9 минут и 42 секунды
_Michael, я думаю что ти не прав насчет JComboBox'ы  в моделе....Модель не должна зависеть от View
Так может найдется хорошей пример???
PM MAIL   Вверх
sol78
Дата 15.9.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



люди обратите внимание на проблему...
пока решила что ето работа Editora
Код

package GUI.Models.Renderer;

import javax.swing.table.*;
import java.awt.*;
import javax.swing.*;
import DataBase.ControlDB;
import java.awt.event.ActionListener;
import ManageMonitor.Folder;

public class PlaginEditor extends AbstractCellEditor implements
        TableCellEditor {
    private JComboBox list=new JComboBox();
    private ControlDB db = ControlDB.getInstance();
    private Folder m_folder;

    public Object getCellEditorValue() {
        return m_folder;

    }

    public Component getTableCellEditorComponent(JTable table, Object value,
                                                 boolean isSelected, int row,
                                                 int column) {
        m_folder = (Folder) value;
        for(int i=0; i<db.getCountPlaginRecords(); i++){
         list.addItem( db.getPlaginIndexOf(i).getNameAction());
     }

        return list;
    }

}


но все равно не работает....
ПОМОГИТЕ!!!

Это сообщение отредактировал(а) sol78 - 15.9.2007, 13:34
PM MAIL   Вверх
_Michael
Дата 15.9.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sol78,  имхо твой едитор очень сложный. Вот я тут пробовал ,смотри что у меня вышло.
Едитор:
Код

import java.util.ArrayList;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;

public class CellEditor extends DefaultCellEditor {
    public CellEditor(Object[] values) {
        super(new JComboBox(values));
    }
}

Рендерер
Код

import java.awt.Component;

import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class CellRenderer implements TableCellRenderer {

    private JComboBox list = new JComboBox();
    public CellRenderer(Object[] values) {
        list = new JComboBox(values);
        
    }
    
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        return list ;
    }
}


И небольшой тест для етого
Код

package combotable;

import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;


public class TestTable extends JFrame {
    public TestTable() {
        super();
        init();
        setSize(400,300);
        setLocationRelativeTo(null);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    private void init() {
        JTable table = new JTable();
        DefaultTableModel model = (DefaultTableModel)table.getModel();
        JPanel panel = new JPanel();
        ArrayList<Folder> list = new ArrayList<Folder>();
        for (int i = 0; i < 3; i++) {
            list.add(new Folder("Model Folder", i));
        }
        model.addColumn("Column 1", list.toArray());
        TableColumn column = table.getColumnModel().getColumn(0);
        column.setMinWidth(170);

        
        table.setAutoCreateColumnsFromModel(false);
        table.setColumnSelectionAllowed(false);
        table.setShowHorizontalLines(false);
        table.setRowHeight(20);
        
        column.setCellRenderer(new CellRenderer(list.toArray()) );
        column.setCellEditor(new CellEditor(list.toArray()) );
        
        panel.add(table);
        add(panel);
    }
    public static void main(String[] args) {
        new TestTable();
    }
}

Какой-то класс Folder чтоб как у тебя:
Код

public class Folder {
    private String folderName = null;

    private int index = 0;

    public Folder(String name, int index) {
        this.folderName = name;
        this.index = index;
    }

    public String getFolderName() {
        return folderName;
    }

    public void setFolderName(String folderName) {
        this.folderName = folderName;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }
    
    public String toString() {
        return this.folderName + " "+ Integer.toString(this.index);
    }
}



--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

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

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

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


 




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


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

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