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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание комбобокса с чекбоксами, комбобокс, содержащий чекбоксы 
:(
    Опции темы
erslgoeirjh
Дата 11.4.2012, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я создал класс CheckCombo, который является наследником класса JComboBox:

Код

import java.util.Vector;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.plaf.*;
import javax.swing.plaf.basic.*;
import java.awt.Dimension;

public class CheckCombo extends JComboBox {
    
    static class MyCheckBoxUI extends BasicCheckBoxUI {
        public static ComponentUI  createUI(JComponent c) {
            return new  MyCheckBoxUI();
        }
    }

    CheckComboRenderer  renderer;
    
    public CheckCombo() {
        // TODO Auto-generated constructor stub
        renderer = new CheckComboRenderer();
        setRenderer(renderer);
        addActionListener(this);
        setVisible(true);
        setEnabled(true);
    }

    public CheckCombo(ComboBoxModel aModel) {
        super(aModel);
        initialize();
        // TODO Auto-generated constructor stub
        renderer = new CheckComboRenderer();
        setRenderer(renderer);
        addActionListener(this);
        setVisible(true);
        setEnabled(true);
    }

    public CheckCombo(Object[] items) {
        super(items);
        initialize();
        // TODO Auto-generated constructor stub
        renderer = new CheckComboRenderer();
        setRenderer(renderer);
        addActionListener(this);
        setVisible(true);
        setEnabled(true);
    }

    public CheckCombo(Vector<?> items) {
        super(items);
        initialize();
        // TODO Auto-generated constructor stub
        renderer = new CheckComboRenderer();
        setRenderer(renderer);
        addActionListener(this);
        setVisible(true);
        setEnabled(true);
    }

    class CheckComboRenderer implements ListCellRenderer {
        JCheckBox  checkBox;
        
        public  CheckComboRenderer() {
            checkBox = new JCheckBox();
        }
        
        public Component  getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            JCheckBox  checkBox = (JCheckBox)value;
            checkBox.setUI((BasicCheckBoxUI)MyCheckBoxUI.createUI(checkBox));
            return  checkBox;
        }
                
    }

    /**
     * This method initializes this
     * 
     */
    private void initialize() {
        //this.setSize(new Dimension(124, 20));
        //this.setPreferredSize(new Dimension(124, 20));
    }
    
}  //  @jve:decl-index=0:visual-constraint="10,10"
 



Инициализация комбобокса mycombo в основном файле программы, который помещается на панель:

    
Код

private CheckCombo getCombo() {
        if (mycombo == null) {
            String  s1, s2, s3;
            mycombo = new CheckCombo();
            mycombo.setBounds(new Rectangle(933, 434, 124, 20));
        }
        return mycombo;
}
 



В основном коде программы--происходит выбор значений поля S_INF (текстовое поле) из таблицы VEC_CAT, а каждое выбранное значение (строка) помещается в чекбокс, который потом помещается в комбобокс mycombo

                                    
Код

