You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse Window Builder开发Swing程序:标签不更新问题求助

Fix for Start Panel Label Update Issue

Hey there! Let's figure out why your Start panel labels aren't updating when you select a Key or Level. I've looked through your code, and here's what's going on:

The Root Problems

  • You only set the text of lblSelectkeylabel, lblSelectlevellabel, and lblChoicedone once when initializing the window. When you click Key/Level buttons to change the key and level variables, the labels never get told to refresh their display.
  • The if-else check for whether the user has selected both options only runs during initialization. It doesn't re-run when you switch back to the Start panel, so the "Choose done" message stays stuck.

How to Fix It

Let's adjust your code with these steps:

  1. Move the Start panel's label variables to be class members so we can access them from any ActionListener.
  2. Create a dedicated method to update the Start panel's labels and status message whenever needed.
  3. Call this update method whenever you select a Key/Level, and when switching to the Start panel.

Modified Complete Code

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
import java.awt.Font;

public class Test {
    private JFrame frame;
    int key = 0;
    int level = 0;
    
    // Make these labels class members so we can update them later
    private JLabel lblSelectkeylabel;
    private JLabel lblSelectlevellabel;
    private JLabel lblChoicedone;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test window = new Test();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Test() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JPanel Home = new JPanel();
        Home.setBounds(6, 6, 438, 266);
        frame.getContentPane().add(Home);

        JPanel SelectKey = new JPanel();
        SelectKey.setBounds(6, 6, 438, 266);
        frame.getContentPane().add(SelectKey);

        JPanel SelectLevel = new JPanel();
        SelectLevel.setBounds(6, 6, 438, 266);
        frame.getContentPane().add(SelectLevel);
        SelectLevel.setLayout(null);

        JPanel Start = new JPanel();
        Start.setBounds(6, 6, 438, 266);
        frame.getContentPane().add(Start);
        Start.setLayout(null);

