JTabbedPane触发事件

时间:2014-06-03 16:42:17

标签: java swing actionlistener jtabbedpane changelistener

我希望每当" +"单击选项卡(并且不显示其他选项卡)。基本上,我想要" +"标签表示按钮。我不太确定使用哪种类型的监听器。我怎么能这样做?

import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class JTPTest extends JTabbedPane {



    public JTPTest() {

        this.addChangeListener(new ChangeListener() {

            public void stateChanged(ChangeEvent changeEvent) {
                System.out.println(changeEvent);
            }

        });

        JPanel blankJPanel = new JPanel();
        this.addTab("+", blankJPanel);

    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new JTPTest());

                frame.setSize(500, 500);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);

            }
        });

    }
}

2 个答案:

答案 0 :(得分:2)

阅读How to Use Tabbed Panes上的Swing教程中的部分。

其中一个示例显示了如何向选项卡添加“关闭”按钮。您应该能够轻松修改代码以添加“+”按钮。

答案 1 :(得分:1)

尝试:

JPanel blankJPanel1 = new JPanel();
this.addTab("+", blankJPanel1);
setModel(new DefaultSingleSelectionModel() {

    @Override
    public void setSelectedIndex(int index) {
        System.out.println("woah!");
    }
});

<强>更新

只是一个替代版本,无需修改模型行为。

JPanel blankJPanel = new JPanel();
this.addTab("dummy text", blankJPanel);
JLabel label = new JLabel("x");
label.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
label.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("woah!!");
    }
});


setTabComponentAt(indexOfComponent(blankJPanel), label);

更新2 似乎我最终做了与此answer类似的事情,请将其称为&#34;最佳&#34;解决这个问题。