try {
                                        sval = String.valueOf(id_ko);
                                        statement4 = connection.createStatement();
                                        sqlString = "SELECT DISTINCT Epoch FROM VEC_CAT WHERE ID_KO="+sval+" ORDER BY Epoch ASC";
                                        resultSet4 = statement4.executeQuery(sqlString);
                                        resultSet4.next();
                                        timestamp = resultSet4.getTimestamp("Epoch");
                                        tslong = timestamp.getTime();
                                        tslong += 10800000;
                                        timestamp.setTime(tslong);
                                        s = timestamp.toString();
                                        s = s.trim();
                                        ind = s.indexOf(" ");
                                        s1 = s.substring(0, ind);
                                        s1 = s1.replaceAll(",", ".");
                                        s2 = s.substring(ind+1);
                                        s2 = s2.replaceAll(",", ".");
                                        s2 = s2.substring(0, 8);
                                        jTextField1.setText(s1); // дата начала
                                        jTextField2.setText(s2); // время начала
                                        sqlString = "SELECT DISTINCT Epoch FROM VEC_CAT WHERE ID_KO="+sval+" ORDER BY Epoch DESC";
                                        resultSet4 = statement4.executeQuery(sqlString);
                                        resultSet4.next();
                                        timestamp = resultSet4.getTimestamp("Epoch");
                                        tslong = timestamp.getTime();
                                        tslong += 10800000;
                                        timestamp.setTime(tslong);
                                        s = timestamp.toString();
                                        s = s.trim();
                                        ind = s.indexOf(" ");
                                        s1 = s.substring(0, ind);
                                        s1 = s1.replaceAll(",", ".");
                                        s2 = s.substring(ind+1);
                                        s2 = s2.replaceAll(",", ".");
                                        s2 = s2.substring(0, 8);
                                        jTextField3.setText(s1); // дата конца
                                        jTextField4.setText(s2); // время конца
                                        resultSet4.close();
                                        statement4.close(); 
                                        jComboBox.setSelectedIndex(1);
                                        //
                                        sval = String.valueOf(id_ko);
                                        mycombo.removeAll();
                                        statement3 = connection.createStatement();
                                        //sqlString = "SELECT DISTINCT S_INF FROM VEC_CAT WHERE ID_KO="+sval;
                                        sqlString = "SELECT DISTINCT S_INF FROM VEC_CAT";
                                        resultSet3 = statement3.executeQuery(sqlString);
                                        int  countitem = 0;
                                        while (resultSet3.next()) {
                                            if (resultSet3.getObject(1)!=null) {
                                                s = resultSet3.getString(1);
                                                s = s.trim();
                                                if (s.compareTo("")!=0) {
                                                    chbmi = new JCheckBox(s);
                                                    chbmi.setSize(124, 20);
                                                    chbmi.setPreferredSize(new Dimension(124, 20));
                                                    chbmi.setVisible(true);
                                                    chbmi.setEnabled(true);
                                                    //mycombo.add(chbmi);
                                                    mycombo.addItem(chbmi);
                                                    countitem++;
                                                }
                                            } else {
                                                s = "";
                                            }
                                        }
                                        resultSet3.close();
                                        statement3.close();
                                        mycombo.setVisible(true);
                                        mycombo.setEnabled(true);
                                    } catch (Exception e33) {
                                        exceptionString = e33.toString();
                                        exceptionWarning = new ExceptionWarning(null);
                                        exceptionWarning.setWarning(exceptionString);
                                        exceptionWarning.setVisible(true);
                                        jTextField.setText("");
                                        return;                                                        
                                    }
                                cardLayout1.show(jPanel1, "jPanel6");
                                countPanel++;
 



В результате выдались сообщения об ошибках на консоль:

Цитата

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String
at CheckCombo$CheckComboRenderer.getListCellRendererComponent(CheckCombo.java:71)
at javax.swing.plaf.basic.BasicComboBoxUI.paintCurrentValue(BasicComboBoxUI.java:1059)
at javax.swing.plaf.metal.MetalComboBoxUI.paintCurrentValue(MetalComboBoxUI.java:66)
at javax.swing.plaf.basic.BasicComboBoxUI.paint(BasicComboBoxUI.java:850)
at javax.swing.plaf.metal.MetalComboBoxUI.paint(MetalComboBoxUI.java:45)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
at javax.swing.JComponent.paintComponent(JComponent.java:743)
at javax.swing.JComponent.paint(JComponent.java:1006)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JComponent.paintChildren(JComponent.java:843)
at javax.swing.JComponent.paint(JComponent.java:1015)
at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4972)
at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4925)
at javax.swing.JComponent._paintImmediately(JComponent.java:4868)
at javax.swing.JComponent.paintImmediately(JComponent.java:4675)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:451)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:114)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


То есть программе не нравится функция getListCellRendererComponent.

В чём причина этого? Как мне исправить ошибку, чтобы у меня на панель окна приложения выводился комбобокс, содержащий чекбоксы с текстами?
И должны ли этот комбобокс и чексбоксы, находящиеся в нём, иметь одинаковый размер (в моём случае это (124, 20) ), или же они могут иметь разный размер--например, комбобокс имеет немного больший размер, чем содержащиеся внутри него чекбоксы?
  

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.1160 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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