简体   繁体   中英

JComponent Won't Repaint

I have a JTabbedPane that looks like this:

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);

my AccountOverview method looks like this:

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;
}

I want the JLabel that is displayed on the JComponent on the tab to update the information when "Edit Name", "Edit Gender", etc. is clicked. I can't get the JPanel to repaint itself. What would the edited code look like so the displayed information would update?

It's really simple. I'll demonstrate with the fisrt button.

final JLabel filler = new JLabel(text);

Variable has to be declared final in order to use it inside an anonymous 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())
        }
    });

If you call setText inside the listener the information in your JLabel will update automatically.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM