| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 689 人关注过本帖
标题:[求助]swing 问题
只看楼主 加入收藏
linpei
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-10
收藏
 问题点数:0 回复次数:5 
[求助]swing 问题
sDm7GnMM.rar (39.54 KB) [求助]swing 问题


输入 身高 体重
再按BMI 会弹出窗口
为什么窗口只有按扭 没有标签啊
哪为大虾救救我啊
先说句谢谢
搜索更多相关主题的帖子: swing 身高 窗口 
2006-05-17 10:39
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
你这个程序怎么写得这么耗资源啊
我一开始运行就CPU快到100%了

可惜不是你,陪我到最后
2006-05-17 10:47
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
package bim;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* <p>Title: 测试BMI的值</p>
* <p>Description:输入身高 体重 点击BMI按扭,显示BMI的值 并且在图片上连线</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Filename: test.java</p>
* @author 林沛
* @version 1.0
*/
public class test extends JFrame implements ActionListener
{
String str;
Container contentPane=getContentPane();
JPanel content=new JPanel(new BorderLayout());
public JTextPane field;
int x1=115,y1=0,x2=499,y2=0;//直线坐标
JTextField[] field2=new JTextField[3];
public static void main(String[]args){
test gui=new test();
gui.addWindowListener(new WindowAdapter(){public void
windowClosing(WindowEvent e){System.exit(0);}});//定义注册窗口事件 关闭窗口
gui.setVisible(true);//使gui可见
}

public test()
{
setSize(550,680);//设置框的大小
setTitle("test");//设置标题
contentPane.setLayout(new BorderLayout());//使用布局管理器
contentPane.add(content,BorderLayout.CENTER);
JPanel group=new JPanel();
for(int i=0;i<3;i++){
field2[i]=new JTextField();
}
group.setLayout(new GridLayout(3,3));
JLabel label1=new JLabel(" HEIGHT");//定义一个标签
JLabel label2=new JLabel(" WEIGHT");
JLabel label3=new JLabel(" BMI");
JLabel label4=new JLabel("CM ╭══╮");
JLabel label5=new JLabel("KG ╭╯ΘΘ ║ ");
JLabel label6=new JLabel(" ╰⊙═⊙╯。oо○ ");
JButton button=new JButton("BMI",new ImageIcon("003.jpg"));//添加带图片的按钮
button.addActionListener(this); //给BMI按钮添加一个监听事件
JButton button1=new JButton("RESET",new ImageIcon("004.jpg"));
button1.addActionListener(this);
JButton quit=new JButton("QUIT");
quit.addActionListener(this);
group.add(label1);//将标签加到JPanel中
group.add(field2[0]);//将文本框加到JPanel中
group.add(label4);
group.add(label2);
group.add(field2[1]);
group.add(label5);
group.add(label3);
group.add(field2[2]);
group.add(label6);
group.setBackground(Color.ORANGE);//设置背景颜色
contentPane.add(group,BorderLayout.NORTH);
JPanel buttonPanel=new JPanel();
buttonPanel.add(button1);
buttonPanel.add(button);
buttonPanel.add(quit);
buttonPanel.setBackground(Color.PINK);
contentPane.add(buttonPanel,BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e)
{
double a=0,b=0,c;
// 如果点击的是BMI按钮
if(e.getActionCommand().equals("BMI"))
{
a=stringToDouble(field2[1].getText());//获取体重的值
b=stringToDouble(field2[0].getText());//获取身高的值
c=a/(b*b)*10000;//计算BMI的值
field2[2].setText(Double.toString(c));//显示BMI的值
//在图象上获取坐标
if(a<=25&&a>=20)
y1=(int)(527-((int)a-20)*4.8);
else if(a<=30)
y1=(int)(504-((int)a-25)*8.8);
else if(a<=35)
y1=(int)(460-((int)a-30)*8.0);
else if(a<=40)
y1=(int)(420-((int)a-35)*6.4);
else if(a<=45)
y1=(int)(388-((int)a-40)*6.0);
else if(a<=55)
y1=(int)(358-((int)a-45)*4.8);
else if(a<=65)
y1=(int)(308-((int)a-55)*4.2);
else if(a<=75)
y1=(int)(266-((int)a-65)*3.8);
else if(a<=80)
y1=(int)(228-((int)a-75)*3.2);
else if(a<=90)
y1=(int)(212-((int)a-80)*3.0);
else if(a<=110)
y1=(int)(182-((int)a-90)*2.6);
else if(a<=130)
y1=(int)(130-((int)a-110)*2.1);
else if(a<=140)
y1=(int)(88-((int)a-130)*2.0);
else if(a<=150)
y1=(int)(68-((int)a-140)*1.8);
else y1=(int)(50-((int)a-150)*1.2);
if(b>=210&&b<=215)
y2=(int)(518+(b-210)*2.4);
else if(b>=205)
y2=(int)(496+(b-205)*4.4);
else if(b>=195)
y2=(int)(454+(b-195)*4.2);
else if(b>=185)
y2=(int)(410+(b-185)*4.4);
else if(b>=175)
y2=(int)(360+(b-175)*5);
else if(b>=165)
y2=(int)(310+(b-165)*5);
else if(b>=155)
y2=(int)(252+(b-155)*5.8);
else if(b>=145)
y2=(int)(194+(b-145)*5.8);
else if(b>=135)
y2=(int)(134+(b-135)*6.0);
else if(b>=125)
y2=(int)(64+(b-125)*7.0);
else y2=(int)(42+(b-122)*7.3);
//获取坐标到这里结束
jpanel p=new jpanel();//构造一个画图的JPanel
content.removeAll();
content.add(p,BorderLayout.CENTER);
SwingUtilities.updateComponentTreeUI(this);
if(c<=20){
str=new String("太轻了");
new Msg(str);//构造一个弹出窗口
}
else if(c<=25){
str=new String("标准");
new Msg(str);//构造一个弹出窗口
}
else if(c<=30){
str=new String("overweight");
new Msg(str);//构造一个弹出窗口
}
else {
str=new String("obese");
new Msg(str);//构造一个弹出窗口
}
}
// 如果点击的是RESET按钮
else if(e.getActionCommand().equals("RESET"))
{
for(int k=0;k<3;k++)
field2[k].setText("");//设置文本档为空
}
// 如果点击的是QUIT按钮
else if(e.getActionCommand().equals("QUIT"))
{
//弹出一个窗口 确定是否真的离开
int response=JOptionPane.showConfirmDialog(test.this,"really quit?");
if(response==JOptionPane.YES_OPTION)
System.exit(0);
}
}
//将string类型转化为double
private static double stringToDouble(String b)
{
return Double.parseDouble(b.trim());//忽略空格
}
/**
*<br>方法说明:重新画图
*<br>输入参数:Graphics
*<br>返回类型:
*/
class jpanel extends JPanel
{Image image;
public jpanel(){
image = Toolkit.getDefaultToolkit().createImage(this.getClass().getResource("002.jpg"));//获取图像
MediaTracker mt=new MediaTracker(this);
mt.addImage(image,0);//将图片放进缓冲区
try{
mt.waitForID(0);
}
catch(InterruptedException ie){
ie.printStackTrace();
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image,0,0,this);//画图片
g.drawLine(x1,y1,x2,y2);//画直线
//repaint();//强制重新画
}
}
/**
*<br>方法说明:点击BMI按扭时弹出窗口,显示测试者的健康状况
*<br>输入参数:string
*<br>返回类型:
*/
class Msg extends JFrame implements ActionListener
{
public Msg(String s)
{
setSize(100,100);//设置弹出窗口的大小
setLocation(50,50);//设置弹出窗口的位置
setTitle("jieguo");//设置标题
Container content=getContentPane();
content.setLayout(new BorderLayout());
JLabel label=new JLabel(s);//定义标签
content.add(label,BorderLayout.NORTH);
JPanel buttonPane=new JPanel();
JButton ok=new JButton("OKEY");//添加OKEY按扭
ok.addActionListener(this);//给OKEY按扭添加一个监听事件
buttonPane.add(ok);
content.add(buttonPane,BorderLayout.CENTER);
setVisible(true);
}
//关闭弹出的窗口
public void actionPerformed(ActionEvent ev){
this.dispose();
}
}
}
已帮你把文件修改好了
你要记住,很多细节地方要注意,你知道为什么开始运行你的文件时CPU会100%吗?
那是因为你在paintComponent()方法里调用了一个repaint(),你知道repaint()方法是会调用paintComponent()方法的,所以无限循环,导致程序很慢
还有一个问题,你的中间会什么会显示不出来图表,
一,是因为你的MediaTracker没有用好,你只是把图片放在里面,没有把它读入内存
二,是因为你的布局管理器的问题,所以你最好的办法就是直接用一个JPanel来装你要画的图,在每次画图之前把它清空,然后强制更换界面,这样就可以了,你可以运行一下
还有,你的程序还存在一些细节上的小问题,为了使程序更高效,你自己可以看看怎么改

可惜不是你,陪我到最后
2006-05-17 11:00
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
运行的时候,你把package bim;去掉吧

可惜不是你,陪我到最后
2006-05-17 11:01
linpei
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-10
收藏
得分:0 

谢谢 千里冰封
我学java 不久 这是我编的第一个比较大的程序
真的非常感谢

2006-05-17 11:17
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
不用谢,以后有问题可以在论坛上发,但是发之前先搜索一下有没有相似的帖子
还有,太简单的问题还是鼓励自己思考
这样才能有进步嘛,是不是

可惜不是你,陪我到最后
2006-05-17 11:22
快速回复:[求助]swing 问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017711 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved