Java 在JTabbedPane中更新JComponent

Java 在JTabbedPane中更新JComponent,java,swing,button,user-interface,action,Java,Swing,Button,User Interface,Action,我有一个JTabbedPane,看起来像这样: overview= new JTabbedPane(); JComponent accountinfo= AccountOverview(guest.toString()); overview.addTab ("Account Overview", accountinfo); overview.setMnemonicAt(0, KeyEvent.VK_1);

我有一个JTabbedPane,看起来像这样:

 overview= new JTabbedPane();

            JComponent accountinfo= AccountOverview(guest.toString());
            overview.addTab ("Account Overview", accountinfo);
            overview.setMnemonicAt(0, KeyEvent.VK_1);


            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);
        }
    JPanel 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");
                String name = JOptionPane.showInputDialog(nameframe, "Change name to: ");
                guest.setName(name);
            }
        });
    JButton editGender= new JButton ("Edit Gender");
    editGender.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                JFrame genderframe= new JFrame("Gender Edit");
                String gender = JOptionPane.showInputDialog(genderframe, "Change gender to: ");
                guest.setGender(gender);
            }
        });
    JButton editBirthday= new JButton ("Edit Birthday");
    editBirthday.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent evt) {
                JFrame birthdayframe= new JFrame("Birthdate Edit");
                String birthday = JOptionPane.showInputDialog(birthdayframe, "Change birthdate to: ");
                guest.setBirthDate(birthday);
            }
        });
    JButton editPassportNumber= new JButton ("Edit Passport Number");
    editPassportNumber.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) { 
                JFrame passportframe= new JFrame("Passport Number Edit");
                int passnum= Integer.parseInt(JOptionPane.showInputDialog(passportframe, "Change passportnumber to: "));
                guest.setPassportNumber(passnum);
            }
        });
    panel.add(editName);
    panel.add(editGender);
    panel.add(editBirthday);
    panel.add(editPassportNumber);
    panel.add(destination);
    filler.setHorizontalAlignment(JLabel.CENTER);
    panel.add(filler);
    return panel;
}
toString打印出客户的信息。 my AccountOverview(guest.toString)方法如下所示:

 overview= new JTabbedPane();

            JComponent accountinfo= AccountOverview(guest.toString());
            overview.addTab ("Account Overview", accountinfo);
            overview.setMnemonicAt(0, KeyEvent.VK_1);


            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);
        }
    JPanel 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");
                String name = JOptionPane.showInputDialog(nameframe, "Change name to: ");
                guest.setName(name);
            }
        });
    JButton editGender= new JButton ("Edit Gender");
    editGender.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                JFrame genderframe= new JFrame("Gender Edit");
                String gender = JOptionPane.showInputDialog(genderframe, "Change gender to: ");
                guest.setGender(gender);
            }
        });
    JButton editBirthday= new JButton ("Edit Birthday");
    editBirthday.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent evt) {
                JFrame birthdayframe= new JFrame("Birthdate Edit");
                String birthday = JOptionPane.showInputDialog(birthdayframe, "Change birthdate to: ");
                guest.setBirthDate(birthday);
            }
        });
    JButton editPassportNumber= new JButton ("Edit Passport Number");
    editPassportNumber.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) { 
                JFrame passportframe= new JFrame("Passport Number Edit");
                int passnum= Integer.parseInt(JOptionPane.showInputDialog(passportframe, "Change passportnumber to: "));
                guest.setPassportNumber(passnum);
            }
        });
    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,以便选项卡窗格反映新更新的更改。 例如,如果原始显示为“Name:Admin”,只需单击“编辑名称”并输入“John”即可将原始显示更改为“Name:John”

编辑:My toString()方法(来自另一个类Customer)

//以字符串形式返回客户对象。
公共字符串toString()
{ 
customerstring=“Name:”+getName();
customerstring+=“
性别:”+getGender(); customerstring+=“
出生日期:”+getBirthDate(); customerstring+=”
护照号码:“+getPassportNumber(); customerstring+=“
余额:”+money.format(getMoney()); 返回customerstring; }
如何编辑我的代码


提前谢谢

In:
JComponent accountinfo=AccountOverview(guest.toString())处理信息以创建组件

这将生成一份来宾信息的副本(通过调用toString()),以后无法更改。尝试将来宾对象传递给组件,并在每次重新绘制时执行toString()调用


编辑后,可以通过调用accountinfo.repaint()来重新绘制组件本身。

@hovercraftfullofels抱歉,toString方法是另一个类的一部分。我已经编辑了我的帖子,加入了这个方法。我最初发布的代码来自我的GUI类。非常感谢!如何将来宾对象传递给我的组件呢?在AccountOverview()方法中,您创建了一个Jcomponent。我建议创建一个类(扩展Jpanel或您使用的任何东西),它有一个FieldGuest。而不是当客人改变时:让它重新绘制/重新填充无论你做什么来创建组件对不起,我对这整件事有点陌生。我是否会使用ChangeListener来查看来宾是否更改?很抱歉提出这些问题,但谢谢:)您可以使用Changelistener或任何其他符合您目的的侦听器(PropertyChangeListener实际上就是为此而设计的,但对我来说太详细了一点,我从未使用过)。在编辑之后调用一个自创的方法(比如updateComponents)也是可能的,这取决于您有多少更改源。最后,您可能会更改一些ui组件,请确保通过调用SwingUtilities.invokeLater(…)在事件调度线程(EDT)上进行更改,否则会得到奇怪的结果。非常感谢!我想我现在明白该怎么办了:)