swing中如何从一个JFrame跳到另一个JFrame?急!

dong_kai 2008-09-19 03:21:46
我的登陆首页已经做好了,如果帐号和密码验证正确了,我希望进入到另一个有具体操作的页面.但是不知道怎么才能显示另一个页面.我的代码是这样写的:

public class MyFrame extends JFrame implements ActionListener {
private JTextField jtfName;
private JPasswordField jpfPwd;
private JButton jbtSubmit;
private JButton jbtReset;
private String[][] user = { { "xiezhen", "1" }, { "xiaowei", "2" },
{ "zhangmeijie", "3" }, { "wanghui", "4" }, { "zhangyikun", "5" } };
public MyFrame() {
JPanel jpLables = new JPanel();
jpLables.setLayout(new GridLayout(2, 1));
jpLables.add(new JLabel("用户名"));
jpLables.add(new JLabel("密 码"));
jtfName = new JTextField(20);
jtfName.setSize(50, 20);
jpfPwd = new JPasswordField(20);
jpfPwd.setSize(50, 20);
JPanel jpTextFields = new JPanel();
jpTextFields.setLayout(new GridLayout(2, 1));
jpTextFields.add(jtfName);
jpTextFields.add(jpfPwd);

JPanel p1 = new JPanel();
p1.setLayout(new BorderLayout());
p1.add(jpLables, BorderLayout.WEST);
p1.add(jpTextFields, BorderLayout.CENTER);

JPanel p2 = new JPanel();
p2.add(jbtSubmit = new JButton("提交"));
p2.add(jbtReset = new JButton("重置"));

getContentPane().setLayout(null);
p1.setBounds(new Rectangle(300, 250, 300, 80));
getContentPane().add(p1, null);
p2.setBounds(new Rectangle(300, 350, 300, 80));
getContentPane().add(p2, null);

jbtSubmit.addActionListener(this);
jbtReset.addActionListener(this);

}

public static void main(String[] args) {
// 得到屏幕长和宽
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;

// 创建框架
MyFrame frame = new MyFrame();
frame.setTitle("运营管理平台");
frame.setSize(1000, 800);

// 取到中间位置
int x = (screenWidth - frame.getSize().width) / 2;
int y = (screenHeight - frame.getSize().height) / 2;

// 设置frame属性
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(x, y);

}

public void actionPerformed(ActionEvent e) {
if (e.getSource() == jbtSubmit) {
find(jtfName.getText().trim(), new String(jpfPwd.getPassword()));
} else if (e.getSource() == jbtReset) {
reset();
}
}

public void find(String name, String password) {
for (int i = 0; i < user.length; i++) {
if (user[i][0].equals(name) && user[i][1].equals(password)) {
TestPanels newPanel = new TestPanels();
newPanel.validate();
return;
} else if (user[i][0].equals(name)) {
JOptionPane
.showMessageDialog(this, "password not match name",
"For Your Information",
JOptionPane.INFORMATION_MESSAGE);
return;
} else {
JOptionPane
.showMessageDialog(this, "name not fount",
"For Your Information",
JOptionPane.INFORMATION_MESSAGE);
return;
}
}
}

public void reset() {
if (jtfName.getText() != null
|| String.valueOf(jpfPwd.getPassword()) != null) {
jtfName.setText(null);
jpfPwd.setText(null);
}
}
}
...全文
579 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
luorigufeng 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 amethystic 的回复:]
你的TestPanel要是继承JFrame的话就不要用5楼的代码
TestPanel p = TestPanel();
p.setVisible(true);
就行了
[/Quote]

晕,5楼的有问题啊,那算了,当8楼的没说,-_-!
dong_kai 2008-09-19
  • 打赏
  • 举报
回复
哦,这样,好了.真郁闷,非让我用我一点不会的知识做新东西,这样问题就解决了.谢谢大家
luorigufeng 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangbin3961 的回复:]
JFrame frame = new JFrame;
TestPanels newPanel = new TestPanels();
/*frame.add(newPanels); */ frame.getContentPane().add(newPanels);frame.setVisible(true);
[/Quote]

代码太长了,没看,你先试试上面这样改.
amethystic 2008-09-19
  • 打赏
  • 举报
回复
你的TestPanel要是继承JFrame的话就不要用5楼的代码
TestPanel p = TestPanel();
p.setVisible(true);
就行了
dong_kai 2008-09-19
  • 打赏
  • 举报
回复
按照上边的代码写了,但是运行的时候报这样的错误:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at javax.swing.JFrame.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at jframe.MyFrame.find(MyFrame.java:95)
at jframe.MyFrame.actionPerformed(MyFrame.java:84)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
胡须棉花糖 2008-09-19
  • 打赏
  • 举报
回复
JFrame frame = new JFrame;
TestPanels newPanel = new TestPanels();
frame.add(newPanels);
frame.setVisible(true);
amethystic 2008-09-19
  • 打赏
  • 举报
回复
晕,怎么起这么个名字,还有记得加上testPanel.setVisible(true)才能显示
dong_kai 2008-09-19
  • 打赏
  • 举报
