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

试过:框架.setVisible(true);框架.validate();我也没有背景图片;只是按钮是带图片按钮;求大神!百度的都看过了JFramefr=newJFram... 试过:框架.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);
}
展开
 我来答
百度网友799369c
推荐于2017-09-18 · TA获得超过562个赞
知道小有建树答主
回答量:514
采纳率:66%
帮助的人:159万
展开全部
因为每次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);
}
}
}
你试试,不行就按照上面的来
百度网友fe6d0b6
2013-12-05 · TA获得超过275个赞
知道小有建树答主
回答量:397
采纳率:75%
帮助的人:268万
展开全部
先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();
}

}

给你发个例子参照吧,你的代码不全,不好改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式