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, andlblChoicedoneonce when initializing the window. When you click Key/Level buttons to change thekeyandlevelvariables, the labels never get told to refresh their display. - The
if-elsecheck 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:
- Move the Start panel's label variables to be class members so we can access them from any ActionListener.
- Create a dedicated method to update the Start panel's labels and status message whenever needed.
- 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
lblChoicedonebounds 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
相关产品推荐
相关产品推荐

