全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4346
推到 Plurk!
推到 Facebook!

[疑問]關於多重frame的問題

尚未結案
Frances3399
一般會員


發表:13
回覆:16
積分:5
註冊:2003-10-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-17 23:19:40 IP:163.18.xxx.xxx 未訂閱
關於多重frame的問題,其實小弟也不知道這算不算是多重frame 就是說 今天在 Main_Frame 上 有兩個Button, 第一個Button按下去之後 會彈出一個Frame 然後這個frame可以跟Main_Frame "互相" 溝通傳遞訊息。    第二個Button按下去之後 會把Main_Frame 的畫面換成新的Frame 也就是把裡面的所有物件元件砍光光 全部重新設定    這該如何設計阿:    小弟大概寫一下,目前就只有一個Frame有兩個Panel north and center north放兩個Button    center沒放
/* Game.java -- 遊戲 */    import java.awt.*;
import java.awt.event.*;
import javax.swing.*;    class BaseFrame extends JFrame{
        JPanel northPanel, centerPanel;
        BaseFrame(String title){
        // 基本設定
                super(title);
                int width=600;
                int height=480;
                this.setSize(width, height);
                Toolkit theKit=this.getToolkit();
                Dimension sSize=theKit.getScreenSize();
                this.setLocation(sSize.width/2-this.getWidth()/2, sSize.height/2-this.getHeight()/2);
        // 版面管理
                northPanel=new JPanel();
                centerPanel=new JPanel();
                Container contentPanel=this.getContentPane();
                contentPanel.add(northPanel, BorderLayout.NORTH);
                contentPanel.add(centerPanel, BorderLayout.CENTER);
        }
}
        
class GameStartFrame extends BaseFrame{
        JButton theButton01;
        JButton theButton02;
        GameStartFrame(String title){
                super(title);
        // 版面管理
                theButton01 = new JButton("開啟新Frame");
                theButton02 = new JButton("置換舊Main_Frame");
                northPanel.add(theButton01);
                northPanel.add(theButton02);
        //登錄傾聽特定事件的物件
                MyWindowListener windowListener= new MyWindowListener();
                this.addWindowListener(windowListener);                    MyButton01Listener button01Listener = new MyButton01Listener(this);
                theButton01.addActionListener(button01Listener);                    MyButton02Listener button02Listener = new MyButton02Listener();
                theButton02.addActionListener(button02Listener);
        }
}
// 定義傾聽者
class MyWindowListener extends WindowAdapter{
        public void windowClosing(WindowEvent e){
                JOptionPane.showMessageDialog(null, "本視窗即將關閉!");
                System.exit(0);
        }
}
class MyButton01Listener implements ActionListener{
        GameStartFrame mainFrame;
        MyButton01Listener( GameStartFrame aFrame){
                mainFrame = aFrame;
        }
        public void actionPerformed( ActionEvent e) {
                String str = mainFrame.theButton01.getLabel();
                JOptionPane.showMessageDialog(null, str "02");
                GameStartFrame theFrame2=new GameStartFrame("Test2");
                theFrame2.setVisible(true);
                //直接開啟第二個Frame
                //show 出 GameStartFrame 裡面某些變數的值
                //第一個GameStartFrame可以傳參數,那第二個要如何回傳捏?
                //還是說大大們有更好的辦法?
        }
}
class MyButton02Listener implements ActionListener{
        public void actionPerformed( ActionEvent e) {
                JOptionPane.showMessageDialog(null, "置換舊Main_Frame");
                //也就是說把 GameStartFrame 設定成三個Panel
                //North and Center and South
                //North  Panel 有 Label   Button
                //Center Panel 有 TextArea
                //South  Panel 有 TextField
        }
}
class Game{
        public static void main(String[] args){
                GameStartFrame theFrame=new GameStartFrame("Test");
                theFrame.setVisible(true);
        }
}
最後一個問題: 如何設定背景圖片~~ 假設我有一張640*480大小的jpeg圖片 要放在contentPanel還是frame阿 因為上面一定有panel and 物件 這樣要如何設定以及語法是什麼才可以讓 背景圖片顯現呢? 大大們 拜託了 發表人 - Frances3399 於 2005/07/18 00:57:07
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-18 09:16:50 IP:220.132.xxx.xxx 未訂閱
引言: //第一個GameStartFrame可以傳參數,那第二個要如何回傳捏?
非常不了解.可能要你進一步的說明你的問題吧 不過我一路看下來.好像你一直在new GameFrame.不知道你到底是要操作哪個GrameFrame. Panel可以在paint(Graphics g)事件中把你要的圖片繪成背景.這是最正規的做法 不過...我個人是比較直接習慣用JLabel setIcon之後, 再把他放大到Panel的大小,再以 setBound(-1,-1....)的方式放入JPanel做背景比較快. (真害,好e呣教,教即什麼偷吃步,教歹囝个大小)
Frances3399
一般會員


發表:13
回覆:16
積分:5
註冊:2003-10-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-18 16:14:12 IP:163.18.xxx.xxx 未訂閱
不好意思,我說地不清楚 小弟的問題有二個, 第一個就是在新開的Frame 如何告知程式起始的Frame 她的狀態 以及關閉的時候只關閉它就好,不影響起始的Frame 有就是起始Frame 擁有 新開的Frame所有權限 新開的Frame只能回傳訊息(狀態)而已。    第二個 起始Frame三個Panel中的物件 我想全部替換,也就是舊的全部清掉(記憶體也放掉) 然後重新設定    額外的想法:可以連Panel也全部清掉 重新設定嗎?    原始碼:
/* Game.java -- 遊戲 */    import java.awt.*;
import java.awt.event.*;
import javax.swing.*;    class BaseFrame extends JFrame{
        JPanel northPanel, centerPanel, southPanel;
        BaseFrame(String title){
        // 基本設定
                super(title);
                int width=640;
                int height=480;
                this.setSize(width, height);
                Toolkit theKit=this.getToolkit();
                Dimension sSize=theKit.getScreenSize();
                this.setLocation(sSize.width/2-this.getWidth()/2, sSize.height/2-this.getHeight()/2);
        // 版面管理
                northPanel=new JPanel();
                centerPanel=new JPanel();
                southPanel=new JPanel();
                Container contentPanel=this.getContentPane();
                contentPanel.add(northPanel, BorderLayout.NORTH);
                contentPanel.add(centerPanel, BorderLayout.CENTER);
                contentPanel.add(southPanel, BorderLayout.SOUTH);
        }
}
        
class GameStartFrame extends BaseFrame{
        JButton theButton01;                JButton theButton02;
        JButton theButton03;                JButton theButton04;
        JLabel welcome;
        GameStartFrame(String title){
                super(title);
        // 版面管理
                theButton01 = new JButton("開新視窗");
                theButton02 = new JButton("置換視窗");
                theButton03 = new JButton("製作人員");
                theButton04 = new JButton("結束遊戲");
                welcome = new JLabel("");
                welcome.setIcon (new ImageIcon("welcome.JPG"));
                centerPanel.setLayout(new GridLayout(1,0));
                northPanel.add(welcome);
                centerPanel.setLayout(new SpringLayout());
                centerPanel.add(theButton01, new SpringLayout.Constraints(Spring.constant(270), Spring.constant(20) ));
                centerPanel.add(theButton02, new SpringLayout.Constraints(Spring.constant(270), Spring.constant(70) ));
                centerPanel.add(theButton03, new SpringLayout.Constraints(Spring.constant(270), Spring.constant(120) ));
                centerPanel.add(theButton04, new SpringLayout.Constraints(Spring.constant(270), Spring.constant(170) ));
        //登錄傾聽特定事件的物件
                MyWindowListener windowListener= new MyWindowListener();
                this.addWindowListener(windowListener);                    MyButton01Listener button01Listener = new MyButton01Listener(this);
                theButton01.addActionListener(button01Listener);                    MyButton02Listener button02Listener = new MyButton02Listener();
                theButton02.addActionListener(button02Listener);                    MyButton03Listener button03Listener = new MyButton03Listener();
                theButton03.addActionListener(button03Listener);                    MyButton04Listener button04Listener = new MyButton04Listener();
                theButton04.addActionListener(button04Listener);
        }
}
// 定義傾聽者
class MyWindowListener extends WindowAdapter{
        public void windowClosing(WindowEvent e){
                JOptionPane.showMessageDialog(null, "本視窗即將關閉!");
                System.exit(0);
        }
}
class MyButton01Listener implements ActionListener{
        GameStartFrame mainFrame;
        MyButton01Listener( GameStartFrame aFrame){
                mainFrame = aFrame;
        }
        public void actionPerformed( ActionEvent e) {
                String str = mainFrame.theButton01.getLabel();
                JOptionPane.showMessageDialog(null, str "02");
                //開啟新的Frame
                //如何才可以讓在第二個Frame被關閉時通知GameStartFrame說他已關閉
                //然後System.exit(0) 是把 Applet關閉,有什麼語法是只讓新開的Frame關閉而已
        }
}
class MyButton02Listener implements ActionListener{
        public void actionPerformed( ActionEvent e) {
                JOptionPane.showMessageDialog(null, "置換視窗");
                //也就是說把 GameStartFrame 原本的三個Panel
                //North and Center and South
                //裡面所有物件都消失,然後重新設定物件內容。
        }
}
class MyButton03Listener implements ActionListener{
        public void actionPerformed( ActionEvent e) {
                String str = "作者:Doraemon\n音樂:Doraemon\n音效:Doraemon\n美工:Doraemon\n";
                JOptionPane.showMessageDialog(null, str);
        }
}
class MyButton04Listener implements ActionListener{
        public void actionPerformed( ActionEvent e) {
                JOptionPane.showMessageDialog(null, "遊戲結束");
                System.exit(0);
        }
}
class Game{
        public static void main(String[] args){
                GameStartFrame theFrame=new GameStartFrame("遊戲選單");
                theFrame.setVisible(true);
        }
}
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-18 17:49:29 IP:220.132.xxx.xxx 未訂閱
JFrame只是物件外在的皮相肉身罷了.你可以用一個class去操作無限個你產生的jframe. 以你的例子
class Game extends JFame{
  GrameFrame mainFrame=null; <----以這個做為整體變數
  pubic Game(){
    super();
   //button 1 add listener
   //button 2 addlistener...
   ...
   ...
    mainFrame=new GameFrame();
    this.getContainPanl().add(mainFrame);
    
  }
  
  public int main(String arg[],int argCount){
    Game game=new Game();
    game.repain();
    game.validate();    
    
  
  }
  public void clickButtonOne(){
    //button one click  對mainFrame的操作
    mainFrame.getContainPane().removeAll();
    mainFrame.getContainPane().setLayOutManager(....);
    JPanel tmpPnl=new JPanel();
    mainFrame.getContainPane().add(tmpPnl);
    ....
  }
  public void clickButtonTwo(){
    //button Two click  對mainFrame的操作
    mainFrame.getContainPane().removeAll();
    mainFrame.getContainPane().setLayOutManager(....);
    JPanel tmpPnl=new JPanel();
    mainFrame.getContainPane().add(tmpPnl);
    ....
  }
}
類別本身也是變數.別被看的到的東西影響了
系統時間:2024-05-03 16:35:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!