Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 5秒后如何更改jtextfield边框?_Java_Swing - Fatal编程技术网

Java 5秒后如何更改jtextfield边框?

Java 5秒后如何更改jtextfield边框?,java,swing,Java,Swing,我尝试在5秒后更改jtextfield边框。但是不起作用。我的代码: // Here vaildate a field and set border to red if (ApplicationNameField.getText().equals("")) { Border newBorder = BorderFactory.createLineBorder(Color.RED, 1); ApplicationNameField.setBorder

我尝试在5秒后更改jtextfield边框。但是不起作用。我的代码:

    // Here vaildate a field and set border to red
    if (ApplicationNameField.getText().equals("")) {
        Border newBorder = BorderFactory.createLineBorder(Color.RED, 1);
        ApplicationNameField.setBorder(newBorder);
        ErrorCode.setText("Error field cant be empty");
    }
    if (ApplicationHostField.getText().equals("")) {
        Border newBorder = BorderFactory.createLineBorder(Color.RED, 1);
        ApplicationHostField.setBorder(newBorder);
        ErrorCode.setText("Error field cant be empty");
    }

   // here i would change border to start normal color (color black)
   try {
        TimeUnit.SECONDS.sleep(5);
        Border newBorder = BorderFactory.createLineBorder(Color.BLACK, 1);
        ApplicationNameField.setBorder(newBorder);
        Border newBorder2 = BorderFactory.createLineBorder(Color.BLACK, 1);
        ApplicationHostField.setBorder(newBorder2);

    } catch (InterruptedException ex) {
        System.out.print(ex.getMessage());
    }
在这段代码之后,我的JTextFields边框是黑色的,而不是红色

我还试过:

     Thread.sleep(5000);

但效果是一样的。任何人都可以提供帮助?

您需要使用
javax.swing.Timer
在5秒后触发所需的操作
Thread.wait(或任何其他类型的等待)无法按预期工作,因为在线程返回到主事件循环之前不会绘制任何内容。

您需要使用
javax.swing.Timer
在5秒后触发所需的操作<代码>线程。等待(或任何其他类型的等待)无法按预期工作,因为在线程返回到主事件循环之前不会绘制任何内容。

您可以使用
SwingWorker
来执行此操作。请参见下面我的跑步示例

import java.awt.Color;
import java.awt.EventQueue;

import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingWorker;
import javax.swing.border.EmptyBorder;

public class JTextFieldTest extends JFrame {

