java - JTabbedPane:避免在堆叠/Nimbus 时自动重新排序选项卡

标签 java swing constants jtabbedpane nimbus

JTabbedPane 正是我需要的。 我的水平空间非常有限,所以我的选项卡会堆叠起来,这完全没问题。

但默认行为是,如果用户单击某个选项卡,*选项卡会重新排序,以便 Activity 选项卡变为低位*t。理论上看起来非常直观和合乎逻辑的东西,在实际使用中是一场噩梦,因为用户忘记了“哪个是哪个”。它只是简单地令人困惑,我一次又一次地被告知。

我想应该可以重写 UI 的某些方法来避免这种行为(而且我不关心这在纸质卡片上是否可行 :-)。

有人知道我需要在哪里做吗?我正在使用 Nimbus LAF,这似乎并没有使它变得更容易。

(我考虑过使用radiobuttons/cardLayout,但是我需要在tab title里放一个自定义的panel,而且radiobuttons只能有一个string或者icon。JToggleButton也一样。。。)

非常欢迎任何提示!

谢谢和亲切的问候, 菲利普

最佳答案

sscce对于 Nimbus L&f 的潜在回答者(通过使用另一个 L&f 不可能重现这个有趣的问题),以防 Containers#Size 将 Tabs 打包到两个或更多 Linesenter image description here enter image description here

据我所知只有一个 possible solutions (不覆盖 NimbusTabbedPaneUI)aephyr

来自 sscce

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

public class TabbedPane {

    private static final long serialVersionUID = 1L;

    public TabbedPane() {
        JPanel jp = new JPanel();
        jp.setLayout(new BorderLayout());
        JTabbedPane tb = new JTabbedPane();
        //tb.setUI(new CustomTabbedPaneUI());
        tb.add("Tab1", new JTextArea(10, 20));
        tb.add("Tab2", new JTextArea(10, 20));
        tb.add("Tab3", new JTextArea(10, 20));
        tb.add("Tab4", new JTextArea(10, 20));
        tb.add("Tab5", new JTextArea(10, 20));
        jp.add(tb, BorderLayout.CENTER);
        //add(jp, BorderLayout.CENTER);
        //tb.setEnabledAt(1, false);
        //tb.setEnabledAt(3, false);
        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());
        frame.add(jp, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        try {
            for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception system) {
            system.printStackTrace();
        }
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                TabbedPane tP = new TabbedPane();
            }
        });
    }
}

关于java - JTabbedPane:避免在堆叠/Nimbus 时自动重新排序选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7481991/

相关文章:

constants - 如何在 LLVM IR 中初始化常量向量?

java - 在运行时从另一个类的哈希表中获取值

java - Spring Boot 应用程序已启动,但 POST 请求始终返回 "not found"

java - Android布局问题: Unable to add two layouts of two charts using addView (logcat error included)

java JTable,defaultTableModel想要addRow

java - JTable prepareEditor 是如何工作的

Java Swing 事件冒泡/捕获

c++ - 返回 std::string 作为 const 引用

java - Spring数据mongoRepository查询排序

c++ - 模板参数中的 "T"和 "const T"有什么区别吗?