swing 界面设计的问题

时间:2022-07-23 05:37:58
现像,1,如果把窗口初始化内容:setTitle("考勤管理系统1.0");
setSize(540,407);
setLocation(100,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);  
放在main()方内,按钮正常显示。2,但如果把上面的初始化内容放在构造方法内,运行的时候要用鼠标点一下才显示出来,不点就不出来。3,把上面的初始化内容放在构造方法内,并把iconbakButton=new ImageIcon("d:/Fengmian.png");注掉,运行的时候按钮又能正常显示了。我的目的是图像和按钮都同时正常显法,不知是哪里错了,请高手指点一下,谢谢!!!!

全部代码如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;

public class JFrameTest extends JFrame
{
private JButton bakButton,downButton,
exitButton,workButton,pepleButton,countButton;
private ImageIcon iconbakButton;
private JFrame jft;

public static void main(String[] args)
{
JFrameTest jft=new JFrameTest();
/*
jft.setTitle("考勤管理系统1.0");
jft.setSize(540,407);
jft.setLocation(100,100);
jft.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jft.setVisible(true);
jft.setResizable(false);
*/
}

public JFrameTest()
{
setTitle("考勤管理系统1.0");
setSize(540,407);
setLocation(100,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);
showPane();
}

private void showPane()
{

Container cp=getContentPane();
iconbakButton=new ImageIcon("d:/Fengmian.png");
cp.setBackground(new Color(210,138,177));
cp.setLayout(null);
bakButton=new JButton();
bakButton.setBounds(0,0,358,409);
//bakButton.setBackground(new Color( 212, 158, 217));
bakButton.setIcon(iconbakButton);
cp.add(bakButton);

workButton=new JButton("上班统计");
workButton.setBounds(378,30,130,45);
workButton.setBackground(new Color( 212, 158, 217));
cp.add(workButton);

downButton=new JButton("下班统计");
downButton.setBounds(378,95,130,45);
downButton.setBackground(new Color( 212, 158, 217));
cp.add(downButton);

pepleButton=new JButton("员工登计");
pepleButton.setBounds(378,165,130,45);
pepleButton.setBackground(new Color( 212, 158, 217));
cp.add(pepleButton);

countButton=new JButton("统计情况");
countButton.setBounds(378,230,130,45);
countButton.setBackground(new Color( 212, 158, 217));
cp.add(countButton);

exitButton=new JButton("退出系统");
exitButton.setBounds(378,295,130,45);
exitButton.setBackground(new Color( 212, 158, 217));
cp.add(exitButton);

}
}

10 个解决方案

#1


调试通过,可以显示啊

楼主为什么要把初始化都放在构造函数内呢
最好放在main()内

#2


抱歉,刚才调试的时候鼠标在窗体上
现在看到楼主的问题了

楼主请把如下代码位置坐调换

setVisible(true); 
setResizable(false); 
showPane(); 

替换成

setResizable(false); 
showPane();
setVisible(true); 

即setVisible(true);  在最后,也就是说最后调用显示,也就是JFrame 的 drawcomptent 的绘窗口方法


另外:特别提醒楼主,尽量不要把这种对窗口本身初始化的操作放在构造函数中
再造个方法,initial() 放初始化
习惯问题,不容易像楼主一样出错
你的代码也要别人来读的,如果写大了,自己都不知道到哪里初始化了,麻烦很大的

#3


谢谢2楼的建议!

#4


你这代码没什么特别啊 就是加了几个按钮进去 在哪设置title都是一样的 showpane和你的frame的title没有直接关系 怀疑是你环境的问题

#5


setVisible(true); 放到showPanel()的后面。
而且必须是放到后面的,他一直都是放到最后面的。

2楼解释的很好!

#6


2楼的说法很正确,我在电脑上调试,没有出现这样的情况了。感谢大家关注!

#7


你说的很正常,你没有刷新

#8


你再试一下
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.event.*; 
public class JFrameTest extends JFrame 

private JButton bakButton,downButton, 
exitButton,workButton,pepleButton,countButton; 
private ImageIcon iconbakButton; 
private JFrame jft; 


public JFrameTest() 

// setTitle("考勤管理系统1.0"); 
// setSize(540,407); 
// setLocation(100,100); 
// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
// setVisible(true); 
// setResizable(false); 
showPane(); 

private void showPane() 


Container cp=getContentPane(); 
//iconbakButton=new ImageIcon("d:/Fengmian.png"); //括号里这样写好象不对,具体忘了
cp.setBackground(new Color(210,138,177)); 
cp.setLayout(null); 
bakButton=new JButton(); 
bakButton.setBounds(0,0,358,409); 
//bakButton.setBackground(new Color( 212, 158, 217)); 
bakButton.setIcon(iconbakButton); 
cp.add(bakButton); 

workButton=new JButton("上班统计"); 
workButton.setBounds(378,30,130,45); 
workButton.setBackground(new Color( 212, 158, 217)); 
cp.add(workButton); 

downButton=new JButton("下班统计"); 
downButton.setBounds(378,95,130,45); 
downButton.setBackground(new Color( 212, 158, 217)); 
cp.add(downButton); 

pepleButton=new JButton("员工登计"); 
pepleButton.setBounds(378,165,130,45); 
pepleButton.setBackground(new Color( 212, 158, 217)); 
cp.add(pepleButton); 

countButton=new JButton("统计情况"); 
countButton.setBounds(378,230,130,45); 
countButton.setBackground(new Color( 212, 158, 217)); 
cp.add(countButton); 