        // Home Panel Components
        JButton btnHome = new JButton("Home");
        btnHome.setBounds(169, 141, 100, 29);
        btnHome.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Home.setVisible(true);
                SelectKey.setVisible(false);
                SelectLevel.setVisible(false);
                Start.setVisible(false);
            }
        });
        Home.setLayout(null);
        Home.add(btnHome);

        JButton btnSelectKey = new JButton("Select Key");
        btnSelectKey.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Home.setVisible(false);
                SelectKey.setVisible(true);
                SelectLevel.setVisible(false);
                Start.setVisible(false);
            }
        });
        btnSelectKey.setBounds(159, 67, 117, 29);
        Home.add(btnSelectKey);

        JButton btnSelectLevel = new JButton("Select Level");
        btnSelectLevel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                SelectKey.setVisible(false);
                SelectLevel.setVisible(true);
                Home.setVisible(false);
                Start.setVisible(false);
            }
        });
        btnSelectLevel.setBounds(159, 37, 117, 29);
        Home.add(btnSelectLevel);

        JButton btnStart = new JButton("Start");
        btnStart.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                SelectKey.setVisible(false);
                SelectLevel.setVisible(false);
                Home.setVisible(false);
                Start.setVisible(true);
                // Update Start panel when switching to it
                updateStartPanel();
            }
        });
        btnStart.setBounds(159, 92, 117, 29);
        Home.add(btnStart);

        JLabel lblHome = new JLabel("Home");
        lblHome.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        lblHome.setBounds(197, 18, 61, 16);
        Home.add(lblHome);

        // SelectKey Panel Components
        JButton btnNewButton = new JButton("Home");
        btnNewButton.setBounds(169, 185, 100, 29);
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Home.setVisible(true);
                SelectKey.setVisible(false);
                SelectLevel.setVisible(false);
                Start.setVisible(false);
            }
        });
        SelectKey.setLayout(null);
        SelectKey.add(btnNewButton);

        JButton btnKeyA = new JButton("Key A");
        btnKeyA.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                key = 1;
                System.out.print(key);
                // Update Start panel when key is selected
                updateStartPanel();
            }
        });
        btnKeyA.setBounds(157, 44, 117, 29);
        SelectKey.add(btnKeyA);

        JButton btnKeyB = new JButton("Key B");
        btnKeyB.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                key = 2;
                System.out.print(key);
                updateStartPanel();
            }
        });
        btnKeyB.setBounds(157, 90, 117, 29);
        SelectKey.add(btnKeyB);

        JButton btnKeyC = new JButton("Key C");
        btnKeyC.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                key = 3;
                System.out.print(key);
                updateStartPanel();
            }
        });
        btnKeyC.setBounds(157, 129, 117, 29);
        SelectKey.add(btnKeyC);

        JLabel lblSelectKey = new JLabel("Select Key");
        lblSelectKey.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        lblSelectKey.setBounds(168, 19, 117, 23);
        SelectKey.add(lblSelectKey);

        // SelectLevel Panel Components
        JButton btnBeginnner = new JButton("Beginnner");
        btnBeginnner.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                level = 1;
                System.out.print(level);
                updateStartPanel();
            }
        });
        btnBeginnner.setBounds(158, 67, 117, 29);
        SelectLevel.add(btnBeginnner);

        JButton btnIntermediate = new JButton("Intermediate");
        btnIntermediate.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                level = 2;
                System.out.print(level);
                updateStartPanel();
            }
        });
        btnIntermediate.setBounds(158, 113, 117, 29);
        SelectLevel.add(btnIntermediate);

        JButton btnAdvanced = new JButton("Advanced");
        btnAdvanced.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                level = 3;
                System.out.print(level);
                updateStartPanel();
            }
        });
        btnAdvanced.setBounds(158, 166, 117, 29);
        SelectLevel.add(btnAdvanced);

        JButton btnHome_1 = new JButton("Home");
        btnHome_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Home.setVisible(true);
                SelectKey.setVisible(false);
                SelectLevel.setVisible(false);
                Start.setVisible(false);
            }
        });
        btnHome_1.setBounds(158, 207, 117, 29);
        SelectLevel.add(btnHome_1);

        JLabel lblSelectLevel = new JLabel("Select Level");
        lblSelectLevel.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        lblSelectLevel.setBounds(162, 19, 158, 36);
        SelectLevel.add(lblSelectLevel);

        // Start Panel Components
        JLabel lblStart = new JLabel("Start");
        lblStart.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        lblStart.setBounds(186, 25, 61, 16);
        Start.add(lblStart);

        JButton btnHome_2 = new JButton("Home");
        btnHome_2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Home.setVisible(true);
                SelectKey.setVisible(false);
                SelectLevel.setVisible(false);
                Start.setVisible(false);
            }
        });
        btnHome_2.setBounds(155, 216, 117, 29);
        Start.add(btnHome_2);

        lblSelectkeylabel = new JLabel("SelectKeyLabel");
        lblSelectkeylabel.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        lblSelectkeylabel.setBounds(175, 64, 97, 41);
        Start.add(lblSelectkeylabel);

        lblSelectlevellabel = new JLabel("Selectlevellabel");
        lblSelectlevellabel.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        lblSelectlevellabel.setBounds(169, 107, 146, 41);
        Start.add(lblSelectlevellabel);

        lblChoicedone = new JLabel("Choicedone");
        lblChoicedone.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        lblChoicedone.setBounds(175, 147, 250, 16); // Widen bounds to fit longer text
        Start.add(lblChoicedone);

        JButton btnStart_1 = new JButton("Start");
        btnStart_1.setBounds(155, 185, 117, 29);
        Start.add(btnStart_1);

        // Initialize Start panel display
        updateStartPanel();
    }

    // Method to update Start panel labels and status
    private void updateStartPanel() {
        // Update key and level labels
        lblSelectkeylabel.setText(key == 0 ? "No Key Selected" : "Key: " + getKeyName(key));
        lblSelectlevellabel.setText(level == 0 ? "No Level Selected" : "Level: " + getLevelName(level));
        
        // Update status message
        if (key == 0 || level == 0) {
            lblChoicedone.setText("Please go back and choose a key and a level");
        } else {
            lblChoicedone.setText("Ready to Start!");
        }
    }

    // Helper to get friendly key name instead of number
    private String getKeyName(int keyNum) {
        switch(keyNum) {
            case 1: return "A";
            case 2: return "B";
            case 3: return "C";
            default: return "None";
        }
    }

    // Helper to get friendly level name instead of number
    private String getLevelName(int levelNum) {
        switch(levelNum) {
            case 1: return "Beginner";
            case 2: return "Intermediate";
            case 3: return "Advanced";
            default: return "None";
        }
    }
}

What Changed

  • Added class-level label variables so we can modify them anywhere in the class.
  • Created updateStartPanel() method that handles updating all Start panel labels and the status message.
  • Called updateStartPanel() every time a Key/Level is selected, and when switching to the Start panel.
  • Added helper methods to convert key/level numbers to friendly names (makes the UI nicer!).
  • Adjusted the lblChoicedone bounds to fit longer text without cutting off.

Now when you select a Key or Level, the Start panel will automatically reflect your choices, and the status message will update correctly when you switch to the Start screen.

内容的提问来源于stack exchange,提问作者A Stephens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:10:27