Прокрутите оставшиеся вкладки, чтобы отобразить их после удаления вкладок из SCROLL_TAB_LAYOUT JTabbedPane. - PullRequest
0 голосов
/ 31 января 2019

Как прокрутить оставшиеся вкладки до видимых после удаления одной вкладки из хвоста JTabbedPane с установленной политикой макета вкладок SCROLL_TAB_LAYOUT.

Поведение по умолчанию, похоже, ничего не делает - пользователь вынужден использоватькнопки прокрутки, чтобы вернуть оставшиеся вкладки в вид (вся строка вкладок становится пустой).

Вы можете понять, что я имею в виду, если несколько раз нажать кнопку «Удалить» в моем примере.Если вы удалите достаточно вкладок, вы в конечном итоге получите пустую строку вкладок.

import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;

public class FooTest extends JFrame {

    public FooTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        final JTabbedPane tabs = new JTabbedPane();
        tabs.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);        
        add(tabs, BorderLayout.CENTER);

        for (int i = 0; i < 10; i++) {
            tabs.addTab("Long tab name " + i, new JPanel());
            tabs.setSelectedIndex(i);
        }

        JButton button = new JButton("Remove");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (tabs.getTabCount() > 0) {
                    tabs.removeTabAt(tabs.getTabCount() - 1);
                }
            }
        });
        add(button, BorderLayout.PAGE_END);

        setSize(400, 400);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new FooTest().setVisible(true);
            }
        });
    }

}

blank tab row

Другими словами, как мне обеспечить видимостькак можно больше вкладок после удаления из хвоста?

1 Ответ

0 голосов
/ 31 января 2019

как обеспечить видимость как можно большего количества вкладок после удаления из хвоста?

Swing использует Action для выполнения общих функций компонента.

Вы можете вручную вызвать Action, который прокручивает вкладки после удаления вкладки:

tabs.removeTabAt(tabs.getTabCount() - 1);
ActionMap am = tabs.getActionMap();
Action action = am.get("scrollTabsBackwardAction");
action.actionPerformed(new ActionEvent(tabs, ActionEvent.ACTION_PERFORMED, ""));

В разделе Привязки клавиш приведен список действий, поддерживаемых каждым компонентом Swing.

...