gpt4 book ai didi

java - 为 JFrame 实现清除按钮

转载 作者:行者123 更新时间:2023-12-04 17:34:06 25 4
gpt4 key购买 nike

我正在为由四个 JPanel 组成的 JFrame 实现一个清除按钮。每个 JPanel 都有几个文本字段、单选按钮和复选框。

当表单加载时,“清除”按钮应该被禁用。只有当用户在任何面板中的任何这些字段中输入了一些值时,它才应该被启用。

我尝试向面板添加一个 KeyListener。但它没有正确获取事件。我是否必须为所有 UI 组件注册 KeyListener?还有什么好的方法吗?

提前致谢!

最佳答案

要进行更改,您可以将 ItemListener 添加到您的 JCheckBoxJRadioButtons,对于 JTextField,您可以添加 CaretListener

这个小程序可能对你有帮助:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.CaretListener;
import javax.swing.event.CaretEvent;

public class StateChangedEventClass extends JFrame
{
private JPanel contentPane, panel1, panel2;
private JButton clearButton;
private ItemListener itemChangeAction;
private CaretListener caretAction;

public StateChangedEventClass()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);

contentPane = new JPanel();
contentPane.setLayout(new GridLayout(2, 2));
clearButton = new JButton("CLEAR");
clearButton.setEnabled(false);

itemChangeAction = new ItemListener()
{
public void itemStateChanged(ItemEvent ce)
{
clearButton.setEnabled(true);
}
};

caretAction = new CaretListener()
{
public void caretUpdate(CaretEvent ce)
{
clearButton.setEnabled(true);
}
};

panel1 = new JPanel();
panel1.setLayout(new GridLayout(2 , 2));
JLabel userLabel = new JLabel("USERNAME : ", JLabel.CENTER);
JTextField userField = new JTextField(10);
userField.addCaretListener(caretAction);
JLabel passLabel = new JLabel("PASSWORD : " + JLabel.CENTER);
JTextField passField = new JTextField(10);
passField.addCaretListener(caretAction);
panel1.add(userLabel);
panel1.add(userField);
panel1.add(passLabel);
panel1.add(passField);
contentPane.add(panel1);

panel2 = new JPanel();
panel2.setLayout(new GridLayout(2, 1));
JRadioButton maleButton = new JRadioButton("MALE", false);
maleButton.addItemListener(itemChangeAction);
JRadioButton femaleButton = new JRadioButton("FEMALE", false);
femaleButton.addItemListener(itemChangeAction);
ButtonGroup bg = new ButtonGroup();
bg.add(maleButton);
bg.add(femaleButton);
panel2.add(maleButton);
panel2.add(femaleButton);
contentPane.add(panel2);

add(contentPane, BorderLayout.CENTER);
add(clearButton, BorderLayout.PAGE_END);

pack();
setVisible(true);
}

public void caretUpdate(CaretEvent ce)
{
clearButton.setEnabled(true);
}

public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new StateChangedEventClass();
}
});
}
}

关于java - 为 JFrame 实现清除按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9324868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com