java - 在执行完整程序之前按钮不会被移除

标签 java swing jframe jbutton

我有一个按钮在另一个类中运行一个函数。按钮单击事件处理如下:

    JPanel ne=new JPanel();
    JButton startButton=new JButton("START"); 
    public void actionPerformed(ActionEvent e)
    {

        System.out.println("Welcome to Guess the number Game");
        System.out.println("You have 3 chances to guess a number between 0 and 10 excluding 10");

        ne.remove(startButton);
        gamer2 game=new gamer2();
        game.generatenum();

    }

JButton startButton 被添加到 JPanel ne。单击按钮后,actionPerformed(ActionEvent e) 运行并且按钮被应该从 JPanel 中删除。但是按钮会保留在那里,直到整个程序运行完毕。有人可以帮我解决这个问题吗?

JFrame 的完整代码:

package test;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.border.Border;

public class test3 implements ActionListener {

    JButton p=new JButton("START"); 
    JPanel ne=new JPanel();

    public void create()
    {
        Dimension s=new Dimension(400,400);
        JFrame l=new JFrame();

        l.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        l.setSize(s);
        l.setResizable(true);
        Dimension s1=new Dimension(400,200);
        Dimension s2=new Dimension(400,100);

        JPanel me=new JPanel(); 


        JLabel kingsman=new JLabel ("GUESS THE KING'S NUMBER!");
        kingsman.setFont(new Font("Serif", Font.BOLD, 45));

        JPanel commonPane=new JPanel();
        BoxLayout n1=new BoxLayout(commonPane,1);
        commonPane.setLayout(n1);


        p.setFont(new Font("Serif", Font.BOLD, 40));
        p.setPreferredSize(s1);
        JTextField tf=new JTextField();
        tf.setFont(new Font("Serif", Font.BOLD, 45));
        Border border = BorderFactory.createLineBorder(Color.YELLOW, 5);
        tf.setBorder(border);
        tf.setPreferredSize(s2);
        JPanel cn=new JPanel();
        cn.add(tf);
        //l.add(p);
        me.add(kingsman);
        ne.add(p);

        commonPane.add(me);
        commonPane.add(ne);
        commonPane.add(cn);
        l.add(commonPane);

        l.setVisible(true);
        p.addActionListener(this); 

    }

    public void actionPerformed(ActionEvent e)
    {
        System.out.println("Welcome to Guess the number Game");
        System.out.println("You have 3 chances to guess a number between 0 and 10 excluding 10");

        ne.remove(p);

        ne.updateUI();
        gamer2 game=new gamer2();
        game.generatenum();

    }

    public static void main(String args[])
    {
        test3 ob=new test3();
        ob.create();

    }

}

最佳答案

GUI 上的所有更新(由 ne.remove(p);ne.updateUI(); 发起)将在之后 actionPerformed(..) 方法结束。因此 game.generatenum(); 应该只调出新的 GUI 并尽快返回。

关于java - 在执行完整程序之前按钮不会被移除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34488901/

相关文章:

java 10 gradle 项目 : automatic module not found

java - 有人能告诉我为什么这个方法会进入无限循环吗?

Java 自动完成 TextField(Ajax 风格)

java - 如何将 JPanel 添加到 JScrollPane?

java - JFrame 到 Window 类

java - 操作数组列表

java - 将类对象发送到阶段 Controller - javafx

java - 组织.hibernate.SessionException : Session is closed

java - 随着字符串长度的增加自动更改 Swing 组件中的字体大小

java - 当我加载图像列表时仅显示一张图像