佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1462|回复: 8

Java: 如何做多个 Frame 在一个Application??

[复制链接]
发表于 19-8-2008 10:45 PM | 显示全部楼层 |阅读模式
唔~想问问,Java, 如何才能在一个Application内作多个Frame?
才刚刚学到JFrame..想应用在Assignment上。
我想做一个 Menu frame, 然后User 选了后会 换去 另一个 Frame 的。。。
有没有任何Sample可以参考?
刚刚在Google找了很久找不到。。
请各位帮帮忙~^^"""
回复

使用道具 举报


ADVERTISEMENT

发表于 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,怎么可以那么做呢。。。。
回复

使用道具 举报

Follow Us
 楼主| 发表于 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);
                }
        }
}
回复

使用道具 举报


ADVERTISEMENT

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 24-12-2025 01:46 AM , Processed in 0.152799 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表