回复
TestPanels这个是我自己继承JFrame写的一个类,显示出来就是一个自己的JFrame
amethystic 2008-09-19
  • 打赏
  • 举报
回复
JFrame newFrame = new JFrame();
在JFrame中加JPanel
dong_kai 2008-09-19
  • 打赏
  • 举报
回复
TestPanels newPanel = new TestPanels();
newPanel.validate();
return;
这段是我进入新JFrame的代码,但是操作的结果是进不了新的JFrame,请知道的帮忙看一下,谢谢!
目录 1 课设任务及要求 1 1.1课设任务: 1 1.2创新要求: 1 1.3设计要求 1 2 需求分析 1 2.1 设计背景 1 2.2 开发的技术及功能 2 3 设计思路 2 4 详细设计 4 4.1功能实现: 4 4.4 程序设计过程 5 5 系统调试 5 5.1 运行调试 5 6 参考文献 7 附录 7 1 课设任务及要求 1.1课设任务: 、设计的计算器应用程序可以完成加法、减法、乘法、除法以及取余运算(可以进 行浮点数和负数的运算); 、有求倒数、退格和清零功能。 1.2创新要求: 能进行正切、余弦,以及求平方根、指数 (包括对e)、自然对数运算。 1.3设计要求 设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算。且有小数点、正 负号、求倒数、退格和清零功能。 课程设计可选用Eclipse、JBuilder、NetBeans等作为开发平台以提高开发效率,通 过资料查阅和学习尽可能熟练掌握其一种集成开发环境。 认真按时完成课程设计报告,课程设计报告容包括:设计任务与要求、需求分析、 设计思路、详细设计、运行调试与分析讨论和设计体会与小结六个部分。 2 需求分析 2.1 设计背景 设计这个计算器主要是参考Windows操作系统自带的计算器,由于编者水平和时间的限 制,不能将计算器设计到科学型及其他更复杂的类型,在设计过程还参考了一些其他 的优秀设计。但本计算器除了常用的加减乘除(可以进行浮点和负数运算)这些基本运 算外,还有求余、求倒、退格、清零,甚至还能进行一些复杂科学的运算,比如余弦( cos)、正切(tan)、指数运算(pow)、自然对数运算(log)、求平方根(sqrt)以 及对e的指数运算(exp),并且还能进行连续运算。总体上说来,本计算器设计简单, 代码很少,程序很小,但功能却很强大,这是同类计算器所不具备的。 2.2 开发的技术及功能 本课程设计是要做一个图形界面的计算器,其界面主要是由swing组件的控件构成 。程序实现了计算器的基本功能有:加、减、乘、除基本算术运算(可以进行浮点和负 数运算)和sin、cos、tan等三角函数求值运算,同时能进行指数运算和自然对数运算, 还有求倒数、退格和清零功能。 3 设计思路 、本应用程序继承自框架类(JFrame),容器Container c采用BorderLayout边缘布局,将单行文本框加入到"North"区域,包含各种按钮的面板 JPanel p加入到"Center"区域。包含各种按钮的面板JPanel p 采用3行6列的网格布局,然后将数字按钮和运算符按钮以及控制按钮用一个for循环添加 到面板同时注册按钮事件监听器。如: Button b=new Button(); b.addActionListener(事件监听器); 、事件监听器的事件处理方法void actionPerformed(ActionEvent evt)完成主要的按钮事件的处理。事件处理分以下几种情况:数字按钮事件("0","1" ,"2"…"8","9")、运算符按钮事件("+","-","*","/","%")、正负号按钮事件 ("+/- ")、小数点按钮事件(".")、等号按钮事件("=")、求倒按钮事件("求倒")、退 格按钮事件("退格")、清除按钮事件("C") 、正切(tan)、余弦(cos),以及求平方根(sqrt)、指数 (pow)、对e的指数(exp)、对数运算(log)。 、在事件处理,触发按钮事件时,先判断是或是数字是或是"- /+"是或是".",是的话就将负号"-" 、数字、小数点"."分别写入文本框并存放在sum,然后判断是或是"退格"、"求倒"等 ,是的话进行相应的处理,都不是的话则跳到doOperation()执行运算同时将运算符存放 在preOperater。触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件 还是计算间触发的按钮事件。 、计算器完成的是一个数学表达式,如:3+2,所以可以采用一个数组来存储数字或字 符,如3,+,2分别存储在数组,最后运算时,可以一一取出来进行运算。 、利用按钮设计计算器的各个运算符和操作符,通过按钮的事件处理实现按钮计算功能 。 、利用文本框显示操作数和运算结果。 4 详细设计 4.1功能实现: 加减乘除求余以及指数运算 其他运算 、求平方根 、对数运算 、余弦运算 、正切运算 、e的指数运算 、倒数运算 主要方法说明 public cos(double x) //求x的余弦函数 public tan (double x) //求x的正切函数 public sqrt(double x) //求x的平方根 public log (double x) //求x的自然对数运算

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