Java 5秒后如何更改jtextfield边框?
我尝试在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
// 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.首选(单位尺寸)