import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonExample{
public static void main(String[] args) {
JFrame f = new JFrame("Demo");
f.setSize(300, 250);
f.setLocationRelativeTo(null);
f.getContentPane().setBackground(Color.BLUE);
f.setDefaultCloseOperation(2);
final JTextField tf = new JTextField();
tf.setBounds(75, 52, 150, 30);
JButton b = new JButton("Hit it!");
b.setBounds(50, 150, 80, 30);
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tf.setText("Hello world!");
tf.setBackground(Color.cyan);
}
});
JButton c = new JButton("Colse");
c.setBounds(170, 150, 80, 30);
c.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
f.add(b);
f.add(tf);
f.add(c);
f.setLayout(null);
f.setVisible(true);
}
}
基本上,我的代码是,我将背景色设置为蓝色,但是首先将其设置为灰色,然后几秒钟变成蓝色,我试图找出它,但实际上不起作用,希望你们能给我一些帮助
答案 0 :(得分:0)
但是首先显示为灰色,然后在几秒钟后变为蓝色,
我没有看到这个问题。我承认有时候我确实会看到几毫秒的轻微闪烁,但这是不可重复的。
这是我的建议:
所有Swing组件都应在Event Dispatch Thread (EDT)
上创建。因此,您应该使用SwingUtilities.invokeLater(...)
创建GUI。
Swing旨在与布局管理器一起使用。因此,您应该a)设置布局,b)添加组件c)pack()框架d)使框架可见。尽管您不应该使用null布局,但是对于这个简单的示例,我仍然会使用相同的逻辑顺序,只是在使框架可见之前,您将使用setSize(...)而不是pack()。
请勿使用魔术值:f.setDefaultCloseOperation(2);
。我们不知道“ 2”是什么意思。该API具有供您使用的变量。例如JFrame.EXIT_ON_CLOSE
。使用这些变量可使代码更具可读性。
这是代码的稍微重新构建的版本:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonExample
{
private static void createAndShowGUI()
{
JFrame f = new JFrame("Demo");
f.setLayout(null);
f.getContentPane().setBackground(Color.BLUE);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTextField tf = new JTextField();
tf.setBounds(75, 52, 150, 30);
JButton b = new JButton("Hit it!");
b.setBounds(50, 150, 80, 30);
b.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
tf.setText("Hello world!");
tf.setBackground(Color.cyan);
}
});
JButton c = new JButton("Colse");
c.setBounds(170, 150, 80, 30);
c.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
f.add(b);
f.add(tf);
f.add(c);
f.setLocationRelativeTo(null);
f.setSize(300, 250);
f.setVisible(true);
}
public static void main(String[] args)
{
java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
/*
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}
阅读Swing Tutorial,了解Swing的基础知识。关于以下内容:
Concurrency in Swing
-进一步说明EDT
Using Layout Managers
-有关使用标准布局管理器的示例