Как настроить разделитель JSplitPane и поддерживать функциональность стрелки одним касанием?
Итак, моя проблема сводится к следующему... Разделители по умолчанию довольно уродливы, плюс я бы хотел добавить к ним метку (в смысле I-want-text-on-it, а не в "добавлении 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);
}
}
1 ответ
Я вижу, что вы можете изменить границу на разделителе разделенной панели, но когда я это сделаю, он уберет стрелки одним касанием, которые я хочу сохранить.
все эти методы можно переопределить события из
Mouse(Xxx)Listener
,PropertyChangeListener
а такжеButtonModel
нет ничего лучше как Substance SubstanceSplitPaneDividerчасть Custom Look и Feels тоже переопределяют эти методы