相关疑难解决方法(0)

当焦点被JOptionPane窃取时,JButton保持按下状态

我是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 swing jtextfield joptionpane inputverifier

5
推荐指数
1
解决办法
1856
查看次数

单击Java Applet后,JButton"保持按下"状态

我的Java Applet中有一个JButton.按下它之后,ActionListener必须执行大量操作.因此,正因为如此,当用户点击按钮时,它会"保持按下"一段时间(有时甚至是5分钟),而不是立即禁用它(它在这5个小时后自动禁用).

public void actionPerformed(ActionEvent e) {
  JButton.setEnabled(false);
  //...
}
Run Code Online (Sandbox Code Playgroud)

我不希望用户看到它.我希望所有这些动作都在后台执行.我能做些什么来实现它?

java swing multithreading jbutton

3
推荐指数
1
解决办法
2273
查看次数