JtabbedPaneトリガーイベント
-
21-12-2019 - |
質問
「+」タブをクリックするたびにイベントをトリガーしたい(他のタブは存在しません)。基本的には、「+」タブがボタンのように機能したいです。どのタイプのリスナーを使用するかはわかりません。どうやってこれを行うことができますか?
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 私がこの問題に対する「答え」とは、この問題に対する「最もよい」解決策として、それを参照してください。
他のヒント
所属していません StackOverflow