Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 1
Регистрация: 28.01.2014
Сообщений: 8

Combobox java

28.01.2014, 11:59. Показов 2157. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Combobox java как сделать чтобы выпадающий список открывался не вверх а вниз при нажатии на кнопку???буду очень благодарен кто подскажет

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
package net.launcher.components;
 
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
 
import javax.swing.JComponent;
 
import net.launcher.run.Settings;
import net.launcher.utils.BaseUtils;
import static net.launcher.utils.ImageUtils.*;
 
public class Combobox extends JComponent implements MouseListener, MouseMotionListener
{
    private static final long serialVersionUID = 1L;
    public final String[]   elements;
    public int initialy     = 0;
    
    private boolean entered = false;
    private boolean pressed = false;
    private int x           = 0;
    private int y           = 0;
    private int selected    = 0;
    
    public BufferedImage defaultTX;
    public BufferedImage rolloverTX;
    public BufferedImage pressedTX;
    public BufferedImage selectedTX;
    public BufferedImage panelTX;
 
    public Combobox(String[] elements, int y)
    {
        super();
        this.elements = elements;
        initialy = y;
        addMouseListener(this);
        addMouseMotionListener(this);
    }
    
    public void paintComponent(Graphics gmain)
    {
        Graphics2D g = (Graphics2D) gmain;
        int w = getWidth();
        if(pressed)
        {
            g.drawImage(genButton(w, pressedTX.getHeight(), pressedTX), 0, getHeight() - pressedTX.getHeight(), w, pressedTX.getHeight(), null);
            int righth = pressedTX.getHeight() * (elements.length + 1);
            int righty = (initialy + pressedTX.getHeight()) - righth;
            
            if(getY() != righty || getHeight() != righth)
            {
                setLocation(getX(), righty);
                setSize(getWidth(), righth);
                y = getHeight();
                return;
            }
            
            g.drawImage(genPanel(w, getHeight() - pressedTX.getHeight(), panelTX), 0, 0, w, getHeight() - pressedTX.getHeight(), null);
            if(entered && y / pressedTX.getHeight() < elements.length)
            {
                g.drawImage(genButton(w, selectedTX.getHeight(), selectedTX), 0,
                    y / pressedTX.getHeight() * pressedTX.getHeight()
                , w, pressedTX.getHeight(), null);
            }
            
            for(int i = 0; i < elements.length; i++)
            {
                g.drawString(elements[i], 5, selectedTX.getHeight() * (i+1) - (g.getFontMetrics().getHeight() / 2));
            }
            
            g.drawString(elements[selected], 5, selectedTX.getHeight() * (elements.length + 1) - (g.getFontMetrics().getHeight() / 2));
        } else if(entered)
        {
            int righth = pressedTX.getHeight();
            if(getY() != initialy || getHeight() != righth)
            {
                setLocation(getX(), initialy);
                setSize(getWidth(), righth);
                return;
            }
            g.drawImage(genButton(w, rolloverTX.getHeight(), rolloverTX), 0, 0, w, rolloverTX.getHeight(), null);
            g.drawString(elements[selected], 5, rolloverTX.getHeight() - (g.getFontMetrics().getHeight() / 2));
        } else
        {
            int righth = pressedTX.getHeight();
            if(getY() != initialy || getHeight() != righth)
            {
                setLocation(getX(), initialy);
                setSize(getWidth(), righth);
                return;
            }
            g.drawImage(genButton(w, defaultTX.getHeight(), defaultTX), 0, 0, w, defaultTX.getHeight(), null);
            g.drawString(elements[selected], 5, rolloverTX.getHeight() - (g.getFontMetrics().getHeight() / 2));
        }
        if(Settings.drawTracers)
        {
            g.setColor(Color.RED);
            g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
        }
        g.dispose();
    }
 
    public void mouseClicked(MouseEvent e)
    {
        if(e.getButton() != MouseEvent.BUTTON1) return;
        if(pressed && y / pressedTX.getHeight() < elements.length)
        {
            selected = y / pressedTX.getHeight();
            entered = BaseUtils.contains(x, y, getX(), getY(), getWidth(), getHeight());
        }
        pressed = !pressed;
        repaint();
    }
 
