So, my problem boils down to this... The default dividers are kind of ugly, plus I would like to add a label to it (in the I-want-text-on-it sense, not in the "adding a JLabel to its layout" sense). I see that you can change the border on the split pane divider, but when I do that, it removes the one-touch arrows, which I want to keep around.
Any thoughts on how I can have both?
Here's a SSCCE that demonstrates both the default behavior and what happens when I change the divider border:
import javax.swing.*;
import javax.swing.plaf.basic.BasicSplitPaneDivider;
import javax.swing.plaf.basic.BasicSplitPaneUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SplitPaneFun {
public static void main(String[] args) {
//Here I'm messing around with the divider look. This seems to remove the one-touch arrows. These blocked-out lines illustrate
// what I'm doing to modify the divider's border. Does this look right?:
//------------------------------------------------------------------------------------------------
JSplitPane withCustomDivider = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JPanel(), new JPanel());
BasicSplitPaneDivider divider = ( (BasicSplitPaneUI) withCustomDivider.getUI()).getDivider();
withCustomDivider.setOneTouchExpandable(true);
divider.setDividerSize(15);
divider.setBorder(BorderFactory.createTitledBorder(divider.getBorder(), "Custom border title -- gets rid of the one-touch arrows!"));
//------------------------------------------------------------------------------------------------
//build a different splitpane with the default look and behavior just for comparison
JSplitPane withDefaultDivider = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JPanel(), new JPanel());
withDefaultDivider.setOneTouchExpandable(true);
//slap it all together and show it...
CardLayout splitsLayout = new CardLayout();
final JPanel splits = new JPanel(splitsLayout);
splits.add(withCustomDivider, "custom");
splits.add(withDefaultDivider,"default");
JButton toggle = new JButton( "click to see the other split pane");
toggle.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
((CardLayout)splits.getLayout()).next(splits);
}
});
JFrame frame = new JFrame("Split Pane Divider Comparison");
frame.setLayout(new BorderLayout());
frame.add(splits, BorderLayout.CENTER);
frame.add(toggle, BorderLayout.PAGE_END);
frame.setSize(600,500);
frame.setVisible(true);
}
}
I see that you can change the border on the split pane divider, but when I do that, it removes the one-touch arrows, which I want to keep around.
all these methods is possible to override the events from Mouse(Xxx)Listener, PropertyChangeListener and ButtonModel, nothing better around as Substance SubstanceSplitPaneDivider
part of Custom Look and Feels override these methods too
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With