2013年9月4日 星期三

[Java] JDialog 與 JFrame 傳值 / 子母視窗 /JDialog 輸入值給JFrame

由於最近在網路上找了許多的資料 每個資料都說得不清不楚不然就是很長一大串

下面給一個絕對能跑的範例 .java 檔   有問題可以提出來   並且關鍵點會用紅色標示

IDE: Eclispse

使用方法:  開啟你的IDE(這邊使用Eclipse) , 新增一個project> 在src 新增一個class > 把文章底下

////代碼開始////  到 ////代碼結束//// 中間的code 全部 "複製貼上"! 就可以執行了  然後再慢慢trace 各代碼的意義   寫得滿簡陋的了  有問題可以留言唷

簡介: 代碼分為三個部分    主要的Main 框架  還有自訂義的Dialog 最後是 自訂義Class


情境:
這邊演示一個 程式碼  一開始先創造一個Frame   Frame上面有一個Button1, Button1 按下去之後會彈出一個子視窗,此子視窗是"自訂義的"可以有一個按鈕 兩個按鈕 好幾個給使用者輸入的區塊都沒有關係  剩下的直接看code 先來看一下執行圖片

1.程式執行 的Frame 正中間有一個Button

 2:按下圖片之後 跳出一個長條狀的Dialog 有一個Button(ok), 還有一個TextField
 3:輸入3 按下OK
 4: 注意圖片紅框 系統print  就是輸入的



////////////////////////////////////////////////////////////////代碼開始////////////////////////////////////////////////////
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;





public class frame extends JFrame{



public static void main(String[] args)
{
frame frame=new frame();
   frame.setVisible(true);
    }

private JPanel contentPane;
private JButton BT;
public frame()
{   //init frame
setTitle("Test");
setBounds(100,100,400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));



BT=new JButton("call dialog");        //set a button
contentPane.add(BT);

//button listener
BT.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Mydialog ID = new Mydialog();       //創建自己定義的Dialog
   ID.setModal(true);        //這個無敵重要 一定要有  意義為  彈出Dialog程序會                                                                       暫停在此 各位可以試試有此行與無此行所取得的                                                                        值有何變化
   ID.setBounds(100,100,200,400);
   testclass tc = ID.getValue();                //呼叫自己創建的Dialog中的一個自訂義function
   System.out.println(tc.getS());
}
});
}

}


class Mydialog extends JDialog{                     //自訂義的Dialog中我只放入兩個東西 按鈕跟TextField想要放入更多東西可以自己設定
private JButton ok=new JButton("OK");
private JTextField TF = new JTextField("    ");
testclass tc;
public Mydialog()
{
JPanel JP=new JPanel();
add(JP);
JP.add(ok);
JP.add(TF);
ok.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
setVisible(false);                                //點了這個按鈕之後就讓Dialog隱藏
tc=new testclass(TF.getText());
dispose();                                          //讓Dialog 關閉
}
});
}

public testclass getValue()
{
setVisible(true);                     //呼叫此Function之後 讓Dialog顯示
return tc;
}
}

class testclass                                     //一個隨便定義的Class  表示 Dialog也可以回傳給Frame 自訂義Class
{
String s;
public testclass(String ins)
{
s=ins;
}
public String getS()
{
return s;
}
}



/////////////////////////////////////////////代碼結束/////////////////////////////////////////

沒有留言:

張貼留言