如何更改 JSplitPane 中拆分栏的样式?
How can I change the style of the split bar in a JSplitPane?
我正在为我的一些面板使用 JSplitPane
s,但它们有点厚,尤其是当你有几个面板显示时。
是否可以将这些条形设计成更细的样式,例如带箭头的线,甚至只是一条线?
您可以使用 setDividerSize
来改变它的宽度。它的默认值为 10。完整示例:
public class SplitPaneTest extends JFrame {
public SplitPaneTest() {
super("test");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel left = new JPanel();
JPanel right = new JPanel();
JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right);
System.out.println(sp.getDividerSize()); //Prints 10
sp.setDividerSize(1);
add(sp, BorderLayout.CENTER);
pack();
setLocationRelativeTo(null);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new SplitPaneTest().setVisible(true);
});
}
}
但是,Look & Feels 能够改变它的外观,因为它们改变了它的 UI
。如果上述解决方案对您不起作用,您将不得不弄乱它的UI。例如,在我的一个应用程序中,我不想要任何一行(同时使用 Windows 外观),因此为了使其不可见,我必须:
sp.setUI(new BasicSplitPaneUI() {
@Override
public BasicSplitPaneDivider createDefaultDivider() {
return new BasicSplitPaneDivider(this) {
private static final long serialVersionUID = -6000773723083732304L;
@Override
public void paint(Graphics g) {
//Divider gets no painting
}
};
}
});
我正在为我的一些面板使用 JSplitPane
s,但它们有点厚,尤其是当你有几个面板显示时。
是否可以将这些条形设计成更细的样式,例如带箭头的线,甚至只是一条线?
您可以使用 setDividerSize
来改变它的宽度。它的默认值为 10。完整示例:
public class SplitPaneTest extends JFrame {
public SplitPaneTest() {
super("test");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel left = new JPanel();
JPanel right = new JPanel();
JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right);
System.out.println(sp.getDividerSize()); //Prints 10
sp.setDividerSize(1);
add(sp, BorderLayout.CENTER);
pack();
setLocationRelativeTo(null);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new SplitPaneTest().setVisible(true);
});
}
}
但是,Look & Feels 能够改变它的外观,因为它们改变了它的 UI
。如果上述解决方案对您不起作用,您将不得不弄乱它的UI。例如,在我的一个应用程序中,我不想要任何一行(同时使用 Windows 外观),因此为了使其不可见,我必须:
sp.setUI(new BasicSplitPaneUI() {
@Override
public BasicSplitPaneDivider createDefaultDivider() {
return new BasicSplitPaneDivider(this) {
private static final long serialVersionUID = -6000773723083732304L;
@Override
public void paint(Graphics g) {
//Divider gets no painting
}
};
}
});