我有一个看起来像这样的JTabbedPane:
overview= new JTabbedPane();
JComponent accountinfo= AccountOverview(guest.toString());
overview.addTab ("Account Overview", accountinfo);
overview.setMnemonicAt(0, KeyEvent.VK_1);
JComponent flightoption= FlightOptions();
overview.addTab ("Book a Flight",flightoption);
overview.setMnemonicAt(1, KeyEvent.VK_2);
JFrame tabbed= new JFrame("AIR Reservation");
tabbed.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
tabbed.add(overview);
tabbed.setSize(650,500);
tabbed.setLocationRelativeTo(null);
tabbed.setVisible(true);
我的AccountOverview方法如下所示:
protected JComponent AccountOverview (String text)
{
panel = new JPanel(false);
JLabel filler = new JLabel(text);
JButton editName= new JButton ("Edit Name");
editName.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JFrame nameframe= new JFrame("Name Edit");
name2 = JOptionPane.showInputDialog(nameframe, "Change name to: ");
guest.setName(name2);
}
});
JButton editGender= new JButton ("Edit Gender");
editGender.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JFrame genderframe= new JFrame("Gender Edit");
gen2 = JOptionPane.showInputDialog(genderframe, "Change gender to: ");
guest.setGender(gen2);
}
});
JButton editBirthday= new JButton ("Edit Birthday");
editBirthday.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JFrame birthdayframe= new JFrame("Birthdate Edit");
birthday2 = JOptionPane.showInputDialog(birthdayframe, "Change birthdate to: ");
guest.setBirthDate(birthday2);
}
});
JButton editPassportNumber= new JButton ("Edit Passport Number");
editPassportNumber.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JFrame passportframe= new JFrame("Passport Number Edit");
passnum2= Integer.parseInt(JOptionPane.showInputDialog(passportframe, "Change passport number to: "));
guest.setPassportNumber(passnum2);
}
});
panel.add(editName);
panel.add(editGender);
panel.add(editBirthday);
panel.add(editPassportNumber);
panel.add(destination);
filler.setHorizontalAlignment(JLabel.CENTER);
panel.add(filler);
return panel;
}
我希望选项卡上JComponent上显示的JLabel在单击“编辑名称”,“编辑性别”等时更新信息。我无法让JPanel重新粉刷自己。编辑后的代码会是什么样子,以便显示的信息会更新?
答案 0 :(得分:1)
这很简单。我会用fisrt按钮演示。
final JLabel filler = new JLabel(text);
必须将变量声明为final才能在匿名ActionListener中使用它。
JButton editName= new JButton ("Edit Name");
editName.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JFrame nameframe= new JFrame("Name Edit");
name2 = JOptionPane.showInputDialog(nameframe, "Change name to: ");
guest.setName(name2);
filler.setText(guest.toString())
}
});
如果在侦听器中调用setText,JLabel中的信息将自动更新。