我是Swing的新手,我有一个情况.我正在设计一个应用程序,它根据xml文件输入(元数据)动态呈现GUI组件.现在,我的大多数JTextField都将InputVerifier设置为它们,以进行验证.只要输入无效,输入验证程序就会弹出JOptionPane.
现在,如果用户输入无效数据并向前移动并单击面板上的按钮,则会弹出一个对话框,用户必须对其进行响应.但在此之后,按钮也不会绘制以释放状态.它仍然看起来像被按下但实际上它不是.由于整个代码非常混乱,我将问题场景放在下面的代码中: -
我应该怎么做才能让JButton看起来没穿#?如果逻辑也被解释,我将不胜感激.
提前致谢.
package test;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.InputVerifier;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class VerifierTest extends JFrame {
private static final long serialVersionUID = 1L;
public VerifierTest() {
JTextField tf;
tf = new JTextField("TextField1");
getContentPane().add(tf, BorderLayout.NORTH);
tf.setInputVerifier(new PassVerifier());
final JButton b = new JButton("Button");
b.setVerifyInputWhenFocusTarget(true);
getContentPane().add(b, BorderLayout.EAST);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (b.hasFocus())
System.out.println("Button clicked");
}
}); …Run Code Online (Sandbox Code Playgroud) 我的Java Applet中有一个JButton.按下它之后,ActionListener必须执行大量操作.因此,正因为如此,当用户点击按钮时,它会"保持按下"一段时间(有时甚至是5分钟),而不是立即禁用它(它在这5个小时后自动禁用).
public void actionPerformed(ActionEvent e) {
JButton.setEnabled(false);
//...
}
Run Code Online (Sandbox Code Playgroud)
我不希望用户看到它.我希望所有这些动作都在后台执行.我能做些什么来实现它?