Где установить VERTICAL_SCROLLBAR_NEVER? - PullRequest
0 голосов
/ 07 ноября 2018

Я очень новичок в 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 голосов
/ 08 ноября 2018

Два компонента вашего splitPane - это JScrollPane слева, а справа мы не можем сказать, потому что вы не включили эту часть кода.

Из этих двух снимков экрана мы можем только догадываться, что вы заинтересованы в том, чтобы компонент находился справа, без полос прокрутки.

Так что, если это так, вам придется показать код createNewPanel() или действительно сделать нужный компонент JScrollPane без полос прокрутки.

0 голосов
/ 07 ноября 2018

Вы можете передать политики полосы прокрутки в конструктор при создании новой полосы прокрутки.

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

Или вы можете оставить свой вызов конструктора как есть и установить политику (например) в вашем методе initComponents().

instanceScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
...