在哪里设置VERTICAL_SCROLLBAR_​​NEVER?

时间:2018-11-06 21:30:15

标签: java jscrollbar

我对Java非常陌生,所以请对我轻松一点。经过大量研究,我相信我理解JScrollPane选项默认情况下显示滚动条。我试图在某些现有代码中更改此行为。我相信只需使用VERTICAL_SCROLLBAR_NEVER更改默认值即可。但是,我很难确定代码中的设置位置。有人可以帮我告诉我此属性的设置位置(或者即使我走在正确的轨道上)吗?

这是我认为与此问题相关的代码段。拆分窗格窗口的右侧有一个滚动条。我想永久隐藏它。

public class LauncherFrame extends JFrame {

    private final Launcher launcher;

    @Getter
    private final InstanceTable instancesTable = new InstanceTable();
    private final InstanceTableModel instancesModel;
    @Getter
    private final JScrollPane instanceScroll = new JScrollPane(instancesTable);
    private WebpagePanel webView;
    private JSplitPane splitPane;
    private final JButton launchButton = new JButton(SharedLocale.tr("launcher.launch"));
    private final JButton refreshButton = new JButton(SharedLocale.tr("launcher.checkForUpdates"));
    private final JButton optionsButton = new JButton(SharedLocale.tr("launcher.options"));
    private final JButton selfUpdateButton = new JButton(SharedLocale.tr("launcher.updateLauncher"));
    private final JCheckBox updateCheck = new JCheckBox(SharedLocale.tr("launcher.downloadUpdates"));

    public LauncherFrame(@NonNull Launcher launcher) {
        super(tr("launcher.title", launcher.getVersion()));

        this.launcher = launcher;
        instancesModel = new InstanceTableModel(launcher.getInstances());

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(new Dimension(615, 322));
        setResizable(false);
        initComponents();
        setLocationRelativeTo(null);

        SwingHelper.setFrameIcon(this, Launcher.class, "icon.png");

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                loadInstances();
            }
        });
    }

    private void initComponents() {
        JPanel container = createContainerPanel();
        container.setLayout(new MigLayout("fill, insets dialog", "[][]push[][]", "[grow][]"));

        webView = createNewsPanel();
        splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, instanceScroll, webView);
        selfUpdateButton.setVisible(launcher.getUpdateManager().getPendingUpdate());

        launcher.getUpdateManager().addPropertyChangeListener(new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                if (evt.getPropertyName().equals("pendingUpdate")) {
                    selfUpdateButton.setVisible((Boolean) evt.getNewValue());

                }
            }
        });

        updateCheck.setSelected(true);
        instancesTable.setModel(instancesModel);
        launchButton.setFont(launchButton.getFont().deriveFont(Font.BOLD));
        splitPane.setDividerLocation(100);
        splitPane.setDividerSize(4);
        splitPane.setOpaque(false);
        container.add(splitPane, "grow, wrap, span 5, gapbottom unrel, w null:680, h null:350");
        SwingHelper.flattenJSplitPane(splitPane);
        container.add(refreshButton);
        container.add(updateCheck);
        container.add(selfUpdateButton);
        container.add(optionsButton);
        container.add(launchButton);

        add(container, BorderLayout.CENTER);
    }

*更新*

下面尝试了一些建议,但仍显示滚动条。我将窗口更改为可调整大小的true,这样您可以在减小尺寸时更轻松地看到它。

Scroll bar example

enter image description here

2 个答案:

答案 0 :(得分:1)

创建新的滚动窗格时,可以将滚动条策略传递到the constructor中。

private final JScrollPane instanceScroll = new JScrollPane(instancesTable, 
                           ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, 
                           ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

或者您可以保留构造函数调用的原样,并在initComponents()方法中设置策略(例如)。

instanceScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

答案 1 :(得分:0)

您的splitPane的两个组件是左侧的JScrollPane,而右侧则无法分辨,因为您没有包括该部分代码。

从这两个屏幕截图中,我们只能猜测您有兴趣将组件放在右侧而没有滚动条。

因此,您必须显示createNewPanel()代码,或者将正确的组件设置为也没有滚动条的JScrollPane。