Java JTabbedPane触发事件
我想在单击“+”选项卡时触发一个事件(并且不存在其他选项卡)。基本上,我希望“+”选项卡像按钮一样工作。我不太确定该使用哪种类型的侦听器。我该怎么做Java JTabbedPane触发事件,java,swing,actionlistener,jtabbedpane,changelistener,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.ChangeEv
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
似乎我最终做了类似的事情,请将其称为此问题的“最佳”解决方案。尝试:
更新
只是一个替代版本,无需修改模型行为
更新2
似乎我最终做了类似的事情,请将其称为此问题的“最佳”解决方案。尝试:
更新
只是一个替代版本,无需修改模型行为
更新2
似乎我最终做了类似的事情,请将其称为此问题的“最佳”解决方案。尝试:
更新
只是一个替代版本,无需修改模型行为
更新2
似乎我最终做了类似的事情,请将其称为这个问题的“最佳”解决方案。阅读上Swing教程的部分
其中一个示例演示了如何向选项卡添加“关闭”按钮。您应该能够轻松地修改代码以添加“+”按钮。阅读上Swing教程的部分
其中一个示例演示了如何向选项卡添加“关闭”按钮。您应该能够轻松地修改代码以添加“+”按钮。阅读上Swing教程的部分
其中一个示例演示了如何向选项卡添加“关闭”按钮。您应该能够轻松地修改代码以添加“+”按钮。阅读上Swing教程的部分
其中一个示例演示了如何向选项卡添加“关闭”按钮。您应该能够轻松地修改代码以添加“+”按钮。因此,是的,当您有多个选项卡时,该功能可以正常工作。。。但我希望+在只有1个选项卡时调用侦听器(就像按钮一样)。我更新了问题,使之更清楚。谢谢你的帮助。编辑了问题。我相信您无法在选项卡上建立侦听器,因为没有进行新的选择。相反,您可以覆盖选择模型上的行为。谢谢。。。这是非常接近我要找的。唯一的问题是,事件仅在第一次单击选项卡时发生。有没有关于如何使其可重复的想法?请重新编辑。通过删除默认行为“super.setSelectedIndex(index);”,选择会在多次单击时不断重复。将ChangeListener添加到选项卡式窗格将实现同样的效果,而无需替换SelectionModel,如果用户出于其他原因需要替换SelectionModel,则可能会导致问题……因此,是的,当您有多个选项卡时,该选项有效。。。但我希望+在只有1个选项卡时调用侦听器(就像按钮一样)。我更新了问题,使之更清楚。谢谢你的帮助。编辑了问题。我相信您无法在选项卡上建立侦听器,因为没有进行新的选择。相反,您可以覆盖选择模型上的行为。谢谢。。。这是非常接近我要找的。唯一的问题是,事件仅在第一次单击选项卡时发生。有没有关于如何使其可重复的想法?请重新编辑。通过删除默认行为“super.setSelectedIndex(index);”,选择会在多次单击时不断重复。将ChangeListener添加到选项卡式窗格将实现同样的效果,而无需替换SelectionModel,如果用户出于其他原因需要替换SelectionModel,则可能会导致问题……因此,是的,当您有多个选项卡时,该选项有效。。。但我希望+在只有1个选项卡时调用侦听器(就像按钮一样)。我更新了问题,使之更清楚。谢谢你的帮助。编辑了问题。我相信您无法在选项卡上建立侦听器,因为没有进行新的选择。相反,您可以覆盖选择模型上的行为。谢谢。。。这是非常接近我要找的。唯一的问题是,事件仅在第一次单击选项卡时发生。有没有关于如何使其可重复的想法?请重新编辑。通过删除默认行为“super.setSelectedIndex(index);”,选择会在多次单击时不断重复。将ChangeListener添加到选项卡式窗格将实现同样的效果,而无需替换SelectionModel,如果用户出于其他原因需要替换SelectionModel,则可能会导致问题……因此,是的,当您有多个选项卡时,该选项有效。。。但我希望+在只有1个选项卡时调用侦听器(就像按钮一样)。我更新了问题,使之更清楚。谢谢你的帮助。编辑了问题。我相信您无法在选项卡上建立侦听器,因为没有进行新的选择。相反,您可以覆盖选择模型上的行为。谢谢。。。这是非常接近我要找的。唯一的问题是,事件仅在第一次单击选项卡时发生。有没有关于如何使其可重复的想法?请重新编辑。通过删除默认行为“super.setSelectedIndex(index);”,选择会在多次单击时不断重复。将ChangeListener添加到选项卡式窗格将实现同样的效果,而无需替换SelectionModel,如果您出于其他原因需要更换SelectionModel,这可能会导致问题……这不是我要问的。。我想在单击+选项卡时触发一个事件,而它是唯一的选项卡。@dubdot,
但我想在只有一个选项卡时,+调用侦听器(像按钮一样)。
您当前的代码不起作用,因为您没有生成ChangeEvent
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);