powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Многострочный JToolBar
9 сообщений из 9, страница 1 из 1
Многострочный JToolBar
    #34077305
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сделать для переключения MDI-чайлдов вывод всех созданных окон на JToolbar в виде баттонов. Когда окон много - баттоны не помещаются и не видны. Как сделать чтобы JToolbar в зависимости от количества контролов на нем ресайзился по вертикали и становился многострочным?
...
Рейтинг: 0 / 0
Многострочный JToolBar
    #34077412
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JToolBar.setLayout
По умолчанию там BoxLayout, думаю тебе нужен FlowLayout
...
Рейтинг: 0 / 0
Многострочный JToolBar
    #34077767
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczJToolBar.setLayout
По умолчанию там BoxLayout, думаю тебе нужен FlowLayout

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
        JButton btn =  new  JButton();
        btn.setText("gggggg");
        jToolBar1.add(btn);
        Dimension dd = ((FlowLayout)(jToolBar1.getLayout())).minimumLayoutSize(jToolBar1);
        jToolBar1.setMinimumSize(dd);
        jToolBar1.setMaximumSize(dd);
        jToolBar1.setPreferredSize(dd);
        jToolBar1.invalidate();
         this .getContentPane().invalidate();
...
Рейтинг: 0 / 0
Многострочный JToolBar
    #34077789
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так вот minimumLayoutSize возвращает правильный Dimension но тулбар высоту не меняет.. какой метод какого контейнера вызвать чтобы тулбар поменял высоту?
...
Рейтинг: 0 / 0
Многострочный JToolBar
    #34078084
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bean написан, тема закрыта.
...
Рейтинг: 0 / 0
Многострочный JToolBar
    #34078211
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir KozlovBean написан, тема закрыта.

Фи таким быть. А зашарить для общественности?
...
Рейтинг: 0 / 0
Многострочный JToolBar
    #34078217
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Vladimir KozlovBean написан, тема закрыта.

Фи таким быть. А зашарить для общественности?

Доведу его до ума - зашарю. А то в палитре компонентов netbeans его зарегистрил, кинул на форму - и netbeans призадумался... щас займусь вылизыванием багов и потом поделюсь.
...
Рейтинг: 0 / 0
Многострочный JToolBar
    #34078274
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, предлагаю свой первый блин комом на всеобщее растерзание.

Как пользоваться - кинуть в южную часть, JDesktopPane в центр, созданные экземпляры JInternalFrame добавлять методом AddInternalFrame.

known bug: если закрываем свежесозданное окно которое не успело побывать на заднем плане - не всегда отрабатывает componentRemoved (кнопка пропадает только если изменить размер главного окна).


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 package  JFXDCtrl;
 import  javax.swing.JButton;
 import  javax.swing.JInternalFrame;

 public   class  JMDITaskButton  extends  JButton {
     public  JInternalFrame MDIChild;
     public  JMDITaskButton(JInternalFrame obj) {
         super ();
        MDIChild = obj;
        setText(obj.getTitle());
    }   
}

Код: plaintext
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.
 package  JFXDCtrl;

 import  java.awt.Component;
 import  java.awt.Dimension;
 import  java.awt.FlowLayout;
 import  java.awt.event.ActionEvent;
 import  java.awt.event.ActionListener;
 import  java.awt.event.ComponentEvent;
 import  java.awt.event.ComponentListener;
 import  java.awt.event.ContainerAdapter;
 import  java.beans.PropertyVetoException;
 import  javax.swing.JInternalFrame;
 import  javax.swing.JPanel;
 import  javax.swing.event.InternalFrameEvent;
 import  javax.swing.event.InternalFrameListener;

 public   class  JMDITaskBar  extends  JPanel {
     boolean  IsAnybodyHere = false;
    /** Creates a new instance of JMDITaskBar */
     public  JMDITaskBar() {
         super ();
         this .setLayout( new  FlowLayout(FlowLayout.LEFT));
         this .addComponentListener( new  ComponentListener() {
             public   void  componentHidden(ComponentEvent e) {
            }
             public   void  componentMoved(ComponentEvent e) {
            }
             public   void  componentResized(ComponentEvent e) {
                 if  (IsAnybodyHere) {
                    ReLayout();                    
                }
            }
             public   void  componentShown(ComponentEvent e) {
            }
        } );
        
         this .addContainerListener( new  ContainerAdapter() {
             public   void  componentAdded(java.awt.event.ContainerEvent evt) {
                ReLayout();
            }
             public   void  componentRemoved(java.awt.event.ContainerEvent evt) {
                ReLayout();
            }
        });
    }
    
     private   void  ReLayout() {
        doLayout();
         int  k =  0 ;
         for  ( int  i= 0 ; i<getComponentCount(); i++) {
            Component C = getComponent(i);
             int  p = C.getY() + C.getHeight() + ((FlowLayout)(getLayout())).getVgap();
             if  (k<p) k=p;
        }
         if  (k< 26 ) k= 26 ;
        setPreferredSize( new  Dimension(getWidth(),k));
        setSize( new  Dimension(getWidth(),k));
        getParent().doLayout();
    }
    
     public   void  AddInternalFrame(JInternalFrame mdiChild) {
        JMDITaskButton bt =  new  JMDITaskButton(mdiChild);
        add(bt);
        bt.addNotify();
        bt.addActionListener( new  ActionListener() {
             public   void  actionPerformed(ActionEvent e) {
                ((JMDITaskButton)(e.getSource())).MDIChild.moveToFront();
                 try  {
                    ((JMDITaskButton)(e.getSource())).MDIChild.setMaximum(true);
                }  catch  (PropertyVetoException ex) {
                    ex.printStackTrace();
                }
            }
        });
        
        mdiChild.addInternalFrameListener( new  InternalFrameListener() {
             public   void  internalFrameActivated(InternalFrameEvent e) {
            }
             public   void  internalFrameClosed(InternalFrameEvent e) {
                 for  ( int  i= 0 ; i< getComponentCount();i++) {
                    JMDITaskButton bc = (JMDITaskButton) getComponent(i);
                     if  (bc.MDIChild==e.getSource()) {
                        remove(i);
                         break ;
                    }
                }
            }
             public   void  internalFrameClosing(InternalFrameEvent e) {
            }
             public   void  internalFrameDeactivated(InternalFrameEvent e) {
            }
             public   void  internalFrameDeiconified(InternalFrameEvent e) {
            }
             public   void  internalFrameIconified(InternalFrameEvent e) {
            }
             public   void  internalFrameOpened(InternalFrameEvent e) {
            }
        });
        // I don't know what happening in netbeans designer,
        //  so I have made dirty hack :)
        IsAnybodyHere = true; 
    }    
}
...
Рейтинг: 0 / 0
Многострочный JToolBar
    #34078322
Vladimir Kozlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
патч:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
             public   void  internalFrameClosed(InternalFrameEvent e) {
                 for  ( int  i= 0 ; i<getComponentCount();i++) {
                    JMDITaskButton bc = (JMDITaskButton) getComponent(i);
                     if  (bc.MDIChild.equals(e.getSource())) {
                        remove(bc);
                        bc.removeNotify();
                        validate();
                        repaint();
                         break ;
                    }
                }
            }

Ругайте/хвалите/предлагайте фичи :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Многострочный JToolBar
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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