exitButton=new JButton("退出系统"); 
exitButton.setBounds(378,295,130,45); 
exitButton.setBackground(new Color( 212, 158, 217)); 
cp.add(exitButton); 



public static void main(String[] args) 

JFrameTest jft=new JFrameTest(); 

jft.setTitle("考勤管理系统1.0"); 
jft.setSize(540,407); 
jft.setLocation(100,100); 
jft.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
jft.setVisible(true); 
jft.setResizable(false); 

}
}
JFrame为轻量级组件,它的界面由程序控制,有时会出现你的情况需要写刷新界面代码,但你的程序我试了一下没有出现此情况

#9


引用 2 楼 pest1999 的回复:
楼主请把如下代码位置坐调换 

setVisible(true); 
setResizable(false); 
showPane(); 

替换成 

setResizable(false); 
showPane(); 
setVisible(true); 

即setVisible(true);  在最后,也就是说最后调用显示,也就是JFrame 的 drawcomptent 的绘窗口方法 


另外:特别提醒楼主,尽量不要把这种对窗口本身初始化的操作放在构造函数中 
再造个…
  呵呵,我们老师刚讲了这个问题的,现在巩固了

#10


好象是先都设置好了,最后才是显示,逻辑问题,学习了。。。

#1


调试通过,可以显示啊

楼主为什么要把初始化都放在构造函数内呢
最好放在main()内

#2


抱歉,刚才调试的时候鼠标在窗体上
现在看到楼主的问题了

楼主请把如下代码位置坐调换

setVisible(true); 
setResizable(false); 
showPane(); 

替换成

setResizable(false); 
showPane();
setVisible(true); 

即setVisible(true);  在最后,也就是说最后调用显示,也就是JFrame 的 drawcomptent 的绘窗口方法


另外:特别提醒楼主,尽量不要把这种对窗口本身初始化的操作放在构造函数中
再造个方法,initial() 放初始化
习惯问题,不容易像楼主一样出错
你的代码也要别人来读的,如果写大了,自己都不知道到哪里初始化了,麻烦很大的

#3


谢谢2楼的建议!

#4


你这代码没什么特别啊 就是加了几个按钮进去 在哪设置title都是一样的 showpane和你的frame的title没有直接关系 怀疑是你环境的问题

#5


setVisible(true); 放到showPanel()的后面。
而且必须是放到后面的,他一直都是放到最后面的。

2楼解释的很好!

#6


2楼的说法很正确,我在电脑上调试,没有出现这样的情况了。感谢大家关注!

#7


你说的很正常,你没有刷新

#8


你再试一下
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.event.*; 
public class JFrameTest extends JFrame 

private JButton bakButton,downButton, 
exitButton,workButton,pepleButton,countButton; 
private ImageIcon iconbakButton; 
private JFrame jft; 


public JFrameTest() 

// setTitle("考勤管理系统1.0"); 
// setSize(540,407); 
// setLocation(100,100); 
// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
// setVisible(true); 
// setResizable(false); 
showPane(); 

private void showPane() 


Container cp=getContentPane(); 
//iconbakButton=new ImageIcon("d:/Fengmian.png"); //括号里这样写好象不对,具体忘了
cp.setBackground(new Color(210,138,177)); 
cp.setLayout(null); 
bakButton=new JButton(); 
bakButton.setBounds(0,0,358,409); 
//bakButton.setBackground(new Color( 212, 158, 217)); 
bakButton.setIcon(iconbakButton); 
cp.add(bakButton); 

workButton=new JButton("上班统计"); 
workButton.setBounds(378,30,130,45); 
workButton.setBackground(new Color( 212, 158, 217)); 
cp.add(workButton); 

downButton=new JButton("下班统计"); 
downButton.setBounds(378,95,130,45); 
downButton.setBackground(new Color( 212, 158, 217)); 
cp.add(downButton); 

pepleButton=new JButton("员工登计"); 
pepleButton.setBounds(378,165,130,45); 
pepleButton.setBackground(new Color( 212, 158, 217)); 
cp.add(pepleButton); 

countButton=new JButton("统计情况"); 
countButton.setBounds(378,230,130,45); 
countButton.setBackground(new Color( 212, 158, 217)); 
cp.add(countButton); 

exitButton=new JButton("退出系统"); 
exitButton.setBounds(378,295,130,45); 
exitButton.setBackground(new Color( 212, 158, 217)); 
cp.add(exitButton); 



public static void main(String[] args) 

JFrameTest jft=new JFrameTest(); 

jft.setTitle("考勤管理系统1.0"); 
jft.setSize(540,407); 
jft.setLocation(100,100); 
jft.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
jft.setVisible(true); 
jft.setResizable(false); 

}
}
JFrame为轻量级组件,它的界面由程序控制,有时会出现你的情况需要写刷新界面代码,但你的程序我试了一下没有出现此情况

#9


引用 2 楼 pest1999 的回复:
楼主请把如下代码位置坐调换 

setVisible(true); 
setResizable(false); 
showPane(); 

替换成 

setResizable(false); 
showPane(); 
setVisible(true); 

即setVisible(true);  在最后,也就是说最后调用显示,也就是JFrame 的 drawcomptent 的绘窗口方法 


另外:特别提醒楼主,尽量不要把这种对窗口本身初始化的操作放在构造函数中 
再造个…
  呵呵,我们老师刚讲了这个问题的,现在巩固了

#10


好象是先都设置好了,最后才是显示,逻辑问题,学习了。。。