<Swing Dev> JSplitPane / heavyweight vs. lightweight components
Johannes.Lichtenberger
Johannes.Lichtenberger at uni-konstanz.de
Mon Jan 16 16:42:15 UTC 2012
Hello,
I'm adding a JSplitPane to a JPanel within a frame, and the frame has a
JMenuBar added. I'm now adding a JPanel component which embeds a PApplet
component (processing from processing.org) which extends Applet to the
JSplitPane. It doesn't seem to work even though I've added
/**
* Handle mix of heavyweight ({@link PApplet}) and leightweight (
{@link JMenuBar}) components.
*/
public void handleHLWeight() {
final Container parent = mView.component().getParent();
if (parent instanceof JComponent) {
((JComponent)parent).revalidate();
}
final Window window = SwingUtilities.getWindowAncestor(this);
if (window != null) {
window.validate();
}
}
to the embedded view which is for instance called within draw(), a
method which is called frameRate(int)-times per second.
Without the JSplitPane it seems fine, but now I'm adding another view
side by side and it doesn't work anymore :(
Well to recap the setup:
View extends JPane => is inserted in a JSplitPane.
View embeds a PApplet instance via (add(Component)).
JSplitPane is inserted in a JPane and added to the contentPane of a
JFrame instance together with a JMenuBar instance (via
setJMenuBar(JMenuBar)).
I'm using Java7.
johannes at luna:~/workspace/treetank$ java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
The setup of the JSplitPane is as follows:
/**
* Setup of the {@link JSplitPane} reference.
*
* @param paramPane
* {@link JSplitPane} reference
* @param paramTmpView
* {@link JComponent} reference to the left
* @param paramView
* {@link JComponent} reference to the right
*/
private void
setupPane(final JSplitPane paramPane, final JComponent
paramTmpView, final JComponent paramView) {
assert paramPane != null;
assert paramTmpView != null;
assert paramView != null;
paramPane.setSize(new Dimension(mGUI.getWidth(), mGUI.getHeight()));
paramPane.setAlignmentX(mGUI.getWidth() / 2f);
paramPane.setAlignmentY(mGUI.getHeight() / 2f);
paramPane.setDividerLocation(0.5);
paramPane.setContinuousLayout(true);
paramPane.setLeftComponent(paramTmpView);
paramPane.setRightComponent(paramView);
paramPane.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, new
Listener(paramPane));
final Container parent = paramPane.getParent();
if (parent instanceof JComponent) {
((JComponent)parent).revalidate();
}
final Window window = SwingUtilities.getWindowAncestor(this);
if (window != null) {
window.validate();
}
}
I'm not sure, I thing the final code is useless with revalidate() and so on.
kind regards,
Johannes
More information about the swing-dev
mailing list