要实现在按下按钮后JFrame凝结住的效果,可以使用以下代码示例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FrozenJFrameExample extends JFrame {
private JButton freezeButton;
public FrozenJFrameExample() {
initializeUI();
}
private void initializeUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Frozen JFrame Example");
setSize(300, 200);
JPanel panel = new JPanel();
freezeButton = new JButton("Freeze");
freezeButton.addActionListener(new FreezeButtonListener());
panel.add(freezeButton);
getContentPane().add(panel);
}
private class FreezeButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
freezeButton.setEnabled(false);
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
// 模拟耗时操作
try {
Thread.sleep(3000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
setCursor(Cursor.getDefaultCursor());
freezeButton.setEnabled(true);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
FrozenJFrameExample example = new FrozenJFrameExample();
example.setVisible(true);
});
}
}
在这个示例中,我们创建了一个JFrame,并在其中添加了一个按钮。当点击按钮时,通过监听器将按钮设置为禁用状态,同时将光标设置为等待状态。然后,我们模拟了一个耗时操作(这里使用Thread.sleep()
方法模拟),在这个操作完成后,将光标恢复为默认状态,并重新启用按钮。
通过这种方式,当点击按钮后,JFrame会在耗时操作期间凝结住,用户无法与界面进行交互,直到耗时操作完成。