Как настроить разделитель JSplitPane и сохранить функциональность стрелки в одно касание?

Итак, моя проблема сводится к следующему... Разделители по умолчанию довольно уродливы, плюс я хотел бы добавить к ним метку (в смысле "Я хочу текст на нем", а не в смысле «добавление JLabel в его макет»). Я вижу, что вы можете изменить границу разделителя разделенной панели, но когда я это делаю, он удаляет стрелки в одно касание, которые я хочу сохранить.

Любые мысли о том, как я могу иметь оба?

Вот SSCCE, который демонстрирует как поведение по умолчанию, так и то, что происходит, когда я изменяю границу разделителя:

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);
}
}
6
задан Cary Young 15 June 2012 в 19:57
поделиться