문제

"+"탭을 클릭 할 때마다 이벤트를 트리거하고 싶습니다 (다른 탭이 없음).기본적으로 "+"탭이 버튼처럼 작동하도록합니다.나는 어떤 유형의 청취자가 사용하는지 확신하지 못한다.어떻게해야합니까?

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);

            }
        });

    }
}
.

도움이 되었습니까?

해결책

시도 :

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 답변 와 비슷한 것을 끝내는 것 같습니다.이 문제에 대한 "최고의"해결책으로 참조하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top