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

Создание кнопок в цикле

28.10.2020, 16:33. Показов 3848. Ответов 3
Метки gui, java (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код, который должен добавлять в окно кнопки, как на калькуляторе, но, проблема в том, что я не понимаю почему не работает цикл. Если его изменить на i=0; i< 12; i++, то работает, но тогда неправильно отображаются цифры на кнопках.

Заранее спасибо.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void setSouth(JFrame fr){
        ButtonGroup myGroup=new ButtonGroup();
        JPanel myPanel2=new JPanel();
        ArrayList<JButton> masBtn = new ArrayList<JButton>();
        myPanel2.setLayout(new GridLayout(4,3));
        for (int i = 1; i <= 12; i++){
            masBtn.add(new JButton("" + i));
            myPanel2.setPreferredSize(new Dimension(200,200));
            myGroup.add(masBtn.get(i));
            myPanel2.add(masBtn.get(i));
        }
        fr.add(myPanel2, BorderLayout.SOUTH);
 
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.10.2020, 16:33
Ответы с готовыми решениями:

Создание кнопок в цикле
Мне нужно создать кнопки в приложение в цикле. Код примерно такой: Объявляем переменную: int hmb = 16; И потом нужно...

Создание кнопок в цикле
Есть цикл, нужно в нем создавать кнопки. Был бы весьма признателен, не силен в html разметке да и в php тоже, разбираюсь инстинктивно. ...

Создание кнопок программно в цикле
Пытаюсь создать несколько кнопок в цикле. Dim Btn As New Button Dim F As Long For F = 1 To Val(Me.KOL_VO.Text)...

3
 Аватар для Сиггрид
48 / 35 / 16
Регистрация: 19.11.2010
Сообщений: 107
28.10.2020, 17:48
так он пытается получить элемент с индексом i, а его еще нет
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.10.2020, 20:12
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args) {
        JFrame fr = new JFrame();
        fr.setBounds(300, 300, 300, 300);
        setSouth(fr);
        fr.setVisible(true);
    }
 
    public static void setSouth(JFrame fr) {
        ButtonGroup myGroup = new ButtonGroup();
        JPanel myPanel2 = new JPanel();
        ArrayList<JButton> masBtn = new ArrayList<>();
        myPanel2.setLayout(new GridLayout(4, 3));
        for (int i = 0; i < 12; i++) {
            masBtn.add(new JButton("" + (i + 1)));
            myPanel2.setPreferredSize(new Dimension(200, 200));
            myGroup.add(masBtn.get(i));
            myPanel2.add(masBtn.get(i));
        }
        fr.add(myPanel2, BorderLayout.SOUTH);
 
    }
1
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
29.10.2020, 10:17
Не понимаю, а зачем кнопки помещать в ArrayList ?

Добавлено через 36 минут
хм... любопытно, можно динамически плодить объекты и обращаться к ним, чем заранее резервировать количество n, возьмем на заметку

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
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
 
 
 
public class ListButton
{
    public JLayeredPane swap;
    public ArrayList<JButton> masBtn = new ArrayList<JButton>();
    public int y = 20;
    public int n;
    
    
    public ListButton()
    {
         make_Window();
         make_for();
    }
 
    
    private void make_Window()
    {
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(800, 600));
        panel.setOpaque(false);
        
        JFrame win = new JFrame("Ray");
        swap = new JLayeredPane();
        swap = win.getLayeredPane();
        win.add(panel);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        win.setResizable(false);
        win.getContentPane().setBackground(Color.WHITE);
        win.pack();
        win.setLayout(null);
        win.setLocationRelativeTo(null);
        win.setVisible(true);
    }
    
    
    private void make_for()
    {
        make_Button(10);
    }
    
    
    private void make_Button(int i)
    {
        for (int z = 0; z < i; z++)
        {
            JButton bt = new JButton();
            bt.setName(z+"");
            bt.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                { 
                    if (Integer.parseInt(((JButton) e.getSource()).getName()) == 0)
                    {
                        masBtn.get(masBtn.size()-1).setBackground(Color.RED);
                    }
                    else if (Integer.parseInt(((JButton) e.getSource()).getName()) == 1)
                    {
                        masBtn.get(masBtn.size()-2).setVisible(false);
                    }
                    else
                    {
                        y += 80;
                        make_Button(2);
                    }
                }
            });
            bt.addMouseListener(new MouseListener()
            {
                public void mouseClicked(MouseEvent e){}
                public void mousePressed(MouseEvent e){}
                public void mouseReleased(MouseEvent e){}
                public void mouseEntered(MouseEvent e){}
                public void mouseExited(MouseEvent e){}
            });
            bt.setBounds(20+z*60, y, 50, 50);
            bt.setMargin(new Insets(0,0,0,0));
            bt.setHorizontalTextPosition(SwingConstants.CENTER);
            bt.setForeground(Color.WHITE);
            bt.setOpaque(true);
            bt.setContentAreaFilled(true);
            bt.setBorderPainted(true);
            bt.setFocusPainted(true);
            bt.setLayout(null);
            
            masBtn.add(bt);
            swap.add(masBtn.get(n), new Integer(0), 0);
            n++;
        }
    }
    
    
    public static void main(String[] args)
    {
        new ListButton();
    }
}
Хотя выше все равно не понимаю зачем калькулятору ListArray если конечное количество кнопок известно. А вот динамически плодить было бы полезно в графических редакторах при создании слоев и конечно цепляет создание кнопки и прочее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.10.2020, 10:17
Помогаю со студенческими работами здесь

Создание кнопок в цикле с разными параметрами
from tkinter import * root = Tk() def hi(i): print(i) for i in range(10): Button(text=str(i), command=lambda:...

Динамическое создание кнопок в цикле (Android)
создаю кнопки по циклу void show(){ public LinearLayout show; setContentView(R.layout.show_test); show =...

Нажатие кнопок в цикле
Всем привет, столкнулся с проблемой, подскажите пожалуйста как написать код программы, в которой цикл нажатия кнопок, т.е. нажал 1 (первую...

Изменение свойств кнопок в цикле
Доброго времени суток. Столкнулся с такой проблемой. Есть форма на которой около 400 кнопок. При нажатии на управляющие кнопки, группы по...

Подписать на событие несколько кнопок в цикле
Как пройтись по всем кнопкам и поставить событие: private void buttons_MouseEnter(object sender, EventArgs e) { ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru