Re: confused with LayoutManagement: JSplitPane
Patricia Shanahan <pats@acm.org> wrote:
You could write an SSCCE that exhibits the behavior you don't like, and
explain what is wrong in terms of what that application does. That would
give people a test case for experiments.
Ok, convinced me, and sorry for taking so long for it...
Notes:
- I'm really a newbie to Java *GUI* programming and haven't
yet found how to exit the app on Alt-F4. Therefore
the java-process needs to be killed separately afterwards.
(My actual program is an Applet, so I don't have the problem
there.) I guess it's just a question of adding some Listener
that calls some exit-method somewhere...
- What I want here is obviously pushing JSplitPane's envelope.
I quite likely will need some more own code in Listeners to
add at various places.
What I like/dislike in current behaviour:
- initially the last component is now hidden (good)
- but the third one takes double space instead (bad)
I'd like the space to be equally shared among the visible ones.
- if I enlarge the frame (or move the middle slider), it unminimizes
comp4 to its minimumSize (bad) (this doesn't happen if comp4
had been manually minimized, despite its non-zero minimumSize.)
How do I get comp4 initially minimized such that it doesn't re-
appear on resizes from the outside?
- If instead comp4 is initially unminimized, and then the middle
slider is moved (a little), the other sliders stay where they
are (a result of the rather strange resizeWeights) (good)
Otoh, it impedes proper equal resizing of the components (bad),
so it is just a limited quality workaround.
- I can move the middle slider further and push away the other ones,
but with the other ones, I cannot push the middle slider. This
is logical behaviour from implementation POV, but unlogical for
the user. (bad)
- Creating a 4-pane consistent MegaSplitPane from normal SplitPanes
likely isn't a trivial thing, but perhaps some aspects are easier
to fix than by a full rewrite of SplitPane and its plaf.
Finally, here is the code:
for easy retrieval from www:
http://www.logic.at/people/avl/stuff/LayoutDemo.java
and inline for easier discussion:
(please don't comment on style - it's an SSCCE, not a model)
-----snip to end----
import java.awt.Dimension;
import javax.swing.*;
public class LayoutDemo extends JFrame {
private JSplitPane[] jsps=new JSplitPane[3];
private JButton[] jbs=new JButton[4];
public LayoutDemo() {
for (int i=0;i<4;i++) {
JButton jb=jbs[i]=new JButton("comp"+(i+1));
jb.setMinimumSize(new Dimension(50,50));
jb.setPreferredSize(new Dimension(150,150));
}
// this one is nice for moving the middle slider:
final double rw[]= { 0.0, 0.5, 1.0 };
for (int i=0;i<3;i++) {
JSplitPane jsp=jsps[i]=new JSplitPane();
jsp.setOneTouchExpandable(true);
jsp.setResizeWeight( rw[i] );
jsp.setContinuousLayout( true );
}
jsps[0].setLeftComponent(jbs[0]);
jsps[0].setRightComponent(jbs[1]);
jsps[1].setLeftComponent(jsps[0]);
jsps[1].setRightComponent(jsps[2]);
jsps[2].setLeftComponent(jbs[2]);
jsps[2].setRightComponent(jbs[3]);
jsps[2].setDividerLocation(10000);
jsps[2].setLastDividerLocation(-1);
getContentPane().add(jsps[1], java.awt.BorderLayout.CENTER);
pack();
setSize(700,200);
setVisible(true);
}
public static void main(String args[]) {
new LayoutDemo();
}
}