【问题标题】:JTabbedPane: new Tab in different color till first time openedJTabbedPane:第一次打开之前以不同颜色显示的新选项卡
【发布时间】:2016-11-12 19:31:53
【问题描述】:

我有一个带有 JTextArea 的 JTabbedPane。一个方法创建另一个选项卡并将其添加到 JTabbedPane。现在我想实现,新创建的选项卡在第一次打开之前获得另一种颜色,例如在聊天室中显示来自特定用户的新消息。 我真的不知道如何实现这一点。我尝试使用while循环,但它不起作用

String name = "...";
JTabbedPane tabs = new JTabbedPane();
JTextArea textarea = new JTextArea();
textarea.setEditable(false);
textarea.setLineWrap(true);
JScrollPane jScrollPane = new JScrollPane(textarea);
jScrollPane.setPreferredSize(new Dimension(300, 300));
tabs.add(name, jScrollPane);
tabs.setBackgroundAt(tabs.indexOfTab(name),Color.GREEN);
        while(true){
            if(tabs.getSelectedIndex() == tabs.indexOfTab(name)){
                tabs.setBackgroundAt(tabs.indexOfTab(name),Color.GRAY);
                break;
            }
        }

【问题讨论】:

    标签: java swing jtabbedpane


    【解决方案1】:

    从此example 开始,以下更改会产生如下所示的效果。每个选项卡以Color.lightGray 开头,ChangeListener 在第一次选择每个选项卡时将背景颜色更改为Color.red.darker()。您可以在侦听器中对应用程序的数据模型进行类似的操作;研究了几种方法here

    public TabColors() {
        for (int i = 0; i < MAX; i++) {
            Color color = Color.lightGray;
            pane.add("Tab " + String.valueOf(i), new TabContent(i, color));
            pane.setBackgroundAt(i, color);
        }
        pane.setSelectedIndex(-1);
        pane.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                pane.setBackgroundAt(pane.getSelectedIndex(), Color.red.darker());
            }
        });
        this.add(pane);
    }
    

    【讨论】:

    • 什么是窗格?它是 JTabbedPane 吗?因为我不能为 JTabbedPane 使用 ChangeListener
    • 从这个example开始,是的。根据您应用程序的数据模型,您可能希望使用不同的侦听器。
    • 我应该使用哪一个?
    • 这取决于您的应用程序的数据模型。它支持哪些听众?
    • 这是一个带有可滚动文本区域的 JTabbedPane。选项卡有带有选项卡名称和关闭按钮的 JPanel
    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2013-10-18
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多