ama*_*ent 4 java swing border jsplitpane
JSplitPane似乎添加了任何Component添加到它的边框.
嵌套的JSplitPanes最明显 - 例如:
public class JSplitPaneToy {
public static void main(String[] args) {
JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
makePanel(), makePanel());
sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, makePanel(), sp);
sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, makePanel(), sp);
sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, makePanel(), sp);
JFrame frame = new JFrame("JSplitPane Toy");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(sp);
frame.pack();
frame.setVisible(true);
}
private static JScrollPane makePanel() {
JScrollPane pane = new JScrollPane(new JTable(
new Object[][]{{0, 1, 2}, {1, 2, 3}, {2, 3, 4}}, new Object[]{1, 2, 3}));
pane.setPreferredSize(new Dimension(200, 100));
return pane;
}
}
Run Code Online (Sandbox Code Playgroud)
即每个后续嵌套组件似乎进一步设置 - 即添加某种形式的阴影边框.
如果要在所有JSplitPane上删除这些边框,可以像这样更改UI的默认值.但是,我通常尽量不要弄乱UI默认值.
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class JSplitPaneToy {
public static void main(String[] args) {
UIManager.getDefaults().put("SplitPane.border", BorderFactory.createEmptyBorder());
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JSplitPaneToy().initUI();
}
});
}
public void initUI() {
JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, makePanel(), makePanel());
sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, makePanel(), sp);
sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, makePanel(), sp);
sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, makePanel(), sp);
JFrame frame = new JFrame("JSplitPane Toy");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(sp);
frame.pack();
frame.setVisible(true);
}
private JScrollPane makePanel() {
JScrollPane pane = new JScrollPane(new JTable(new Object[][] { { 0, 1, 2 }, { 1, 2, 3 }, { 2, 3, 4 } }, new Object[] { 1, 2, 3 }));
pane.setPreferredSize(new Dimension(200, 100));
return pane;
}
}
Run Code Online (Sandbox Code Playgroud)
您可能想要查看SwingX项目的JXMultiSplitPane,而不是嵌套这么多的分割窗格.
我们使用此方法来“展平”JSplitPane。也许这就是您正在寻找的:
/**
* Makes a split pane invisible. Only contained components are shown.
*
* @param splitPane
*/
public static void flattenJSplitPane(JSplitPane splitPane) {
splitPane.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
BasicSplitPaneUI flatDividerSplitPaneUI = new BasicSplitPaneUI() {
@Override
public BasicSplitPaneDivider createDefaultDivider() {
return new BasicSplitPaneDivider(this) {
@Override
public void setBorder(Border b) {
}
};
}
};
splitPane.setUI(flatDividerSplitPaneUI);
splitPane.setBorder(null);
}
Run Code Online (Sandbox Code Playgroud)
至于为什么要加上边框,就不知道了。显然它是某种功能。我们发现它是不需要的,上面的方法可以解决它。可能有一种更简单的方法来处理这个问题,但是,嘿,当你找到可行的方法时,你就不再寻找替代方案了。