    public void mouseEntered(MouseEvent e)
    {
        entered = true;
        repaint();
    }
 
    public void mouseExited(MouseEvent e)
    {
        entered = false;
        repaint();
    }
 
    public void mousePressed(MouseEvent e)  {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseDragged(MouseEvent e)  {}
    
    public void mouseMoved(MouseEvent e)
    {
        y = e.getY();
        repaint();
    }
    
    public int getSelectedIndex()
    {
        return selected;
    }
    
    public String getSelected()
    {
        try
        {
            return elements[selected];
        } catch (Exception e)
        {
            return elements[0];
        }
    }
    
    public boolean setSelectedIndex(int i)
    {
        if(elements.length <= i) return false;
        selected = i;
        repaint();
        return true;
    }
    
    public boolean getPressed()
    {
        return pressed;
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2014, 11:59
Ответы с готовыми решениями:

Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ?
Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ? Ответье, плиз, новичку, по MSDN я не понятно, это исключительно...

Ошибка reference to List is ambiguous; both interface java.util.List in package java.util and class java.awt.List in...
Почему кгда я загружаю пакеты awt, utill вместе в одной проге при обьявлении елемента List я ловлю такую ошибку. 'listTest.java':...

При работе JVM обвалвается java c кодом Java Result 1073807364.
При работе JVM обвалвается java c кодом Java Result 1073807364. Если кто-нибудь знает, помогите пожалуйста.

12
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
28.01.2014, 12:03
Вы не поверите, но в норме он всегда открывается вниз. Надо постараться, чтобы он открывался вверх.
2
237 / 236 / 72
Регистрация: 02.07.2013
Сообщений: 881
28.01.2014, 12:20
скорее всего просто места не хватает, чтобы раскрыться вниз
0
1 / 1 / 1
Регистрация: 28.01.2014
Сообщений: 8
28.01.2014, 12:31  [ТС]
маста много ещё
Миниатюры
Combobox java  
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
28.01.2014, 12:37
Что за L&F?
0
1 / 1 / 1
Регистрация: 28.01.2014
Сообщений: 8
28.01.2014, 12:39  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
Вы не поверите, но в норме он всегда открывается вниз. Надо постараться, чтобы он открывался вверх.
лучше бы подсказали что ещё показать чтобы изменить

Добавлено через 1 минуту
Цитата Сообщение от Skipy Посмотреть сообщение
Что за L&F?
не знаю исходники писал человек которого больше нет в интернете
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
28.01.2014, 12:45
Ну, в этом случае сильно постарались. Судя по всему, этот код и занимается отрисовкой вверх. Правда, там куча вызовов других методов, которые создают панели, кнопки и т.п., и которых не видно.

Судя по всему, вот вычисление y-координаты левого верхнего угла:

Java
1
int righty = (initialy + pressedTX.getHeight()) - righth;
Попробуйте поставить его в "левый верхний угол плюс высота компоненты".
0
1 / 1 / 1
Регистрация: 28.01.2014
Сообщений: 8
28.01.2014, 14:07  [ТС]
открываеться также вверх но этого не видно

вот ещё код
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
package net.launcher.components;
 
import java.awt.Color;
import java.awt.image.BufferedImage;
 
import net.launcher.utils.BaseUtils;
 
public class ComboboxStyle
{
    public int x = 0;
    public int y = 0;
    public int w = 0;
    public int h = 0;
    public String fontName;
    public float fontSize = 1F;
    public Color color;
    public boolean visible = false;
    public Align align;
    public BufferedImage texture;
    
    public ComboboxStyle(int x, int y, int w, int h, String fontName, String texture, float fontSize, Color color, boolean visible, Align align)
    {
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
        this.fontName = fontName;
        this.fontSize = fontSize;
        this.color = color;
        this.visible = visible;
        this.align = align;
        this.texture = BaseUtils.getLocalImage(texture);
    }
    
    public void apply(Combobox combo)
    {
        combo.setVisible(visible);
        combo.setBounds(x, y, w, h);
        combo.setForeground(color);
        combo.setFont(BaseUtils.getFont(fontName, fontSize));
 
        int comboboxh = texture.getHeight() / 7;
        int comboboxw = texture.getWidth();
        combo.defaultTX = texture. getSubimage(0, 0, comboboxw, comboboxh);
        combo.rolloverTX = texture.getSubimage(0, comboboxh, comboboxw, comboboxh);
        combo.pressedTX = texture.getSubimage(0, comboboxh * 2, comboboxw, comboboxh);
        combo.selectedTX = texture.getSubimage(0, comboboxh * 2, comboboxw, comboboxh);
        combo.panelTX = texture.getSubimage(0, comboboxh * 3, comboboxw, comboboxh * 3);
        
        combo.initialy = y;
    }
}
Добавлено через 1 час 12 минут
Skipy можете подсказать как заменить на обычный ComboBox а не текстура как тут используеться?
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
28.01.2014, 14:44
Ну... я не знаю, как используется этот класс. Я бы просто заменил тип и создание объекта на JComboBox, а потом начал исправлять ошибки.
1
1 / 1 / 1
Регистрация: 28.01.2014
Сообщений: 8
28.01.2014, 17:05  [ТС]
побывал изменять х и y вот что получилось
Java
1
2
3
4
5
6
7
8
9
10
g.drawImage(genButton(w, pressedTX.getHeight(), pressedTX), 0, getHeight() - pressedTX.getHeight(), w, pressedTX.getHeight(), null);
            int righty = pressedTX.getHeight() * (elements.length + 1);
            int rightx = (initialy + pressedTX.getHeight()) - righty;
            
            if(getY() != rightx || getHeight() != rightx)
            {
                setLocation(getX(), rightx);
                setSize(getWidth(), rightx);
                y = getHeight();
                return;
как опустить текст? и убрать линии пустые формы списка?
Миниатюры
Combobox java  
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
28.01.2014, 17:58
Лучший ответ Сообщение было отмечено Constantin449 как решение

Решение

Цитата Сообщение от Constantin449 Посмотреть сообщение
как опустить текст? и убрать линии пустые формы списка?
Разобраться наконец, как работает этот код. А не надеяться на метод тыка.
1
1 / 1 / 1
Регистрация: 28.01.2014
Сообщений: 8
29.01.2014, 21:35  [ТС]
чтобы разобраться нужно java выучить

Добавлено через 1 час 25 минут
Мне подсказали что нужно переписать paintComponent отвечает за вывод этого изображения.
0
любитель покушать
 Аватар для Севак
687 / 641 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
29.01.2014, 22:32
Цитата Сообщение от Constantin449 Посмотреть сообщение
чтобы разобраться нужно java выучить
Добавлено через 1 час 25 минут
Мне подсказали что нужно переписать paintComponent отвечает за вывод этого изображения.
ну так учите, в чем проблема то? никто за вас в этом коде разбираться не будет
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.01.2014, 22:32
Помогаю со студенческими работами здесь

Посоветуйте примеры кода по Java. Теория прочтена, но с языком Java не знакома
Или может кто может дать готовый код. В теории вроде бы не очень сложно. :cry: 1.Напишите процедуру, которая по заданному сообщению...

Актуально ли изучать java сейчас по книге, где примеры в java 5?
Книга &quot;Изучаем Java&quot;Берт Бейтс, Кэтти Сьерра .До этого ничего не читал по java

Как бороться с java.lang.OutOfMemoryError: Java heap space
Доброго времени суток. На Java пишу программу, требующую большого количества информации (распознавалку изображений) Нужно хранить...

Хочу стать Java программистом, здесь есть Java программисты?
Здравствуйте, я хочу стать Ява программистом, если здесь есть Ява программисты, пж подскажите плюсы и мунусы профессии Ява программиста,...

Изменение шрифтов (хотя бы размер) в Java для отображения Java-приложений в Windows
здравствуйте! подскажите, пожалуйста, есть ли возможность через некие твики или патчи самой Java для Windows или же твики самой Windows...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru