From: Robbo on 26 Mar 2010 12:51 Hello, I would like to have horizontal JSplitPane with two panels, where one of them (bottom) should have always the same height when we use only one touch expandables (we assume, user doesn't use dragging of divider). It is sample code: import javax.swing.*; import java.awt.*; public class Swing5 { public static void main(String[] args) { new Swing5(); } class MyPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D gDC2 = (Graphics2D)g; gDC2.drawRect(0,0, 298,48); gDC2.drawLine(0,0, 298,48); } } public Swing5() { JFrame f = new JFrame("Swing..."); f.setSize(300, 100); Container c = f.getContentPane(); c.setLayout(new BorderLayout()); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyPanel p1 = new MyPanel(); p1.setPreferredSize(new Dimension(300, 100)); MyPanel p2 = new MyPanel(); p2.setMinimumSize(new Dimension(0, 50)); p2.setMaximumSize(new Dimension(0, 50)); p2.setPreferredSize(new Dimension(300, 50)); JSplitPane sp1 = new JSplitPane(); sp1.setTopComponent(p1); sp1.setBottomComponent(p2); sp1.setDividerSize(15); sp1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); sp1.setResizeWeight(1.0); sp1.setOneTouchExpandable(true); c.add(sp1); f.pack(); f.setVisible(true); } } Now, try to compile and run that application. Next: 1. press right one touch arrow -- bottom panel is now hidden. 2. maximalize application window, so it covers whole screen. 3. press left one touch arrow -- bottom panel is now shown, but unfortunatelly it has bigger height than I wanted!!! What to do, to make bottom panel having always the same height? Thanks in advance for your help. Regards, Robbo
From: John B. Matthews on 26 Mar 2010 22:56 In article <hoipd2$on9$1(a)nemesis.news.neostrada.pl>, "Robbo" <nie.mam(a)yle.com> wrote: > Hello, > > I would like to have horizontal JSplitPane with two panels, > where one of them (bottom) should have always the same > height when we use only one touch expandables > (we assume, user doesn't use dragging of divider). [...] > Now, try to compile and run that application. Next: > 1. press right one touch arrow -- bottom panel is now hidden. > 2. maximalize application window, so it covers whole screen. > 3. press left one touch arrow -- bottom panel is now shown, but > unfortunatelly it has bigger height than I wanted!!! > > What to do, to make bottom panel having always the same height? Handling componentResized events seemed to get the desired effect: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Swing6 { private static class MyPanel extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.drawLine(0, 0, getWidth(), getHeight()); g.drawLine(getWidth(), 0, 0, getHeight()); } } private static void create() { JFrame f = new JFrame("JSplitPane"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final MyPanel p1 = new MyPanel(); p1.setPreferredSize(new Dimension(300, 150)); final MyPanel p2 = new MyPanel(); p2.setMinimumSize(new Dimension(0, 0)); p2.setPreferredSize(new Dimension(300, 100)); p2.setMaximumSize(new Dimension(300, 100)); final JSplitPane jsp = new JSplitPane(); jsp.setTopComponent(p1); jsp.setBottomComponent(p2); jsp.setOrientation(JSplitPane.VERTICAL_SPLIT); jsp.setResizeWeight(1.0); jsp.setOneTouchExpandable(true); jsp.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { if (p2.getHeight() > 0) jsp.resetToPreferredSizes(); } }); f.add(jsp); f.pack(); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { create(); } }); } } As an aside, it's a good habit to build the GUI on the EDT: <http://java.sun.com/docs/books/tutorial/uiswing/concurrency/initial.html > -- John B. Matthews trashgod at gmail dot com <http://sites.google.com/site/drjohnbmatthews>
From: Roedy Green on 28 Mar 2010 12:08 On Fri, 26 Mar 2010 17:51:49 +0100, "Robbo" <nie.mam(a)yle.com> wrote, quoted or indirectly quoted someone who said : >Hello, > >I would like to have horizontal JSplitPane with two panels, >where one of them (bottom) should have always the same >height when we use only one touch expandables >(we assume, user doesn't use dragging of divider). If you don't want variable size, why not just use two JPanels inside a JPanel? -- Roedy Green Canadian Mind Products http://mindprod.com If you tell a computer the same fact in more than one place, unless you have an automated mechanism to ensure they stay in sync, the versions of the fact will eventually get out of sync.
From: John B. Matthews on 28 Mar 2010 13:27 In article <kmvuq5lk4r88ov60p7ssdst1rlt0klkd1o(a)4ax.com>, Roedy Green <see_website(a)mindprod.com.invalid> wrote: > On Fri, 26 Mar 2010 17:51:49 +0100, "Robbo" <nie.mam(a)yle.com> wrote, > quoted or indirectly quoted someone who said : > > >Hello, > > > >I would like to have horizontal JSplitPane with two panels, > >where one of them (bottom) should have always the same > >height when we use only one touch expandables > >(we assume, user doesn't use dragging of divider). > > If you don't want variable size, why not just use two JPanels > inside a JPanel? I wondered about this, too. I'm guessing the OP wants to leverage the one-touch show/hide feature of JSplitPane, at least when it's supported. -- John B. Matthews trashgod at gmail dot com <http://sites.google.com/site/drjohnbmatthews>
|
Pages: 1 Prev: export data from jtable to Excel 2007 Next: Help with Struts tag <logic:equal> |