Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/43: Рейтинг темы: голосов - 43, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 21.03.2010
Сообщений: 46

Выпадающий список

08.02.2011, 16:53. Показов 9029. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствйте. Начал писать небольшкю программку, необходимо выбрать из списка модель телефона и отобразить соответствующую картинку (это самое начало). Вот код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
 
import javax.swing.ComboBoxEditor;
import javax.swing.JApplet;
import javax.swing.JComboBox;
import javax.swing.JList;
import javax.swing.JPanel;
 
import sun.java2d.pipe.DrawImage;
 
 
public class app extends JApplet implements ItemListener{
    JComboBox cb;
    Image i = null;
    ArrayList models;
    InputStreamReader isr;
    BufferedReader br;
    FileInputStream fis;
    class Picture extends JPanel{
        public Picture(){
            setOpaque(false);
        }
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if(i!=null)
                g.drawImage(i,getWidth()/2-150,0,this);
        }
    }
    public void init(){
        try {
            cb = new JComboBox();
            fis=new FileInputStream("list.txt");
            isr = new InputStreamReader(fis);
            br= new BufferedReader(isr);
            models = new ArrayList();
            String line;
            while(true){
                line = br.readLine();
                if(line==null){
                    break;
                }
                models.add(line+".jpg");
            }
            Iterator it = models.iterator();
            while(it.hasNext()){
                cb.addItem((String)it.next());
            }
            JPanel controlPanel = new JPanel();
            controlPanel.setOpaque(false);
            controlPanel.add(cb);
            getContentPane().add(controlPanel, BorderLayout.NORTH);
            Picture pic = new Picture();
            getContentPane().add(pic, BorderLayout.CENTER);
            cb.addItemListener(this);
        }
        catch (FileNotFoundException e) {
        }
        catch (IOException e) {
        }
    }
    public void itemStateChanged(ItemEvent arg0) {
        i=getImage(getCodeBase(), (String)arg0.getItem());
    }
}
Вопрос вот в чем: изначально в выпадающем списвке выбран элемент (первый добавленный) и если используя список выбрать его же то ничего не происходит. Если же перед этим выбрать какой-либо другой жлемент, то все равботает нормально. Как это исправить?

И вдогонку вопрос: можно ли задавать ширину выпадающего списка вручную?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.02.2011, 16:53
Ответы с готовыми решениями:

Java. Выпадающий список
Здравствуйте! Я новичок в Java, и у меня возникла проблема. У меня есть код, в котором строка движется и отражаясь от границ апплета меняет...

код на выпадающий список compobox "шрифты" и " размер шрифта"
в выпадаюем списке шрифты системные должны быть, к сожалени нас учили только писать код для определенного шрифта

Как прочитать выпадающий список в Excel?
Доброго дня, может кто знает как прочитать выпадающий список в Excel?? Если просто бегать по клеткам, то он вернет только то которое...

4
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
08.02.2011, 18:31
Цитата Сообщение от Sonet Посмотреть сообщение
Вопрос вот в чем: изначально в выпадающем списвке выбран элемент (первый добавленный) и если используя список выбрать его же то ничего не происходит. Если же перед этим выбрать какой-либо другой жлемент, то все равботает нормально. Как это исправить?
ЭТО Вы не исправите. Вы отслеживаете ИЗМЕНЕНИЕ состояния элемента. А оно не изменилось - какой был выделен, такой и остался.

Вам что надо? Чтобы для первого телефона картинка показывалась? setSelectedItem(null), addItemListener(this), setSelectedIndex(0) - в этом случае сработает слушатель.

И вдогонку вопрос: можно ли задавать ширину выпадающего списка вручную?
Малой кровью - нет. Можно сделать свой ComboBoxUI, унаследоваться, например, от javax.swing.plaf.basic.BasicComboBoxUI, тогда появится доступ к popup-компоненте. Но это Вы должны точно знать что делаете и чем рискуете.
0
0 / 0 / 0
Регистрация: 21.03.2010
Сообщений: 46
09.02.2011, 18:04  [ТС]
Все что мне нужно было, это узнать о функции setSelectedItem, т.к. при старте апплета картинки отображаться не должно. Спасибо.

Добавлено через 23 часа 20 минут
Возникло несколько вопросов, по этой же задаче, но не связанных с названием топика.
Вот код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
 
import javax.swing.ButtonGroup;
import javax.swing.ComboBoxEditor;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
 
