java程序中,图片按钮当鼠标滑过之后才会显示,是什么原因?

试过:框架.setVisible(true);
框架.validate();
我也没有背景图片;只是按钮是带图片按钮;
求大神!百度的都看过了
JFrame fr=new JFrame();
fr.setSize(400,500);
fr.setLayout(null);
fr.setVisible(true);
JButton[] pic =new JButton[5];
for(int i=0;i<3;i++){

pic[i]=new JButton((new ImageIcon("tupian/0.gif")));
pic[i].setBounds(100, 100+50*i, 50, 50);
fr.add(pic[i]);

Thread.sleep(500);
}

因为每次swing窗口必须刷新才出新的东西,而setVisible(true);就是一个刷新的过程,你只有尽量把setVisible(true);这句话拿到外面来或者写在最后。
就像
public static void main(String[] args) {
new JFrame1();
}
public JFrame1(){
setVisible(true);
...
这样是不行的,要写成这样:
public static void main(String[] args) {
new JFrame1().setVisible(true);
}
public JFrame1(){
...追问

JFrame fr=new JFrame();
fr.setSize(400,500);
fr.setLayout(null);
fr.setVisible(true);
JButton[] pic =new JButton[3];

字数超出,贴在下面补充。。

大神,你说我该怎么改?

追答

你写个JFrame1(),把原先fr的内容都给放进去
public class JFrame1 extends JFrame{
public static void main(String[] args) {
JFrame fr=new JFrame1();
fr.setVisible(true);
}
public JFrame1(){
this.setSize(400,500);//this可省略
setLayout(null);
setVisible(true);
JButton[] pic =new JButton[5];
for(int i=0;i<3;i++){

pic[i]=new JButton((new ImageIcon("tupian/0.gif")));
pic[i].setBounds(100, 100+50*i, 50, 50);
this.add(pic[i]);

Thread.sleep(500);
}
}
}
你试试,不行就按照上面的来

追问

试了,还是不行,不过我把Thread.sleep(500);注释掉就可以了,,难道是这个的原因?。。。

追答

。。。。。。不清楚,这还有影响刷新的功能么?没实际例子验证过也不知道,反正你怎样能用就怎么样吧。。。如果是真的thread的原因,那就多线程控制显示,跟下面说的一样来

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-05
先setVisible(false);
在setVisible(true);追问

这样是可以,但是,我每显示一个控件,窗口就会闪烁一次,怎样不闪,还能达到目的??

追答

package test;

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GUIThread {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
final JFrame jf = new JFrame("TestGUIThread"); //需要在内部类使用,又不传入内部类,只有定义为终态
jf.setSize(300, 400);
jf.setLayout(new GridLayout(5,5)); // 设置样式为5*5的格子
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true); //先启动主线程显示主界面

//启动一个子线程加入按钮
new Thread(){

@Override
public void run() {
// TODO Auto-generated method stub
for (int i=0;i<10;i++){ //循环10次
try {
Thread.sleep(1000); //延时1秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jf.add(new JButton(""+i)); //加入10个按钮

//下面这两句就是刷新界面的
jf.setVisible(false);
jf.setVisible(true);
}

}

}.start();
}

}

给你发个例子参照吧,你的代码不全,不好改。

相似回答