Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Многострочный JToolBar / 9 сообщений из 9, страница 1 из 1
24.10.2006, 14:58:48
    #34077305
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многострочный JToolBar
Хочу сделать для переключения MDI-чайлдов вывод всех созданных окон на JToolbar в виде баттонов. Когда окон много - баттоны не помещаются и не видны. Как сделать чтобы JToolbar в зависимости от количества контролов на нем ресайзился по вертикали и становился многострочным?
...
Рейтинг: 0 / 0
24.10.2006, 15:25:15
    #34077412
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многострочный JToolBar
JToolBar.setLayout
По умолчанию там BoxLayout, думаю тебе нужен FlowLayout
...
Рейтинг: 0 / 0
24.10.2006, 16:38:33
    #34077767
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многострочный JToolBar
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
24.10.2006, 16:41:25
    #34077789
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многострочный JToolBar
так вот minimumLayoutSize возвращает правильный Dimension но тулбар высоту не меняет.. какой метод какого контейнера вызвать чтобы тулбар поменял высоту?
...
Рейтинг: 0 / 0
24.10.2006, 17:57:40
    #34078084
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многострочный JToolBar
Bean написан, тема закрыта.
...
Рейтинг: 0 / 0
24.10.2006, 18:34:44
    #34078211
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многострочный JToolBar
Vladimir KozlovBean написан, тема закрыта.

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

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

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

Как пользоваться - кинуть в южную часть, 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
24.10.2006, 19:14:35
    #34078322
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многострочный JToolBar
патч:

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


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