import sun.java2d.pipe.DrawImage;
 
 
public class app extends JApplet implements ItemListener, ActionListener{
    JComboBox cb = new JComboBox();
    Image i = null;
    ArrayList models = new ArrayList();
    InputStreamReader isr;
    OutputStreamWriter osw;
    BufferedReader br;
    FileInputStream fis;
    FileOutputStream fos;
    JRadioButton jrb1 = new JRadioButton("Срочно");
    JRadioButton jrb2 = new JRadioButton("Не срочно");
    ButtonGroup bg = new ButtonGroup();
    JButton jb = new JButton("Заказать");
    GridLayout gr = new GridLayout();
    JLabel jl= new JLabel("Выберите модель из списка");
    String line;
    JPanel controlPanel = new JPanel();
    class Picture extends JPanel{
        public Picture(){
            setOpaque(false);
        }
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if(i!=null)
                g.drawImage(i,getWidth()/2-150,0,this);
        }
    }
    public void init(){
        try {
            setSize(600, 650);
            fos = new FileOutputStream("1.txt");
            fis=new FileInputStream("list.txt");
            isr = new InputStreamReader(fis);
            osw = new OutputStreamWriter(fos);
            br= new BufferedReader(isr);
            gr.setRows(2);
            bg.add(jrb1);
            bg.add(jrb2);
            while(true){
                line = br.readLine();
                if(line==null){
                    break;
                }
                models.add(line);
            }
            Iterator it = models.iterator();
            while(it.hasNext()){
                cb.addItem((String)it.next());
            }
            controlPanel.setOpaque(false);
            controlPanel.setLayout(gr);
            controlPanel.add(jl);
            controlPanel.add(jb);
            cb.setSelectedItem(null);
            getContentPane().add(cb, BorderLayout.NORTH);
            Picture pic = new Picture();
            getContentPane().add(pic, BorderLayout.CENTER);
            getContentPane().add(jrb1,BorderLayout.EAST);
            getContentPane().add(jrb2,BorderLayout.WEST);
            getContentPane().add(controlPanel, BorderLayout.SOUTH);
            cb.addItemListener(this);
            jb.addActionListener(this);
            line=null;
        }
        catch (FileNotFoundException e) {
        }
        catch (IOException e) {
        }
    }
    public void itemStateChanged(ItemEvent e) {
        if(e.getItemSelectable() == cb){
            i=getImage(getCodeBase(), (String)e.getItem()+".jpg");
            line=(String)e.getItem();
            repaint();
        }
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==jb){
            try{
                if(line!=null && jrb1.isSelected()){
                    osw.write(line+" срочно\n");
                    jrb1.setSelected(false);
                    cb.setSelectedItem(null);
                    i=null;
                    jl.setText("Вы заказали модель "+line);
                    line=null;
                    repaint();
                }
                else if(line!=null && jrb2.isSelected()){
                    osw.write(line+" не срочно\n");
                    jrb2.setSelected(false);
                    cb.setSelectedItem(null);
                    i=null;
                    jl.setText("Вы заказали модель "+line);
                    line=null;
                    repaint();
                }
                else if(line==null){
                    jl.setText("Не выбрана модель из списка");
                }
                else if(line!=null && !jrb1.isSelected() && !jrb2.isSelected()){
                    jl.setText("Укажите тип заказа");
                }
            }
            catch (FileNotFoundException ie) {
            }
            catch (IOException ie) {
            }
        }
    }
    public void destroy(){
        try {
            osw.close();
        } catch (IOException e) {
        }
    }
    
}
Вопросы следующие:
1) jrb2.setSelected(false); и jrb1.setSelected(false); не устанавливают соответствующие значения кнопок, тобишь флажок, который был выбран до генерации соответствующего события остается выбранным и после его обработки.
2) Для ControlPanel выбрал менеджер GridLayout с 2 строками, в первой строке находится объект Jlabel, как сделать так чтобы он находился по центро строки?
3) Как запретить изменять размер окна (апплета, не заню как верно сказать)?
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
09.02.2011, 18:50
Цитата Сообщение от Sonet Посмотреть сообщение
Вопросы следующие:
1) jrb2.setSelected(false); и jrb1.setSelected(false); не устанавливают соответствующие значения кнопок, тобишь флажок, который был выбран до генерации соответствующего события остается выбранным и после его обработки.
А как Вы себе это представляете с radio-кнопками, объединенными в группу? Вы убираете выделение. Какая из оставшихся кнопок должна выделиться? Хотите снять выделение со всех кнопок группы - так и пляшите от группы! bg.clearSelection();

