Java 如何防止鼠标单击更改选项卡

Java 如何防止鼠标单击更改选项卡,java,swing,mouselistener,Java,Swing,Mouselistener,我的问题可能很傻,但我正试图在JTabbedPane中通过鼠标单击禁用选项卡的更改。我在谷歌上搜索,但没有找到任何有用的答案。我试图添加空的MouseListener,但我仍然可以在鼠标单击时更改选项卡 我的代码如下: public JTabbedPane createTabbedPane() { JTabbedPane pane=new JTabbedPane(); pane.addTab("tab1",panel1); pane.addTab("tab2",panel

我的问题可能很傻,但我正试图在
JTabbedPane
中通过鼠标单击禁用选项卡的更改。我在谷歌上搜索,但没有找到任何有用的答案。我试图添加空的
MouseListener
,但我仍然可以在鼠标单击时更改选项卡

我的代码如下:

public JTabbedPane createTabbedPane()
{
    JTabbedPane pane=new JTabbedPane();
    pane.addTab("tab1",panel1);
    pane.addTab("tab2",panel2);
    pane.addTab("tab3",panel3);
    pane.addMouseListener(new MouseAdapter());
    return pane;
}
JTabbedPane tabbedPane = new JTabbedPane() {
    public synchronized void addMouseListener(MouseListener l) { };
};
我也试过这个:

public JTabbedPane createTabbedPane()
{
    JTabbedPane pane=new JTabbedPane();
    pane.addTab("tab1",panel1);
    pane.addTab("tab2",panel2);
    pane.addTab("tab3",panel3);
    pane.addMouseListener(new MouseListener()
    {
        @Override
            public void mouseClicked(MouseEvent e) {}

            @Override
            public void mousePressed(MouseEvent e) {}

            @Override
            public void mouseReleased(MouseEvent e) {}

            @Override
            public void mouseEntered(MouseEvent e) {}

            @Override
            public void mouseExited(MouseEvent e) {}
    });
    return pane;
}

如果有人知道怎么做,请告诉我。提前感谢。

您可以在
ChangeListener
的帮助下用鼠标阻止更改选项卡,如下一步:

final JTabbedPane pane = new JTabbedPane();
pane.addChangeListener(new ChangeListener() {

    @Override
    public void stateChanged(ChangeEvent e) {
        pane.setSelectedIndex(HOLD_INDEX);
    }
});
HOLD_INDEX
是通过编程选择的选项卡索引


在这里,当您尝试选择另一个选项卡时,它将被重新选择到
HOLD\u INDEX

您可以尝试以下几种方法

你可以 将不希望选中的选项卡设置为禁用

pane.setEnabled(indexOfTab, false);
你可以
提供您自己的选项卡,您可以从中控制可以选择哪些选项卡

另一种可能是使用空实现覆盖
addMouseListener(…)
,以防止任何鼠标交互。示例代码可以如下所示:

public JTabbedPane createTabbedPane()
{
    JTabbedPane pane=new JTabbedPane();
    pane.addTab("tab1",panel1);
    pane.addTab("tab2",panel2);
    pane.addTab("tab3",panel3);
    pane.addMouseListener(new MouseAdapter());
    return pane;
}
JTabbedPane tabbedPane = new JTabbedPane() {
    public synchronized void addMouseListener(MouseListener l) { };
};

使用窗格的getComponents(),如果可以找到可以删除的鼠标侦听器,请尝试并出错。我知道如果你有一个自己的标签组件,你可以覆盖mouselistener(它在前台,所以selectListener不起作用),尽管仍然可以点击一个小边框。ChangeListener只接受用户输入吗?还是说选择标签完全被停用了呢?谢谢alex,它对我起了作用,我还尝试通过索引标签和禁用其他标签来启用标签,但在changelistener中不起作用。但非常感谢。@VighaneshGursale,
这对我来说很有效
——那么你该开始接受答案了。你问了20个问题,一次也没有接受答案。接受答案是说“谢谢你的帮助”并告诉论坛中的每个人问题已经解决的正确方式。