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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление компонентов в JPanel, Добавление компонентов в JPanel 
V
    Опции темы
нуп
Дата 27.6.2011, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Есть JPanel, c 2 кнопками(ок, отмена).  Как можно динамически добавлять элементы(например JTextField) в панель, чтобы кнопочки были всегда внизу, а панель растягивалась по высоте?
user posted image
Сейчас сделал добавление тупо по setLocation
Код

 for(int i = 0; i < 4; i++) {
            JTextField o = new JTextField();
            panel.invalidate();
            panel.add(o);
            o.setSize(100, 20);
            o.setLocation(10, 25 * i + 5);
            o.setVisible(true);
        }

Как надо добавлять правильно?

Это сообщение отредактировал(а) нуп - 27.6.2011, 14:25
PM MAIL   Вверх
jk1
Дата 27.6.2011, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Как надо добавлять правильно?


Замените setLocation(...) на

Код

o.updateUI();


Если LayoutManager используется правильно, то должно сработать.

Это сообщение отредактировал(а) jk1 - 27.6.2011, 14:34


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
нуп
Дата 27.6.2011, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Цитата(jk1 @  27.6.2011,  14:34 Найти цитируемый пост)
Если LayoutManager используется правильно, то должно сработать.

а какой layout надо выставлять?
PM MAIL   Вверх
Stolzen
Дата 27.6.2011, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Например, GridLayout. Вот так:

Код

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class LayoutTest {
    
    private static void createAndShowGUI() {
        final JFrame frame = new JFrame("Table");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // в эту панель будем добавлять кнопки
        final JPanel topPanel = new JPanel(new GridLayout(0, 1));
        final JButton button = new JButton("Click Me");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                final JButton newButton = new JButton("Some button");
                topPanel.add(newButton);
                
                // перерисовываем
                frame.validate();
                frame.repaint();
                
                // меняем размер формы
                frame.pack();
            }
        });
        topPanel.add(button);
        
        // эта панель будет находится внизу
        final JPanel bottomPalel = new JPanel();
        bottomPalel.add(new JLabel("Some text on the bottom")); 
        
        // основная панель, в нее добавляем остальные
        Box panel = Box.createVerticalBox();
        panel.add(topPanel);
        panel.add(bottomPalel);
        
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}



Это сообщение отредактировал(а) Stolzen - 27.6.2011, 14:55


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
нуп
Дата 27.6.2011, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Почти получилось, осталась проблема с высотой. Что надо прописать для JPanel, чтобы он по мере добавления компонентов сам менял высоту? 
Код

public class TInput extends javax.swing.JPanel {
    final JPanel topPanel, bottomPanel, mainPanel;

    public TInput() {

        initComponents();

        mainPanel = new JPanel();
        bottomPanel = new JPanel(new FlowLayout());
        topPanel = new JPanel(new GridLayout(0, 1));
        bottomPanel.add(new JButton("Ok"));
        bottomPanel.add(new JButton("Cancel"));

        setLayout(new GridLayout(0, 1));
        add(mainPanel);
        mainPanel.setBackground(Color.white);

        Box panel = Box.createVerticalBox();
        mainPanel.add(panel);
        panel.add(topPanel);
        panel.add(bottomPanel);
        panel.setVisible(true);

        for (int i = 0; i < 10; i++) {
            JTextField o = new JTextField();
            topPanel.add(o);
            o.setSize(100, 20);
        }

    }

Вот так выходит, если менять количество JTextField
user posted image

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Цитата(нуп @  27.6.2011,  17:17 Найти цитируемый пост)
Что надо прописать для JPanel, чтобы он по мере добавления компонентов сам менял высоту? 

Я делал так:
Цитата(Stolzen @  27.6.2011,  15:55 Найти цитируемый пост)
                // перерисовываем
                frame.validate();
                frame.repaint();
                
                // меняем размер формы
                frame.pack();

Подходит?

Если нет - тогда, думаю, ручками каждый раз увеличивать форму на 20 - если такая высота у добавляемого компонента. 
Типа frame.setSize() или this.setSize(), смотря какой у вас контейнер главный.
(Хотя мне этот вариант не очень нравится, но он должен работать)





--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
нуп
Дата 27.6.2011, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Дело в том, что главный контейнер это JPanel, а для него нету pack()  smile  Наверное придется считать высоту самому 
PM MAIL   Вверх
jk1
Дата 27.6.2011, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Наверное придется считать высоту самому 


А у него updateUI() вызывать не пробовали, по аналогии?



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
нуп
Дата 27.6.2011, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Вставил все в JFrame и заработало. Всем смс за помощь. smile 
PM MAIL   Вверх
Skipy
Дата 28.6.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

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



А что с этим JFrame будет при вставке 50 полей? 100?

Лучше поместить JPanel в JScrollPane и выставить окну оптимальные размеры.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
нуп
Дата 28.6.2011, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Это для Popup окошка. На примере наследование идет от JFrame, или не правильно это?
PM MAIL   Вверх
jk1
Дата 28.6.2011, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Это для Popup окошка. На примере наследование идет от JFrame, или не правильно это? 


Для popup я бы выбрал JDialog.


--------------------
Opinions are like assholes — everybody has one
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.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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