2) Для ControlPanel выбрал менеджер GridLayout с 2 строками, в первой строке находится объект Jlabel, как сделать так чтобы он находился по центро строки?
Для начала почитать про GridLayout и понять, что Label занимает всю область: . Затем покопаться в API самой метки и найти, как у нее центрируется текст: http://download.oracle.com/jav... nment(int) (jl.setHorizontalAlignment(SwingConstant s.CENTER))

3) Как запретить изменять размер окна (апплета, не заню как верно сказать)?
Размер апплета задается в HTML и средств для его изменения кроме как через JavaScript нет.
1
0 / 0 / 0
Регистрация: 21.03.2010
Сообщений: 46
10.02.2011, 16:33  [ТС]
Дошел до завершающей стадии
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
public class app extends JApplet implements ItemListener, ActionListener{
    JComboBox cb = new JComboBox();
    Image i = null;
    Picture pic = new Picture();
    ArrayList models = new ArrayList();
    InputStreamReader isr;
    InputStreamReader isr2;
    OutputStreamWriter osw;
    BufferedReader br;
    BufferedReader br2;
    FileInputStream fis;
    FileInputStream fis2;
    FileOutputStream fos;
    JRadioButton jrb1 = new JRadioButton("Срочно");
    JRadioButton jrb2 = new JRadioButton("Не срочно");
    ButtonGroup bg = new ButtonGroup();
    JButton jb = new JButton("Заказать");
    JButton jb1 = new JButton("Подобрать");
    GridLayout gr = new GridLayout();
    JLabel jl= new JLabel("Выберите модель из списка");
    JLabel jl1 = new JLabel();
    String line, list, status;
    int maxCount;
    Phone temp;
    JTextField jt = new JTextField(15);
    JPanel controlPanel = new JPanel();
    JPanel controlPanel1 = new JPanel();
    Iterator it;
    class Phone{
        public int count;
        public int price;
        public String name;
        public Phone(String name, int price){
            this.name=name;
            this.price=price;
        }
    }
    class Picture extends JPanel{
        public Picture(){
            setOpaque(false);
        }
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if(i!=null){
                jl1.setText(null);
                g.drawImage(i,getWidth()/2-150,0,this);
            }
 
        }
    }
    public void init(){
        try {
            setSize(600, 650);
            fos = new FileOutputStream("1.txt");
            fis = new FileInputStream("list.txt");
            fis2 = new FileInputStream("price.txt");
            isr = new InputStreamReader(fis);
            isr2 = new InputStreamReader(fis2);
            osw = new OutputStreamWriter(fos);
            br = new BufferedReader(isr);
            br2 = new BufferedReader(isr2);
            while(true){
                line = br.readLine();
                if(line==null){
                    break;
                }
                models.add(new Phone(line,Integer.parseInt(br2.readLine())));
            }
            it = models.iterator();
            while(it.hasNext()){
                cb.addItem(((Phone)it.next()).name);
            }
            bg.add(jrb1);
            bg.add(jrb2);
            gr.setRows(2);
            jl.setHorizontalAlignment(SwingConstants.CENTER);
            jt.setText("Введите цену");
            cb.setSelectedItem(null);
            controlPanel.setOpaque(false);
            controlPanel.setLayout(gr);
            controlPanel.add(jl);
            controlPanel.add(jb);
            controlPanel1.setOpaque(false);
            controlPanel1.setLayout(new FlowLayout());
            controlPanel1.add(cb);
            controlPanel1.add(jt);
            controlPanel1.add(jb1);
            getContentPane().add(controlPanel1, BorderLayout.NORTH);
            pic.add(jl1);
            getContentPane().add(pic, BorderLayout.CENTER);
            getContentPane().add(jrb1,BorderLayout.EAST);
            getContentPane().add(jrb2,BorderLayout.WEST);
            getContentPane().add(controlPanel, BorderLayout.SOUTH);
            cb.addItemListener(this);
            jb.addActionListener(this);
            jb1.addActionListener(this);
            line=null;
        }
        catch (FileNotFoundException e) {
        }
        catch (IOException e) {
        }
    }
    public void itemStateChanged(ItemEvent e) {
        if(e.getItemSelectable() == cb){
            i=getImage(getCodeBase(), (String)e.getItem()+".jpg");
            line=(String)e.getItem();
            list = null;
            repaint();
        }
    }
    public void actionPerformed(ActionEvent e) {
        try{
            if(e.getSource()==jb){
                    if(line!=null && jrb1.isSelected()){
                        osw.write(line+" срочно\n");
                        cb.setSelectedItem(null);
                        bg.clearSelection();
                        i=null;
                        jl.setText("Вы заказали модель "+line);
                        it=models.iterator();
                        while(it.hasNext()){
                            temp=(Phone)it.next();
                            if(temp.name.equals(line)){
                                temp.count++;
                            }
                            if(temp.count>=maxCount){
                                maxCount=temp.count;
                            }
                            break;
                        }
                        line=null;
                        status();
                        repaint();
                    }
                    else if(line!=null && jrb2.isSelected()){
                        osw.write(line+" не срочно\n");
                        cb.setSelectedItem(null);
                        bg.clearSelection();
                        i=null;
                        jl.setText("Вы заказали модель "+line);
                        it=models.iterator();
                        while(it.hasNext()){
                            temp=(Phone)it.next();
                            if(temp.name.equals(line)){
                                temp.count++;
                            }
                            if(temp.count>=maxCount){
                                maxCount=temp.count;
                            }
                            break;
                        }
                        line=null;
                        status();
                        repaint();
                    }
                    else if(line==null){
                        jl.setText("Не выбрана модель из списка");
                    }
                    else if(line!=null && !jrb1.isSelected() && !jrb2.isSelected()){
                        jl.setText("Укажите тип заказа");
                    }
                }
                
            else if(e.getSource()==jb1){
                int n;
                list = null;
                if(jt.getText()==null){
                    return;
                }
                n = Integer.parseInt(jt.getText());
                jt.setText(null);
                it=models.iterator();
                while(it.hasNext()){
                    temp=(Phone)it.next();
                    if(temp.price>=n){
                        if(list==null)  
                            list="Найденные модели: ";
                            list=list+"----"+temp.name;
                    }
                }
                if(list==null){
                    list="Моделей с ценой больше заданной не найдено";
                }
                i=null;
                line=null;
                cb.setSelectedItem(null);
                bg.clearSelection();
                jl.setText("Выберите модель из списка");
                repaint();
                jl1.setText(list);
            }
        }
        catch (FileNotFoundException ie) {
        }
        catch (IOException ie) {
        }
        catch (NumberFormatException ie){
            
        }
    }
    public void status(){
        it=models.iterator();
        status=null;
        while(it.hasNext()){
            temp=(Phone)it.next();
            if(temp.count==maxCount){
                if(status==null){
                    status="Популярные модели: ";
                }
                status=status+temp.name+"  ";
            }
        }
        showStatus(status);
    }
    public void destroy(){
        try {
            osw.close();
        } catch (IOException e) {
        }
    }
    
}
В общем есть 2 проблемы:
1) ф-ия status обновляет статус ровно 1 раз, далее даже. если какой-то из элементов списка models имеет count больше чем значение maxCount, статус не изменится.
2) Неправильно отлавливается нажатие кнопки jb1, а именно: при первом нажатии на нее с корректно заданным текстом в поле jt (тобишь вписано число) jl1 не отображается что ли, но при этом остается нарисованной картинка, сбрасываются радиокнопки, выбранный элемент выпадающего списка в общем все переменные которые должны сбрасываться при нажатии на нее. Лишь при следующем вводе числа в текстовое поле, картинка пропадает и отображается jl1.

Вторую проблему исправил перестановкой jl1.setText(list); перед line=null; и i=null; после repaint();

Добавлено через 15 минут
Первую решил сам, т.к там ошибка была алгоритмическая. А вот во втрой не понятно почему все работало как надо только при выставлении операции именно в таком порядке, как я указал ранее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2011, 16:33
Помогаю со студенческими работами здесь

Красивый выпадающий список JavaFX
Доброго времени суток Уважаемые форумчане. Собственно перейду к делу. Java изучаю совсем нидавно, поэтому прошу сильно не пинать))) ...

В IE, кастомный выпадающий список: не выпадает список, если не хватает места снизу
Только в IE. не работает кастомный выпадающий список, если недостаточно места снизу. Какие варианты решения есть?

Выпадающий список
Как сделать так как на этом сайте ? клацнуть В самом низу есть вакансии и нажимаешь они выводятся .

выпадающий список.
Здравствуйте. У меня такая проблема: Есть 2 таблицы со списками: в первой: список имен, второй: со списком вариантов. Задача: сделать...

выпадающий список
вот в чем вопрос есть раскрывающийся список <? $link = mysql_connect($host, $login, $pasw) or die(mysql_error()); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru