【问题标题】:Updating a JComponent in JTabbedPane在 JTabbedPane 中更新 JComponent
【发布时间】:2013-04-05 08:16:00
【问题描述】:

我有一个看起来像这样的 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);
        }

guest.toString 打印出客户的信息。 我的 AccountOverview(guest.toString) 方法如下所示:

    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,以便标签窗格反映新的更新更改。 例如,如果原始显示为“姓名:管理员”,则只需单击“编辑姓名”并输入“John”即可将原始显示更改为“姓名:John”。

编辑:我的 toString() 方法(来自另一个类,客户)

//Returns the Customer object as a String. 
public String toString()
{ 
    customerstring= "<html>Name: " + getName();
    customerstring+= "<br>Gender: " + getGender();
    customerstring+= "<br>Date of Birth: " + getBirthDate();
    customerstring+= "<br>Passport number: " +  getPassportNumber();
    customerstring+= "<br>Balance: " + money.format(getMoney());
    return customerstring;
}

如何编辑我的代码?

提前致谢!

【问题讨论】:

  • @HovercraftFullOfEels 抱歉,toString 方法是另一个类的一部分。我已经编辑了我的帖子以包含这种方法。我最初发布的代码来自我的 GUI 类。

标签: java swing button user-interface action


【解决方案1】:

在:JComponent accountinfo = AccountOverview(guest.toString()); 您处理信息以创建您的组件。

这会生成您的客人信息的副本(通过调用 toString()),以后无法更改。尝试将 guest 对象传递给您的组件,并在每次重绘自身时调用 toString()。

在编辑完成后调用 accountinfo.repaint() 可以让组件自行重绘。

【讨论】:

  • 非常感谢!不过,我如何将来宾对象传递给我的组件?
  • 好吧,在 AccountOverview() 方法中,您创建了一个 Jcomponent。我建议创建一个类(扩展 Jpanel 或你使用的任何东西),它有一个字段来宾。每次来宾更改时:让它重新绘制/重新填充您为创建组件所做的任何事情
  • 对不起,我对这一切有点陌生。我会使用 ChangeListener 来查看来宾是否更改?很抱歉所有这些问题,但谢谢你:)
  • 您可以使用 Changelistener 或任何其他适合您目的的侦听器(PropertyChangeListener 实际上就是为此而设计的,但对我的口味来说有点太详细了,我从不使用它)。也可以在编辑后调用自创方法(类似于 updateComponents),这取决于您有多少更改源。最后,您可能会更改一些 ui 组件,请确保通过调用 SwingUtilities.invokeLater(...) 在事件调度线程 (EDT) 上执行此操作,否则您会得到奇怪的结果。
  • 非常感谢!我想我明白现在该做什么了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 2014-04-15
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 2012-06-24
  • 2012-05-15
相关资源
最近更新 更多