    private JPanel contentPane;
    private JTextField textField;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JTextFieldTest frame = new JTextFieldTest();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public JTextFieldTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 298, 220);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);

        textField = new JTextField();
        textField.setColumns(10);
        textField.setBorder(BorderFactory.createLineBorder(Color.RED));
        SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() throws Exception {
                // Simulate doing something useful.
                Thread.sleep(5000);
                textField.setBorder(BorderFactory.createLineBorder(Color.BLACK));
                return null;
            }
        };

        worker.execute();
        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(gl_contentPane.createParallelGroup(
                Alignment.LEADING).addGroup(
                gl_contentPane
                        .createSequentialGroup()
                        .addGap(87)
                        .addComponent(textField, GroupLayout.PREFERRED_SIZE,
                                GroupLayout.DEFAULT_SIZE,
                                GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(99, Short.MAX_VALUE)));
        gl_contentPane.setVerticalGroup(gl_contentPane.createParallelGroup(
                Alignment.LEADING).addGroup(
                gl_contentPane
                        .createSequentialGroup()
                        .addGap(70)
                        .addComponent(textField, GroupLayout.PREFERRED_SIZE,
                                GroupLayout.DEFAULT_SIZE,
                                GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(81, Short.MAX_VALUE)));
        contentPane.setLayout(gl_contentPane);
    }

}
导入java.awt.Color;
导入java.awt.EventQueue;
导入javax.swing.BorderFactory;
导入javax.swing.GroupLayout;
导入javax.swing.GroupLayout.Alignment;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.SwingWorker;
导入javax.swing.border.EmptyBorder;
公共类JTextFieldTest扩展了JFrame{
私有JPanel内容窗格;
私有JTextField textField;
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
JTextFieldTest帧=新的JTextFieldTest();
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
/**
*创建框架。
*/
公共JTextFieldTest(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
立根(100100298220);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
textField=新的JTextField();
textField.setColumns(10);
setboorder(BorderFactory.createLineBorder(Color.RED));
SwingWorker worker=新SwingWorker(){
@凌驾
受保护的Void doInBackground()引发异常{
//模拟做一些有用的事情。
睡眠(5000);
setboorder(BorderFactory.createLineBorder(Color.BLACK));
返回null;
}
};
worker.execute();
GroupLayout gl_contentPane=新的GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(gl_contentPane.createParallelGroup(
对齐。领导组(
内容窗格
.createSequentialGroup()
.addGap(87)
.addComponent(文本字段,组布局。首选尺寸,
GroupLayout.DEFAULT\u大小,
GroupLayout.首选(单位尺寸)
.addContainerGap(99,简称最大值));
gl_contentPane.setVerticalGroup(gl_contentPane.createParallelGroup(
对齐。领导组(
内容窗格
.createSequentialGroup()
.addGap(70)
.addComponent(文本字段,组布局。首选尺寸,
GroupLayout.DEFAULT\u大小,
GroupLayout.首选(单位尺寸)
.addContainerGap(81,简称最大值));
contentPane.setLayout(gl_contentPane);
}
}

您可以使用
SwingWorker
执行此操作。请参见下面我的跑步示例

import java.awt.Color;
import java.awt.EventQueue;

import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingWorker;
import javax.swing.border.EmptyBorder;

public class JTextFieldTest extends JFrame {

    private JPanel contentPane;
    private JTextField textField;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JTextFieldTest frame = new JTextFieldTest();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public JTextFieldTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 298, 220);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);

        textField = new JTextField();
        textField.setColumns(10);
        textField.setBorder(BorderFactory.createLineBorder(Color.RED));
        SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() throws Exception {
                // Simulate doing something useful.
                Thread.sleep(5000);
                textField.setBorder(BorderFactory.createLineBorder(Color.BLACK));
                return null;
            }
        };

        worker.execute();
        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(gl_contentPane.createParallelGroup(
                Alignment.LEADING).addGroup(
                gl_contentPane
                        .createSequentialGroup()
                        .addGap(87)
                        .addComponent(textField, GroupLayout.PREFERRED_SIZE,
                                GroupLayout.DEFAULT_SIZE,
                                GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(99, Short.MAX_VALUE)));
        gl_contentPane.setVerticalGroup(gl_contentPane.createParallelGroup(
                Alignment.LEADING).addGroup(
                gl_contentPane
                        .createSequentialGroup()
                        .addGap(70)
                        .addComponent(textField, GroupLayout.PREFERRED_SIZE,
                                GroupLayout.DEFAULT_SIZE,
                                GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(81, Short.MAX_VALUE)));
        contentPane.setLayout(gl_contentPane);
    }

}
导入java.awt.Color;
导入java.awt.EventQueue;
导入javax.swing.BorderFactory;
导入javax.swing.GroupLayout;
导入javax.swing.GroupLayout.Alignment;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.SwingWorker;
导入javax.swing.border.EmptyBorder;
公共类JTextFieldTest扩展了JFrame{
私有JPanel内容窗格;
私有JTextField textField;
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
JTextFieldTest帧=新的JTextFieldTest();
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
/**
*创建框架。
*/
公共JTextFieldTest(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
立根(100100298220);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
textField=新的JTextField();
textField.setColumns(10);
setboorder(BorderFactory.createLineBorder(Color.RED));
SwingWorker worker=新SwingWorker(){
@凌驾
受保护的Void doInBackground()引发异常{
//模拟做一些有用的事情。
睡眠(5000);
setboorder(BorderFactory.createLineBorder(Color.BLACK));
返回null;
}
};
worker.execute();
GroupLayout gl_contentPane=新的GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(gl_contentPane.createParallelGroup(
对齐。领导组(
内容窗格
.createSequentialGroup()
.addGap(87)
.addComponent(文本字段,组布局。首选尺寸,
GroupLayout.DEFAULT\u大小,
GroupLayout.首选(单位尺寸)