Java JComponent赢得';不要重新油漆

Java JComponent赢得';不要重新油漆,java,swing,user-interface,graphics,jtabbedpane,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);

我有一个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);
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;
}
my AccountOverview方法如下所示:

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);
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重新粉刷自己。编辑后的代码会是什么样子,这样显示的信息就会更新?

非常简单。我将用第一个按钮演示

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

这非常简单。我将用第一个按钮演示

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

非常感谢!我一直在试图解决这个问题这么长时间,我只能找到复杂的答案。你的回答很简单,但很快就解决了我的问题:)非常感谢!我一直在试图解决这个问题这么长时间,我只能找到复杂的答案。你的回答很简单,但很快就解决了我的问题:)