JComponent不会重绘

时间:2013-04-13 20:13:46

标签: java swing user-interface graphics jtabbedpane

我有一个看起来像这样的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重新粉刷自己。编辑后的代码会是什么样子,以便显示的信息会更新?

1 个答案:

答案 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中的信息将自动更新。