|
查看: 1462|回复: 8
|
Java: 如何做多个 Frame 在一个Application??
[复制链接]
|
|
|
唔~想问问,Java, 如何才能在一个Application内作多个Frame?
才刚刚学到JFrame..想应用在Assignment上。
我想做一个 Menu frame, 然后User 选了后会 换去 另一个 Frame 的。。。
有没有任何Sample可以参考?
刚刚在Google找了很久找不到。。
请各位帮帮忙~^^""" |
|
|
|
|
|
|
|
|
|
|
发表于 20-8-2008 09:56 AM
|
显示全部楼层
回复 1# xFreaKx 的帖子
最簡單的方法就是選了之後就把memu frame藏起來
開個新的frame咯
或者是你要用internal frame也可以的 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 20-8-2008 02:47 PM
|
显示全部楼层
internal frame 很复杂,而且还没学到,所以不打算用。
至于说开新的Frame,那么需要用新的Class 吗?还是同一个Class 然后写另一个Method?
请问有没有类似的Sample Code 可以参考参考?^^"" |
|
|
|
|
|
|
|
|
|
|
发表于 20-8-2008 07:03 PM
|
显示全部楼层
Frame 是不是指toplevel window 。
是的话, 只要 instantiate 多个 instance 就可以了,不用新的class。。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 20-8-2008 08:54 PM
|
显示全部楼层
那么如何hide frame?
我一直得到这个Error..
non-static method setVisible(boolean) cannot be referenced from a static context
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MenuFrame extends JFrame{
JPanel p1 = new JPanel(new BorderLayout());
JPanel p2 = new JPanel();
JPanel p3 = new JPanel(new GridLayout(4,1));
JPanel p4 = new JPanel(new GridLayout(4,1));
JRadioButton jrbStudent = new JRadioButton("Student");
JRadioButton jrbLecturer = new JRadioButton("Lecturer");
JRadioButton jrbMember = new JRadioButton("Member");
JButton jbtnAdd = new JButton("Add");
JButton jbtnDisplay = new JButton("Display");
JButton jbtnExit = new JButton("Exit");
ButtonGroup bg = new ButtonGroup();
public MenuFrame(){
bg.add(jrbStudent);
bg.add(jrbLecturer);
bg.add(jrbMember);
p3.add(jrbStudent);
p3.add(jrbLecturer);
p3.add(jrbMember);
p4.add(new JLabel("Type: "));
p1.add(new JLabel("Computer Science Society"),BorderLayout.NORTH);
p1.add(p4,BorderLayout.WEST);
p1.add(p3,BorderLayout.CENTER);
p2.add(jbtnAdd);
p2.add(jbtnDisplay);
p2.add(jbtnExit);
add(p1,BorderLayout.CENTER);
add(p2,BorderLayout.SOUTH);
ActionListener actAdd = new BtnListener();
jbtnAdd.addActionListener(actAdd);
}
class BtnListener implements ActionListener{
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jbtnAdd)
{
if(jrbStudent.isSelected())
{
MenuFrame.setVisible(false); <-------------------------这里
StudentFrame frame1 = new StudentFrame();
frame1.setTitle("Menu");
frame1.setSize(300,500);
frame1.setLocationRelativeTo(null);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setVisible(true);
}
else if(jrbMember.isSelected())
{
MemberFrame frame3 = new MemberFrame();
frame3.setTitle("Menu");
frame3.setSize(300,500);
frame3.setLocationRelativeTo(null);
frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame3.setVisible(true);
}
else if(jrbLecturer.isSelected())
{
LecturerFrame frame2 = new LecturerFrame();
frame2.setTitle("Menu");
frame2.setSize(300,600);
frame2.setLocationRelativeTo(null);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setVisible(true);
}
}
}
}
}
[ 本帖最后由 xFreaKx 于 20-8-2008 08:55 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 21-8-2008 03:13 PM
|
显示全部楼层
你需要好好的了解一下oo 。
你那个又不是 instance,怎么可以那么做呢。。。。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 21-8-2008 05:45 PM
|
显示全部楼层
哦哦。。那么如何从sub class中Hide super class 的Frame 哦?
我想做的Effect 是Press了Button, superClass的Frame hide,然后subclass 的 Frame show. 当dispose subclass Frame时,superClass Frame又show出来.
哎哎~算了,没关系了,反正我的 功课 大致上 也完成了。
呵呵~ |
|
|
|
|
|
|
|
|
|
|
发表于 22-8-2008 12:32 AM
|
显示全部楼层
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MultiplePanel extends JFrame implements ActionListener {
private JButton button1 = null;
private JButton button2 = null;
private JButton button3 = null;
private JPanel panel1 = null;
private JPanel panel2 = null;
private JPanel panel3 = null;
public MultiplePanel() {
this.setSize(400, 400);
this.setLocation(400, 400);
this.setLayout(new BorderLayout());
JPanel mainPanel = new JPanel();
mainPanel.add(getPanel1());
mainPanel.add(getPanel2());
mainPanel.add(getPanel3());
this.add(mainPanel,BorderLayout.NORTH);
JPanel buttonPanel = new JPanel();
buttonPanel.add(getButton1());
buttonPanel.add(getButton2());
buttonPanel.add(getButton3());
this.add(buttonPanel,BorderLayout.CENTER);
this.setVisible(true);
}
private JPanel getPanel1() {
panel1 = new JPanel();
panel1.setBorder(BorderFactory.createTitledBorder("Frame 1"));
panel1.setLayout(new GridLayout(9,1,10,10));
panel1.add(new JLabel("Sample 1.1...."));
panel1.add(new JLabel("Sample 1.2...."));
// add wat ever u want
return panel1;
}
private JPanel getPanel2() {
panel2 = new JPanel();
panel2.setBorder(BorderFactory.createTitledBorder("Frame 2"));
panel2.setLayout(new GridLayout(9,1,10,10));
panel2.add(new JLabel("Sample 2.1...."));
panel2.add(new JLabel("Sample 2.2...."));
// add wat ever u want
panel2.setVisible(false);
return panel2;
}
private JPanel getPanel3() {
panel3 = new JPanel();
panel3.setBorder(BorderFactory.createTitledBorder("Frame 3"));
panel3.setLayout(new GridLayout(9,1,10,10));
panel3.add(new JLabel("Sample 3.1...."));
panel3.add(new JLabel("Sample 3.2...."));
// add wat ever u want
panel3.setVisible(false);
return panel3;
}
public JButton getButton1() {
if (button1 == null) {
button1 = new JButton("Display frame 1");
button1.addActionListener(this);
}
return button1;
}
public JButton getButton2() {
if (button2 == null) {
button2 = new JButton("Display frame 2");
button2.addActionListener(this);
}
return button2;
}
public JButton getButton3() {
if (button3 == null) {
button3 = new JButton("Display frame 3");
button3.addActionListener(this);
}
return button3;
}
public static void main(String[] args) {
new MultiplePanel();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(button1)) {
panel2.setVisible(false);
panel3.setVisible(false);
panel1.setVisible(true);
} else if (e.getSource().equals(button2)) {
panel1.setVisible(false);
panel3.setVisible(false);
panel2.setVisible(true);
} else if (e.getSource().equals(button3)) {
panel1.setVisible(false);
panel2.setVisible(false);
panel3.setVisible(true);
}
}
} |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 22-8-2008 03:10 PM
|
显示全部楼层
哦哦。。原来还有酱的方法~
从来没想过用Multiple Panel来取代Multiple Frame...
感谢感谢 |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|