从 SCROLL_TAB_LAYOUT JTabbedPane 中删除选项卡后,将剩余的选项卡滚动到可见
Scroll remaining tabs to visible after tab removal from a SCROLL_TAB_LAYOUT JTabbedPane
在设置了 SCROLL_TAB_LAYOUT 选项卡布局策略的 JTabbedPane 尾部移除单个选项卡后,如何将剩余选项卡滚动到可见。
默认行为似乎是不执行任何操作 - 用户被迫使用滚动按钮将剩余的选项卡带回视图(整个选项卡行变为空)。
如果你在我的例子中反复点击"Remove"按钮,你就会明白我的意思了。如果您删除了足够多的标签,您最终会得到一个空白标签行。
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);
}
});
}
}
换句话说,如何确保从尾部删除后尽可能多的选项卡可见?
how do I ensure visibility of as much tabs as possible after removing from tail?
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, ""));
查看 Key Bindings 以获取每个 Swing 组件支持的操作列表。
在设置了 SCROLL_TAB_LAYOUT 选项卡布局策略的 JTabbedPane 尾部移除单个选项卡后,如何将剩余选项卡滚动到可见。
默认行为似乎是不执行任何操作 - 用户被迫使用滚动按钮将剩余的选项卡带回视图(整个选项卡行变为空)。
如果你在我的例子中反复点击"Remove"按钮,你就会明白我的意思了。如果您删除了足够多的标签,您最终会得到一个空白标签行。
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);
}
});
}
}
换句话说,如何确保从尾部删除后尽可能多的选项卡可见?
how do I ensure visibility of as much tabs as possible after removing from tail?
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, ""));
查看 Key Bindings 以获取每个 Swing 组件支持的操作列表。