Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何定制JSplitPane分隔器并维护一触式箭头功能?_Java_Swing_Jsplitpane - Fatal编程技术网

Java 如何定制JSplitPane分隔器并维护一触式箭头功能?

Java 如何定制JSplitPane分隔器并维护一触式箭头功能?,java,swing,jsplitpane,Java,Swing,Jsplitpane,所以,我的问题归结为。。。默认的分隔符有点难看,而且我想给它添加一个标签(在I-want-text-on-it意义上,而不是在“向布局添加JLabel”意义上)。我看到您可以更改拆分窗格分隔符上的边框,但当我这样做时,它会删除我希望保留的一触式箭头 你有没有想过我怎样才能两者兼得 下面是一个SSCCE,它演示了默认行为以及更改分隔符边框时发生的情况: import javax.swing.*; import javax.swing.plaf.basic.BasicSplitPaneDivider

所以,我的问题归结为。。。默认的分隔符有点难看,而且我想给它添加一个标签(在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);
}
}
我看到您可以更改拆分窗格分隔符上的边框,但当我这样做时,它会删除我希望保留的一触式箭头

  • 所有这些方法都可以覆盖
    鼠标(Xxx)侦听器
    属性更改侦听器
    按钮模型
    中的事件,没有比这更好的方法了

  • 这些方法的一部分也可以重写


+1。您能在拆分窗格的内容中添加标题边框吗?是的,关于标签,我可以。我仍然希望有一种方法可以改变分隔符的外观,而不必去掉一触式箭头。啊,当任一窗格一触式关闭时,您希望标签可见。正如@mKorbel所指出的,这将需要一个新的
basicSplitPaneVider
。这不是一个解决方案,但是
setDividerSize(50)
可以让一触式控件显示。你也可以
添加(新标签(…)
。aaach如果你想玩得开心,那么你可以使用,所有可见元素都可以访问,但是你必须知道(J)组件是从哪个组件构建的,具体的可视元素+1用于考虑UI委托;没有什么比这更容易想到的了。@Trashgood感谢Fridays_Flame_War为什么要费心定制L&F,例如(疯狂的)Nimbus很好地覆盖了三大恐龙的屏幕输出使用JTabbedPane、JSlider和JSplitPane:-)我已经看到一些用户抵制强制使用特定L&F,但Nimbus普遍被接受。