Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Flow Layout + JPanel + Resizing = What? / 6 сообщений из 6, страница 1 из 1
17.02.2014, 18:08
    #38563492
aliksend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Flow Layout + JPanel + Resizing = What?
Собственно вот. (код из 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
17.02.2014, 18:31
    #38563514
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Flow Layout + JPanel + Resizing = What?
Ну, так фрейму всё равно надо было задать Layout.
Например так
Код: java
1.
2.
rootPane.setLayout(new BorderLayout());
rootPane.add(jPanel1, BorderLayout.CENTER);


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

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


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