[疑問]關於多重frame的問題 |
尚未結案
|
Frances3399
一般會員 發表:13 回覆:16 積分:5 註冊:2003-10-27 發送簡訊給我 |
關於多重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 發送簡訊給我 |
引言: //第一個GameStartFrame可以傳參數,那第二個要如何回傳捏?非常不了解.可能要你進一步的說明你的問題吧 不過我一路看下來.好像你一直在new GameFrame.不知道你到底是要操作哪個GrameFrame. Panel可以在paint(Graphics g)事件中把你要的圖片繪成背景.這是最正規的做法 不過...我個人是比較直接習慣用JLabel setIcon之後, 再把他放大到Panel的大小,再以 setBound(-1,-1....)的方式放入JPanel做背景比較快. (真害,好e呣教,教即什麼偷吃步,教歹囝个大小) |
Frances3399
一般會員 發表:13 回覆:16 積分:5 註冊:2003-10-27 發送簡訊給我 |
不好意思,我說地不清楚
小弟的問題有二個,
第一個就是在新開的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 發送簡訊給我 |
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); .... } }類別本身也是變數.別被看的到的東西影響了 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |