【发布时间】:2016-06-20 02:37:17
【问题描述】:
使用 JTabbedPane,我想在新选项卡的选择更改生效之前捕捉瞬间并执行操作。这类似于摆动组件的焦点丢失事件。目的是在tab改变时将几个JTextField的文本保存到外部文件中,这样每次用户点击不同的tab时,当前tab的值都会写入到外部文件中。
我一直在使用 ChangeListener 来跟踪选项卡的变化,但还没有找到一种方法来做我需要的事情。在下一个简单示例中如何实现它的任何想法?
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class TabSample {
static void add(JTabbedPane tabbedPane, String label) {
JButton button = new JButton(label);
tabbedPane.addTab(label, button);
}
public static void main(String args[]) {
JFrame frame = new JFrame("TabSample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTabbedPane tabbedPane = new JTabbedPane();
String titles[] = { "Geometry", "Materials", "Analysis"};
for (int i = 0, n = titles.length; i < n; i++) {
add(tabbedPane, titles[i]);
}
ChangeListener changeListener = new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) {
JTabbedPane sourceTabbedPane = (JTabbedPane) changeEvent.getSource();
int index = sourceTabbedPane.getSelectedIndex();
System.out.println("Tab changed to: " + sourceTabbedPane.getTitleAt(index));
}
};
tabbedPane.addChangeListener(changeListener);
frame.add(tabbedPane, BorderLayout.CENTER);
frame.setSize(400, 150);
frame.setVisible(true);
}
}
【问题讨论】:
标签: java swing jtabbedpane changelistener