java - 更改 JTabbedPane 中选定的选项卡 "automatically"

标签 java swing jtabbedpane

我是第一次使用Java swing,有一个无法解决的问题。

我有一个带有 3 个选项卡的 JTabbedPane,我需要在计算结束时“自动”更改到下一个选项卡,计算从单击 JButton(在其中一个选项卡内)开始。 我尝试使用 setSelectedIndex() 但不起作用。 在 JButton 的 ActionEvent 后,选定的选项卡(在 Eclipse 控制台中打印)已更改,但在 GUI 中没有效果。

是的,我尝试过 validate()revalidate() 方法,甚至 repaint() 方法,但没有成功

这是我的代码示例

public class Tab1 extends JPanel {
    //when click on this button the computing starts
    JButton btn = new JButton("Compute...");
    btn.addActionListener(new BtnListener());
    add(btn);
}

我将添加到 JTabbedPane 的 JPanel 示例

public class Window() {

    private JFrame frame;

    public Window() {
        init();
    }

    private void init() {
        frame = new JFrame();
        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);

        JPanel tab1 = new Tab1();
        JPanel tab2 = new Tab2();
        JPanel tab3 = new Tab3();

        tabbedPane.addTab("tab 1", null, tab1, "tab1");
        tabbedPane.addTab("tab2", null, tab2, "tab2");
        tabbedPane.addTab("tab3", null, tab3, "tab3");

        //add() all components
    }
}

我的窗口示例

public class BtnListener implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        //make the computing
        //then I need to change to next tab (tab2)
    }
}

还有我的听众

希望您能理解我的问题。 请帮助我,我真的不知道我该怎么做才能让它发挥作用,而我需要这样做。

最佳答案

当你切换标签时,你不需要使用revalidate()/repaint(),只需setSelectedIndex()

以下是切换到下一个选项卡的示例:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class TestFrame extends JFrame {

    public static void main(String... s) {
        new TestFrame();
    }

    private JTabbedPane tabs;

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void init() {
        tabs = new JTabbedPane();

        tabs.addTab("1", new Tab(1));
        tabs.addTab("2", new Tab(2));
        tabs.addTab("3", new Tab(3));
        add(tabs);
    }

    private class Tab extends JPanel {

        public Tab(int i) {
            JButton next = new JButton("next");
            next.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    int selectedIndex = tabs.getSelectedIndex();
                    int nextIndex = selectedIndex == tabs.getTabCount()-1 ? 0 : selectedIndex+1;
                    tabs.setSelectedIndex(nextIndex);
                }
            });
            add(new JLabel("tab " + i));
            add(next);
        }
    }

}

关于java - 更改 JTabbedPane 中选定的选项卡 "automatically",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28471769/

相关文章:

Java正则表达式查找字符串中的字符序列

java - System.out.println 行影响逻辑的执行

java - 将 CSV 数据导入 JFrame

java - JTabbedPane:选项卡左侧的图标

java - Java中,空的HashMap空间分配

java - 如何抑制 'common-java' 规则的警告

java - 当jlist高度取决于列表中的行数时,如何在java中创建动态Jlist?

java - 动态更改 JTable 中的列标题文本

java - 如何更改 jTabbed Pane 标题的颜色

java - Mac JVM渲染JTabbedPane 1.6及以上版本差异