есть JTabbedPane, добавляем туда JDesktopPane tab с default layout (т.е. NULL).
внутри этого tab хочу показать два internal frames, причем размеры (допустим, горизонтальные) этих internal frames хочу установить такие же, как у JdesktopPane tab.
Если использовать такую схему:
int maxWidth = tabbedPane.getWidth();
internalFrame.setSize(maxWidth, height);
то internal frame чуть-чуть не влезает, т.к. ширина должна быть чуть-чуть меньше из-за бордера.
а ширину бордера никак не удается узнать, везде пишется 0:
System.out.println(tabbedPane.getInsets());
System.out.println(mainFrame.getInsets());
System.out.println(desktopPane.getInsets());
--result--
java.awt.Insets[top=0,left=0,bottom=0,right=0]
java.awt.Insets[top=0,left=0,bottom=0,right=0]
java.awt.Insets[top=0,left=0,bottom=0,right=0]
то же самое, если
System.out.println(desktopPane.getInsets() + " -- " + desktopPane.getSize());
--result--
java.awt.Insets[top=0,left=0,bottom=0,right=0] -- java.awt.Dimension[width=0,height=0]
в общем, везде одни нули.
так как же правильно установить ширину и высоту internal frames с учетом размера JDesktopPane, в котором они лежат?
B>Посмотри реализацию метода DefaultDesktopManager.maximizeFrame(JInternalFrame f)
B>Мне кажется что он должен тебя натолкнуть на поиски в нужном направлении.
посмотрел. попробовал делать как там, результат тот же. беру parent от моего jinternalFrame — везде ноли. чего-то я здесь явно не понимаю...
System.out.println("parent=" + processStatusFrame.getParent());
System.out.println(processStatusFrame.getParent().getBounds());
System.out.println(desktopPane.getBounds());
System.out.println(desktopPane.getParent().getInsets());
parent=javax.swing.JDesktopPane[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=328,maximumSize=,
minimumSize=,preferredSize=,optimizedDrawingPossible=false,desktopManager=javax.swing.plaf.basic.BasicDesktopP
aneUI$BasicDesktopManager@1394894]
java.awt.Rectangle[x=0,y=0,width=0,height=0]
java.awt.Rectangle[x=0,y=0,width=0,height=0]
java.awt.Insets[top=0,left=0,bottom=0,right=0]
причем до этого вызывается desktopPane.add(processStatusFrame), т.е. desktopPane является parent для processStatusFrame
Здравствуйте, alskor, Вы писали:
A>A>parent=javax.swing.JDesktopPane[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=328,maximumSize=,
A>minimumSize=,preferredSize=,optimizedDrawingPossible=false,desktopManager=javax.swing.plaf.basic.BasicDesktopP
A>aneUI$BasicDesktopManager@1394894]
A>java.awt.Rectangle[x=0,y=0,width=0,height=0]
A>java.awt.Rectangle[x=0,y=0,width=0,height=0]
A>java.awt.Insets[top=0,left=0,bottom=0,right=0]
A>
Может проблема в том что ты этот код вызываешь ещё до того как был поризведен layout. Поэтому актуальные размеры ещё и не установлены. Попробуй насильно инициировать layout нужного контейнера.
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, alskor, Вы писали:
A>>A>>parent=javax.swing.JDesktopPane[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=328,maximumSize=,
A>>minimumSize=,preferredSize=,optimizedDrawingPossible=false,desktopManager=javax.swing.plaf.basic.BasicDesktopP
A>>aneUI$BasicDesktopManager@1394894]
A>>java.awt.Rectangle[x=0,y=0,width=0,height=0]
A>>java.awt.Rectangle[x=0,y=0,width=0,height=0]
A>>java.awt.Insets[top=0,left=0,bottom=0,right=0]
A>>
B>Может проблема в том что ты этот код вызываешь ещё до того как был поризведен layout. Поэтому актуальные размеры ещё и не установлены. Попробуй насильно инициировать layout нужного контейнера.
увы, не помогло. пробовал все, что можно. плюнул на это дело, использовал константу — решил, что "5" вполне достаточно
не настолько важная задача, чтобы больше 3 часов голову ломать. просто надо было окошки разместить в приложении при первом старте. при всех последующих стартах я все равно позиции и размеры сохраняю/восстанавливаю.
хотя чисто теоретически очень интересно было бы узнать, почему же не получилось... я был свято уверен, что скажу типа getBorder().getWidth или типа того. ан нет — фиг!