powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Flow Layout + JPanel + Resizing = What?
6 сообщений из 6, страница 1 из 1
Flow Layout + JPanel + Resizing = What?
    #38563492
aliksend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно вот. (код из NetBeans)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    public FlowFrame() {
        initComponents();
        setLayout(new FlowLayout(FlowLayout.LEFT));
        add(new JButton("===1==="));
        add(new JButton("===2==="));
        add(new JButton("===3==="));
        add(new JButton("===4==="));
        add(new JButton("===5==="));
        add(new JButton("===6==="));
        add(new JButton("===7==="));
        add(new JButton("===8==="));
    }


Да! Этот код работает нормально, кнопочки правильно отображаются и правильно перемещаются при изменении размера формы.
Но! Если добавить на форме панель (с нефиксированной высотой и шириной - привязанную к правой и нижней границе формы) и делать все в ней, то панель будет менять свой размер, выходя за пределы формы, а кнопочки будут располагаться горизонтально в ряд.
Как то так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    public FlowFrame() {
        initComponents();
        jPanel1.setLayout(new FlowLayout(FlowLayout.LEFT));
        jPanel1.add(new JButton("===1==="));
        jPanel1.add(new JButton("===2==="));
        jPanel1.add(new JButton("===3==="));
        jPanel1.add(new JButton("===4==="));
        jPanel1.add(new JButton("===5==="));
        jPanel1.add(new JButton("===6==="));
        jPanel1.add(new JButton("===7==="));
        jPanel1.add(new JButton("===8==="));
    }




Реально ли добиться такого же поведения кнопочек в панели, как и при работа без неё, и, если да, то как?
Заранее благодарен за помощь
...
Рейтинг: 0 / 0
Flow Layout + JPanel + Resizing = What?
    #38563514
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, так фрейму всё равно надо было задать Layout.
Например так
Код: java
1.
2.
rootPane.setLayout(new BorderLayout());
rootPane.add(jPanel1, BorderLayout.CENTER);


А ещё, на сколько я помню, FlowLayout в Swing с какими-то косяками. Я когда делал аналогичную панель кнопок где-то нагуглил альтернативную реализациюю с более клевым переносом на следующую строку.
...
Рейтинг: 0 / 0
Flow Layout + JPanel + Resizing = What?
    #38563521
aliksend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У формы установлен Layout (GroupLayout) в сгенерированном коде.
Если не сложно, можете хотя бы пнуть в нужную сторону чтобы найти ту самую Blazkowiczальтернативную реализациюю
...
Рейтинг: 0 / 0
Flow Layout + JPanel + Resizing = What?
    #38563528
aliksend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот весь код, чтобы было понятнее
(почти весь)
Код: 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.
package FlowTest;

import java.awt.FlowLayout;
import javax.swing.JButton;

public class FlowFrame extends javax.swing.JFrame {

    public FlowFrame() {
        initComponents();
        jPanel1.setLayout(new FlowLayout(FlowLayout.LEFT));
        jPanel1.add(new JButton("===1==="));
        jPanel1.add(new JButton("===2==="));
        jPanel1.add(new JButton("===3==="));
        jPanel1.add(new JButton("===4==="));
        jPanel1.add(new JButton("===5==="));
        jPanel1.add(new JButton("===6==="));
        jPanel1.add(new JButton("===7==="));
        jPanel1.add(new JButton("===8==="));
    }
                     
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 452, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 246, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(10, 10, 10))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(11, 11, 11))
        );

        pack();
    }

    public static void main(String args[]) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Windows".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(FlowFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(FlowFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(FlowFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(FlowFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FlowFrame().setVisible(true);
            }
        });
    }
                
    private javax.swing.JPanel jPanel1;          
}


...
Рейтинг: 0 / 0
Flow Layout + JPanel + Resizing = What?
    #38563532
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliksend,

Точно! Вспомнил. В том-то и бага что Flowlayout не уменьшает свой preferred size.
Вот этот по-моему юзал вместо него
http://tips4java.wordpress.com/2008/11/06/wrap-layout/
...
Рейтинг: 0 / 0
Flow Layout + JPanel + Resizing = What?
    #38563559
aliksend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь, этот работает лучше, но все равно сдвигается вниз. Ну может что-то придумаю с ScrolledPane. Спасибо
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Flow Layout + JPanel + Resizing = What?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]