欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
文件選擇對話(huà)框,顏色選擇對話(huà)框,分隔線(xiàn)的使用與介紹 - JAVA記事 - JavaEye技...

文件選擇對話(huà)框,顏色選擇對話(huà)框,分隔線(xiàn)的使用與介紹

關(guān)鍵字: swing

 文件選擇對話(huà)框,顏色選擇對話(huà)框,分隔線(xiàn)的使用與介紹
++ Swing程序設計
++ JFileChoose,JColorChooer,JSeparator
 文件選擇對話(huà)框,顏色選擇對話(huà)框,分隔線(xiàn)的使用與介紹.
13-1:使用JFileChooser組件.
    JFileChooser的類(lèi)層次結構圖:
    java.lang.Object
     --java.awt.Component
       --java.awt.Container
        --javax.swing.JComponent
         --javax.swing.JFileChooser
  當我們在處理窗口上的一些操作,特別是文本處理的部份,例如一個(gè)文本編輯器上打了一段文字,我們可能希望將此段文字存儲起來(lái)
,供以后方便使用,此時(shí)系統應當提供一個(gè)存儲文件的對話(huà)框,將此段文字存到一個(gè)自定義或內定的文件名中.同樣,當我們要叫出某個(gè)
文件時(shí),系統也應當提供打開(kāi)文件的功能,讓我們選擇所欲打開(kāi)的文件.在java中這些操作都可以由JFileChoose組件來(lái)達成.這個(gè)組件
提供了打開(kāi)文件存盤(pán)的窗口功能,也提供了顯示特定類(lèi)型文件圖標的功能,亦能針對某些文件類(lèi)型做過(guò)濾的操作.如果你的系統需要對
某些文件或文件做操作,JFileChooser組件可以讓你輕松地做出漂亮的用戶(hù)界面.在這邊讀者要注意的是,JFileChooser本身不提供讀
文件或存盤(pán)的功能,這些功能必須你自行實(shí)作.事實(shí)上,JFileChooser本身只是一個(gè)對話(huà)框模型,它也是依附在JDialog的結構上,因此
它只是一個(gè)針對文件操作的對話(huà)框,當然本身也就不會(huì )有讀文件或存盤(pán)的功能!以下我們來(lái)看JFileChooser的構造函數:

JFileChooser構造函數:
JFileChooser():建立一個(gè)JFileChooser對象,默認的文件對話(huà)框路徑是用戶(hù)的家目錄(Home Directory),例如在windows 2000中的
               Administrator的家目錄是在C:\Documents and Settings\Administrator中.
JFileChooser(File currentDirectory):建立一個(gè)JFileChooser對象,并以File所在位置文件為文件對話(huà)框的打開(kāi)路徑.
JFileChooser(File currentDirectory,FileSystemView fsv):建立一個(gè)JFileChooser對象,以File所在位置為文件對話(huà)框的打開(kāi)路
                            徑并設置文件圖標查看方式.
JFileChooser(FileSystemView fsv):建立一個(gè)JFileChooser對象,并設置文件圖標查看方式.
JFileChooser(String currentDirectoryPath):建立一個(gè)JFileChooser對象,并設置文件對話(huà)框的打開(kāi)路徑.
JFileChooser(String currentDirectoryPath,FileSystemView fsv): 建立一個(gè)JFileChooser對象,并設置文件對話(huà)框的打開(kāi)路徑與
                          文件圖標查看方式.

13-1-1:建立一個(gè)簡(jiǎn)單的JFileChooser對話(huà)框:
    介紹完JFileChooser構造函數后,我們來(lái)實(shí)作一個(gè)簡(jiǎn)單的范例.這個(gè)范例可以讓用戶(hù)在JTextArea上輸入文字,輸入完后按下"存儲
文件"按鈕就可以打開(kāi)JFileChooser存儲文件對話(huà)框,用戶(hù)可以輸入欲存儲的文件名,按下"Save"按鈕就可以存儲文件.若用戶(hù)要打開(kāi)
某個(gè)文件內容,只需要按下"打開(kāi)文件"按鈕,就會(huì )出現JFileChooser打開(kāi)文件對話(huà)框,用戶(hù)選擇好所欲打開(kāi)的文件就可以將數據讀入
JTextArea中.
    在這個(gè)范例中,我們使用JFileChooser的showOpenDialog()或showSaveDialog()方法來(lái)打開(kāi)文件對話(huà)框,此兩個(gè)方法在用戶(hù)按下
按鈕或關(guān)閉對話(huà)框時(shí)會(huì )返回一個(gè)整數值,這個(gè)整數值的類(lèi)型有3種,分別是:
   JFileChooser.CANCEL_OPTION:表示用戶(hù)按下取消按鈕.
   JFileChooser.APPROVE_OPTION:表示用戶(hù)按下確定按鈕.
   JFileChooser.ERROR_OPEION:表示有錯誤產(chǎn)生或是對話(huà)框不正常關(guān)閉.
   利用這3個(gè)整數值我們就能判斷用戶(hù)到底在對話(huà)框中做了什么操作,并加以處理,例如當用戶(hù)選擇了文件并按下確定鍵后,我們就可
以利用getSelectedFile()方法取得文件對象,利用這個(gè)文件對象我們就能夠取得文件名稱(chēng)(getName())與文件路徑(getPath());

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class FileChooserDemo1 implements ActionListener
{
    JFrame f = null;
    JLabel label = null;
    JTextArea textarea = null;
    JFileChooser fileChooser = null;

    public FileChooserDemo1()
    {
        f = new JFrame("FileChooser Example");
        Container contentPane = f.getContentPane();
        textarea = new JTextArea();
        JScrollPane scrollPane = new JScrollPane(textarea);
        scrollPane.setPreferredSize(new Dimension(350,300));
        
        JPanel panel = new JPanel();
        JButton b1 = new JButton("新建文件");
        b1.addActionListener(this);
        JButton b2 = new JButton("存儲文件");
        b2.addActionListener(this);
        panel.add(b1);
        panel.add(b2);
        
        label = new JLabel(" ",JLabel.CENTER);
        
        fileChooser = new JFileChooser("D:\\");//建立一個(gè)FileChooser對象,并指定D:的目錄為默認文件對話(huà)框路徑.
        
        contentPane.add(label,BorderLayout.NORTH);
        contentPane.add(scrollPane,BorderLayout.CENTER);
        contentPane.add(panel,BorderLayout.SOUTH);
        
        f.pack();
        f.setVisible(true);
        
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    
    public static void main(String[] args) {
        new FileChooserDemo1();
    }
    
    public void actionPerformed(ActionEvent e)
    {
        File file = null;
        int result;
        /*當用戶(hù)按下"打開(kāi)文件"按鈕時(shí),JFileChooser的showOpenDialog()方法會(huì )輸出文件對話(huà)框,并利用
         *setApproveButtonText()方法取代按鈕上"Open"文字;以setDialogTitle()方法設置打開(kāi)文件對話(huà)框Title名稱(chēng).
         *當使用選擇完后,會(huì )將選擇結果存到result變量中.
         */
        if (e.getActionCommand().equals("新建文件"))
        {
            fileChooser.setApproveButtonText("確定");
            fileChooser.setDialogTitle("打開(kāi)文件");
            result = fileChooser.showOpenDialog(f);
            
            textarea.setText("");

            /*當用戶(hù)按下打開(kāi)文件對話(huà)框的"確定"鈕后,我們就可以利用getSelectedFile()方法取得文件對象.若是用戶(hù)按下打
             *開(kāi)文件對話(huà)框的"Cancel"鈕,則將在label上顯示"你沒(méi)有選擇任何文件"字樣.
             */
            if (result == JFileChooser.APPROVE_OPTION)
            {
                file = fileChooser.getSelectedFile();
                label.setText("您選擇打開(kāi)的文件名稱(chēng)為:"+file.getName());
            }
            else if(result == JFileChooser.CANCEL_OPTION)
            {
                label.setText("您沒(méi)有選擇任何文件");
            }
            
            FileInputStream fileInStream = null;
            
            if(file != null)
            {
                try{
                    //利用FileInputStream將文件內容放入此數據流中以便讀取.
                    fileInStream = new FileInputStream(file);
                }catch(FileNotFoundException fe){
                    label.setText("File Not Found");
                    return;
                }
                
                int readbyte;
        
                try{
                    //以read()方法讀取FileInputStream對象內容,當返回值為-1時(shí)代表讀完此數據流.將所讀到的字符顯示
                    //在textarea中.
                    while( (readbyte = fileInStream.read()) != -1)
                    {
                        textarea.append(String.valueOf((char)readbyte));
                    }
                }catch(IOException ioe){
                    label.setText("讀取文件錯誤");
                }
                finally{//回收FileInputStream對象,避免資源的浪費.
                    try{
                        if(fileInStream != null)
                            fileInStream.close();
                    }catch(IOException ioe2){}
                }
            }
        }
        //實(shí)作寫(xiě)入文件的功能.
        if (e.getActionCommand().equals("存儲文件"))
        {
            result = fileChooser.showSaveDialog(f);
            file = null;
            String fileName;
            //當用戶(hù)沒(méi)有選擇文件,而是自己鍵入文件名稱(chēng)時(shí),系統會(huì )自動(dòng)以此文件名建立新文件.
            if (result == JFileChooser.APPROVE_OPTION)
            {
                file = fileChooser.getSelectedFile();
                label.setText("您選擇存儲的文件名稱(chēng)為:"+file.getName());
            }
            else if(result == JFileChooser.CANCEL_OPTION)
            {
                label.setText("您沒(méi)有選擇任何文件");
            }
            //寫(xiě)入文件我們使用FileOutputStream,在這個(gè)范例中,我們寫(xiě)入文件的方式是將之前內容清除并重新寫(xiě)入.若你想把
            //新增的內容加在原有的文件內容后面,你可以使用FileOutputStream(String name,Boolean append)這個(gè)構造函數.
            FileOutputStream fileOutStream = null;
            
            if(file != null)
            {
                try{
                    fileOutStream = new FileOutputStream(file);
                }catch(FileNotFoundException fe){
                    label.setText("File Not Found");
                    return;
                }

                String content = textarea.getText();
                
                try{
                    fileOutStream.write(content.getBytes());
                }catch(IOException ioe){
                    label.setText("寫(xiě)入文件錯誤");
                }
                finally{
                    try{
                        if(fileOutStream != null)
                            fileOutStream.close();
                    }catch(IOException ioe2){}
                }
            }
        }
    }
}

13-1-2:建立可選擇文件類(lèi)型的JFileChooser對話(huà)框:
    當你專(zhuān)為某種文件類(lèi)型設計一套軟件時(shí),為了用戶(hù)打開(kāi)文件存盤(pán)方便,我們通常會(huì )在文件對話(huà)框中過(guò)濾掉無(wú)關(guān)的文件類(lèi)型,讓用戶(hù)
很快速選擇出想要的文件數據.例如在Word軟件中,當我們按下"另存新文件"選項時(shí),所出現的文件對話(huà)框將會(huì )以".doc"擴展名當作默
認的文件存儲類(lèi)型.
    如果你所設計的軟件可以支持多種類(lèi)型的文件操作,你應該設計讓用戶(hù)可以選擇使用哪一種類(lèi)型的文件.
    若你想在java的文件對話(huà)框中做到這樣的功能,你必須實(shí)現FileFilter這個(gè)抽象類(lèi).此抽象類(lèi)里面定義了兩個(gè)空的方法,分別是
accept(File f)與getDescripton().當目錄里的文件與設置的文件類(lèi)型相符時(shí),accept()方法就會(huì )返回true,并將此文件顯示在文件
對話(huà)框中.而getDescription()方法則是對此文件類(lèi)型的描述,可由程序設計者自定義,如"*.java"等等.要設置選擇文件類(lèi)型對話(huà)框
你可以使用JFileChooser的addChoosableFileFilter()方法或是setFileFilter()方法.下面這個(gè)例子我們實(shí)現FileFilter的功能,讓
用戶(hù)打開(kāi)文件時(shí)可以選擇顯示所有文件,或是*.java文件,亦或是*.class文件.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.File;//由于我們在程序中要使用到File與FileFilter對象,因此要import File與FileFilter這兩個(gè)類(lèi).
import javax.swing.filechooser.FileFilter;

public class FileFilterDemo implements ActionListener{
  JFrame f=null;
  JLabel label=null;
  JFileChooser fileChooser=null;
  public FileFilterDemo(){
     f=new JFrame("FileFilterDemo");
     Container contentPane=f.getContentPane();
     
     JButton b=new JButton("打開(kāi)文件");
     b.addActionListener(this);
     
     label=new JLabel(" ",JLabel.CENTER);
     label.setPreferredSize(new Dimension(150,30));
     contentPane.add(label,BorderLayout.CENTER);
     contentPane.add(b,BorderLayout.SOUTH);
     
     f.pack();
     f.setVisible(true);
     f.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        System.exit(0);
      }      
     });
  }
  public static void main(String[] args){
     new FileFilterDemo();
  }
  //處理用戶(hù)按下"打開(kāi)舊文件"按鈕事件.
  public void actionPerformed(ActionEvent e){
    fileChooser=new JFileChooser("C:\\winnt");//以c:\\winnt為打開(kāi)文件為對話(huà)框的默認路徑
      //利用addChoosableFileFilter()方法加入欲過(guò)濾的文件類(lèi)型,使用addChoosableFileFilter()可以加入多種文件類(lèi)型,
      //若你只需要過(guò)濾出一種文件類(lèi)型,可使用setFileFilter()方法.
    fileChooser.addChoosableFileFilter(new JAVAFileFilter("class"));
    fileChooser.addChoosableFileFilter(new JAVAFileFilter("java"));
    int result=fileChooser.showOpenDialog(f);
    if (result==JFileChooser.APPROVE_OPTION){
      File file=fileChooser.getSelectedFile();
      label.setText("你選擇了:"+file.getName()+"文件");       
    }else if (result==fileChooser.CANCEL_OPTION){
     label.setText("你沒(méi)有選取文件");
    }
  }
}
//以JAVAFileFilter類(lèi)繼承FileFilter抽象類(lèi),并實(shí)現accept()與getDescription()方法.
class JAVAFileFilter extends FileFilter{
    String ext;
    public JAVAFileFilter(String ext){
        this.ext=ext;
    }
   /*在accept()方法中,當程序所抓到的是一個(gè)目錄而不是文件時(shí),我們返回true值,表示將此目錄顯示出來(lái).*/
    public boolean accept(File file){
      if (file.isDirectory()){
         return true;
      }
      String fileName=file.getName();
      int index=fileName.lastIndexOf('.');
      if (index>0 && index<fileName.length()-1){
         //表示文件名稱(chēng)不為".xxx"現"xxx."之類(lèi)型
         String extension=fileName.substring(index+1).toLowerCase();
          //若所抓到的文件擴展名等于我們所設置要顯示的擴展名(即變量ext值),則返回true,表示將此文件顯示出來(lái),否則返回
          //true.
         if (extension.equals(ext))
           return true;
      }
      return false;
    }
    //實(shí)現getDescription()方法,返回描述文件的說(shuō)明字符串!!!
    public String getDescription(){
     if (ext.equals("java"))
         return "JAVA Source File(*.java)";
     if (ext.equals("class"))
         return "JAVA Class File(*.class)";
     return "";
    }
}

13-1-3:建立具有特殊文件類(lèi)型的圖標的JFileChooser:
     在上個(gè)范例中,讀者可以發(fā)現若你選擇顯示所有文件時(shí),文件類(lèi)型圖標不會(huì )因擴展名的不同而有所區別,這樣可能造成用戶(hù)混淆
或是使用上的不方便.
     要解決這個(gè)問(wèn)題,你必須再實(shí)現FileView這個(gè)抽象類(lèi),此抽象類(lèi)定義了5個(gè)空的方法,如下表所示:
FileView方法:
String    getDescription(File f):返回對這個(gè)文件的描述,如這是一張風(fēng)景圖片等.
Icon      getIcon(File f):返回文件Icon圖標.
String    getName(File f):返回文件名.
String    getTypeDescription(File f):返回文件類(lèi)型描述,如:"JAVA Source File"等等.
Boolean   isTraversable(File f):返回目錄是否可瀏覽.
    當你實(shí)現好這5個(gè)方法后,就可以利用JFileChooser的setFileView()方法來(lái)設置文件類(lèi)型圖標.我們來(lái)看下面的范例:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.filechooser.*;

public class FileIconFilterDemo implements ActionListener
{
    JFrame f = null;
    JLabel label = null;
    JFileChooser fileChooser = null;
    
    public FileIconFilterDemo()
    {
        f = new JFrame("FileIconFilter Demo");
        Container contentPane = f.getContentPane();
        
        JButton b = new JButton("打開(kāi)文件");
        b.addActionListener(this);
        
        label = new JLabel(" ",JLabel.CENTER);
        label.setPreferredSize(new Dimension(150,30));
        contentPane.add(label,BorderLayout.CENTER);
        contentPane.add(b,BorderLayout.SOUTH);
        
        f.pack();
        f.setVisible(true);
        
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }    
    
    public static void main(String[] args)
    {
        new FileIconFilterDemo();
    }
    
    public void actionPerformed(ActionEvent e)
    {
        fileChooser = new JFileChooser("c:\\winnt");
        fileChooser.addChoosableFileFilter(new JAVAFileFilter("class"));
        fileChooser.addChoosableFileFilter(new JAVAFileFilter("java"));
        fileChooser.setFileView(new FileIcon());
        int result = fileChooser.showOpenDialog(f);
        if(result == JFileChooser.APPROVE_OPTION)
        {
            File file = fileChooser.getSelectedFile();
            label.setText("您選擇了:"+file.getName()+"文件");
        }else if (result == fileChooser.CANCEL_OPTION){
            label.setText("您沒(méi)有選擇任何文件");
        }
    }
}

class JAVAFileFilter extends FileFilter
{
    String ext;
    
    public JAVAFileFilter(String ext)
    {
        this.ext = ext;
    }
    
    public boolean accept(File file)
    {
        if (file.isDirectory())
            return true;
        
        String fileName = file.getName();
        int index = fileName.lastIndexOf('.');

        if (index > 0 && index < fileName.length()-1) {
            String extension = fileName.substring(index+1).toLowerCase();
            if (extension.equals(ext))
                return true;
        }
        return false;
    }
    
    public String getDescription(){
        if (ext.equals("java"))
            return "JAVA Source File (*.java)";
        if (ext.equals("class"))
            return "JAVA Class File (*.class)";
        return "";
    }
}

class FileIcon extends FileView
{
    public String getName(File f) {
    return null; //返回值為null的話(huà),java look and feel功能會(huì )處理掉這個(gè)項目,并取得相關(guān)值來(lái)加以設置.
                     //一般而言可以使用f.getName()當返回值.
    }

    public String getDescription(File f) {
    return null; //返回值為null的話(huà),java look and feel功能會(huì )處理掉這個(gè)項目,并取得相關(guān)值來(lái)加以設置.
                 //你也可以自己設置對此圖片的描素,如這是一張風(fēng)景圖片等等.
    }

    public String getTypeDescription(File f)
    {
        String extension = getExtensionName(f);
        if(extension.equals("java"))
            return "JAVA Source File";
        if(extension.equals("class"))
            return "JAVA Class File";
        return "";
    }

    public Icon getIcon(File f)
    {
        String extension = getExtensionName(f);
        if(extension.equals("java"))
            return new ImageIcon("java.gif");
        if(extension.equals("class"))
            return new ImageIcon("class.gif");
        return null;
}

    public Boolean isTraversable(File f) {
     return null; //返回值為null的話(huà),java look and feel功能會(huì )處理掉這個(gè)項目,并取得相關(guān)值來(lái)加以設置.
                     //若佻不希望某個(gè)目錄被瀏覽,則返回值可以設為Boolean.FALSE.
    }
    
    public String getExtensionName(File f)//在FileIcon類(lèi)中我們增加一個(gè)getExtensionName()方法,用來(lái)返回文件的擴展名
    {                                      //名稱(chēng).
      String extension ="";
    String fileName = f.getName();
        int index = fileName.lastIndexOf('.');

        if (index > 0 && index < fileName.length()-1) {
            extension = fileName.substring(index+1).toLowerCase();
        }
        return extension;
    }
}

13-2:建立顏色選擇對話(huà)框(JColorChooer):
   JColorChooer的類(lèi)層次結構圖:
    java.lang.Object
     --java.awt.Component
      --java.awt.Container
       --javax.swing.JComponent
        --javax.swing.JColorChooser
    Color Chooser可以讓你選擇所想要的顏色,并更改某個(gè)組件的顏色.例如在小畫(huà)家中,你可以在畫(huà)板上畫(huà)上圖案,并選擇各式各樣
的顏色來(lái)加以裝飾;至于顏色的選擇上,你可以在小畫(huà)家中找到顏色選擇對話(huà)框.

JColorChooser構造函數:
JColorChooser():建立一個(gè)JColorChooer對象,默認顏色為白色.
JColorChooser(Color initialColor):建立一個(gè)JColorChooer對象,并設置初始顏色.
JColorChooser(ColorSelectionModel modal):以ColorSelectionModel構造JColorChooser對象.
13-2-1:輕松輸出顏色選擇對話(huà)框:
     最常使用JColorChooser的方式是使用JColorChooser的靜態(tài)方法showDialog().也就是說(shuō)在大部份的情況下,我們不會(huì )new一個(gè)
JColorChooser對象,而是直接使用JColorChooser的靜態(tài)方法(showDialog())來(lái)輸出顏色選擇對話(huà)框.利用這個(gè)方法我們亦可以得到
用戶(hù)所選擇的顏色,若用戶(hù)沒(méi)有選擇則返回null值.
     另外還有一個(gè)使用JColorChooser常用的方式,那就是使用createDialog()靜態(tài)方法.使用這個(gè)靜態(tài)方法后會(huì )得到一個(gè)JDialog對
象,我們可以利用這個(gè)JDialog對象對顏色選擇對話(huà)框做更多的設置.不過(guò)利用這個(gè)方法必須配合JColorChooser對象才行,也就是必須
new出一個(gè)JColorChooser對象來(lái).下面范例我們先介紹第一種最簡(jiǎn)單的也是最實(shí)用的JColorChooser選擇顏色完畢后就能更改JLabel
上的背景顏色.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import com.incors.plaf.alloy.*;
import com.incors.plaf.alloy.themes.glass.*;
public class ColorChooserDemo1 extends MouseAdapter
{
    JFrame f = null;
    JLabel label = null;
    JLabel label1 = null;
    JLabel label2 = null;
    Rectangle rec1 = null;
    Rectangle rec2 = null;
    
    public ColorChooserDemo1()
    {
        f = new JFrame("ColorChooser Example");         
        Container contentPane = f.getContentPane();
        contentPane.addMouseListener(this);
        
        label = new JLabel(" ",JLabel.CENTER);
        label.setPreferredSize(new Dimension(300,20));
        
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(1,2));
        
        label1 = new JLabel("左Label",JLabel.CENTER);
        label1.setBackground(Color.red);
        label1.setForeground(Color.black);
        label1.setOpaque(true);
        label1.setBounds(0, 0, 150, 150);
        panel.add(label1);
        
        label2 = new JLabel("右Label",JLabel.CENTER);
        label2.setBackground(Color.green);
        label2.setForeground(Color.black);
        label2.setOpaque(true);
        label2.setBounds(150, 0, 150, 150);
        panel.add(label2);
        
        rec1 = label1.getBounds();
        rec2 = label2.getBounds();
        
        contentPane.add(panel,BorderLayout.CENTER);
        contentPane.add(label,BorderLayout.SOUTH);
        
        f.setSize(new Dimension(300,150));
        f.setVisible(true);
        
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    
    public static void main(String[] arg)
    {
     SwingUtil.setLookAndFeel();
        new ColorChooserDemo1();
    }
    //實(shí)現MouseAdapter中的mousePressed()與mouseClicked()方法.當按下鼠標時(shí),就能知道鼠標光標目前的位置.當連續鍵擊鼠標
    //兩次時(shí),若光標所在位置在label中,就會(huì )出現顏色選擇對話(huà)框,用戶(hù)可選擇任一顏色更改label的顏色.
    public void mousePressed(MouseEvent e) {
       label.setText("目前鼠標坐標(X,Y)為:("+e.getX()+","+e.getY()+")");
    }
    
    public void mouseClicked(MouseEvent e)
    {
        Point point = e.getPoint();
        
        if (e.getClickCount() ==2)
        {
            if(rec1.contains(point))
            {  /*利用JColorChooser的showDialog()靜態(tài)方法輸出顏色選擇對話(huà)框,showDialog()中的3個(gè)參數依次是:
                *對話(huà)框的父組件,顏色選擇對話(huà)框標題,與對話(huà)框默認顏色.當用戶(hù)選擇完顏色之后,按下"OK"按鈕則返回
                *Color對象,若按下"Cancel"按鈕則返回null值.
                */
                Color color = JColorChooser.showDialog(
                              f,"Change label1 Color",Color.white);
                if (color != null) //若為null值表示用戶(hù)按下Cancel按鈕
                    label1.setBackground(color);
            }
            if(rec2.contains(point))
            {
                Color color = JColorChooser.showDialog(
                              f,"Change label2 Color",Color.yellow);
                if (color != null) //若為null值表示用戶(hù)按下Cancel按鈕
                   label2.setBackground(color);
            }
        }
     }
}

class SwingUtil{
  public static final void setLookAndFeel() {
   try{
            Font font = new Font("JFrame", Font.PLAIN, 12);
            Enumeration keys = UIManager.getLookAndFeelDefaults().keys();
 
            while (keys.hasMoreElements()) {
               Object key = keys.nextElement();
               if (UIManager.get(key) instanceof Font) {
                  UIManager.put(key, font);
                }
            }
         AlloyLookAndFeel.setProperty("alloy.isLookAndFeelFrameDecoration", "true");
         AlloyTheme theme = new GlassTheme();
         LookAndFeel alloyLnF = new AlloyLookAndFeel(theme);
            UIManager.setLookAndFeel(alloyLnF);
   }catch(UnsupportedLookAndFeelException ex){
     ex.printStackTrace();
   }
 }
}

13-2-2:建立JColorChooser對象輸出顏色選擇對話(huà)框:
     接下來(lái)我們介紹剛剛所提到使用JColorChooser的第二種方式,也就是使用createDialog()靜態(tài)方法來(lái)輸出顏色選擇對話(huà)框.使
用這種方式的好處是顏色選擇對話(huà)框可以做出多樣性的變化,例如你可以使用JDialog中的setMenuBar()方法在顏色選擇對話(huà)框中加
入菜單欄,或是利用JDialog的getContentPane()方法取得JDialog的ContentPane,然后對此ContentPane來(lái)做處理.下面范例我們修改
上個(gè)范例程序,并利用createDialog()方式來(lái)輸出JColorChooser:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ColorChooserDemo2 extends MouseAdapter implements ActionListener
{
    JFrame f = null;
    JLabel label = null;
    JLabel label1 = null;
    JLabel label2 = null;
    Rectangle rec1 = null;
    Rectangle rec2 = null;
    JDialog dialog = null;
    JColorChooser colorChooser = null;
    
    public ColorChooserDemo2()
    {
        f = new JFrame("ColorChooser Example");         
        Container contentPane = f.getContentPane();
        contentPane.addMouseListener(this);
        
        label = new JLabel(" ",JLabel.CENTER);
        label.setPreferredSize(new Dimension(300,20));
        
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(1,2));
        
        label1 = new JLabel("左Label",JLabel.CENTER);
        label1.setBackground(Color.red);
        label1.setForeground(Color.black);
        label1.setOpaque(true);
        label1.setBounds(0, 0, 150, 150);
        panel.add(label1);
        
        label2 = new JLabel("右Label",JLabel.CENTER);
        label2.setBackground(Color.green);
        label2.setForeground(Color.black);
        label2.setOpaque(true);
        label2.setBounds(150, 0, 150, 150);
        panel.add(label2);
        
        rec1 = label1.getBounds();
        rec2 = label2.getBounds();
        
        contentPane.add(panel,BorderLayout.CENTER);
        contentPane.add(label,BorderLayout.SOUTH);
        
        //建立一個(gè)新的JColorChooser對象,默認顏色為白色.
        colorChooser = new JColorChooser();
        /*利用JColorChooser的createDialog()靜態(tài)方法取得JDialog對象,createDialog()方法的最后兩個(gè)參數是用來(lái)處理顏色
         *選擇對話(huà)框的"OK"與"Cancel"鍵的ActionEvent事件.讀者可發(fā)現,這邊并沒(méi)有對顏色選擇對話(huà)框的"Reset"做處理,因為
         *內部系統會(huì )自動(dòng)處理此事件,如此可減輕程序設計師的負擔.
         */
        dialog = colorChooser.createDialog(f, //parent component
                                  "Change Color", //title
                                  true, //modal
                                  colorChooser, //JColorChooser
                                  this,//okListenr
                                  this);//cancelListener
                                   
        f.setSize(new Dimension(300,150));
        f.setVisible(true);
        
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    
    public static void main(String[] arg)
    {
        new ColorChooserDemo2();
    }
    
    public void mousePressed(MouseEvent e) {
       label.setText("目前鼠標坐標(X,Y)為:("+e.getX()+","+e.getY()+")");
    }
    
    boolean flag = true;
    
    public void mouseClicked(MouseEvent e)
    {
        Point point = e.getPoint();
       //判斷Double Click鼠標時(shí)的所在位置,若在label1或label2上則設置對話(huà)框的Title,并用show()方法將此對話(huà)框顯示出來(lái).
        if (e.getClickCount() ==2)
        {
            if(rec1.contains(point))
            {
                flag = true;
                dialog.setTitle("Change label1 Color");
                dialog.show();
            }
            if(rec2.contains(point))
            {
                flag = false;
                dialog.setTitle("Change label2 Color");
                dialog.show();
            }
        }
     }
     /*處理用戶(hù)對顏色選擇對話(huà)框中的按鈕事件.當用戶(hù)按下"OK"鍵時(shí),便將label的背景顏色改變成用戶(hù)所選擇的顏色.當用戶(hù)
      *按下"Cancel"鍵時(shí),則會(huì )用Dialog類(lèi)所提供的dispose()方法就可以關(guān)閉顏色選擇對話(huà)框了.
      */     
     public void actionPerformed(ActionEvent ae)
     {
        if(ae.getActionCommand().equals("OK"))
        {
            if (flag == true)
                label1.setBackground(colorChooser.getColor());
            else
                label2.setBackground(colorChooser.getColor());
        }
        if(ae.getActionCommand().equals("Cancel"))
            dialog.dispose();
    }
}


13-2-3:將JColorChooser置于一般容器中顯示.
    我們剛剛所講的JColorChooser都是以對話(huà)框的形式出現.事實(shí)上JColorChooser可以置于一般的java容器上,不過(guò)這時(shí)候你就必
須實(shí)際構造出JColorChooser對象,并使用ColorSelectionModel來(lái)管理用戶(hù)所選擇的顏色.ColorSelectionModel本身是個(gè)interface
.里面定義一些用戶(hù)選擇顏色或設置顏色的方法,并有addChangeListener()方法來(lái)檢測用戶(hù)是否改變了顏色的選擇.要使用到
ColorSelectionModel Interface所定義的方法,理論上我們必須實(shí)現它,然而java本身可利用JColorChooser所提供的
getSelectionModel()方法得到ColorSelectionModel的實(shí)體.這時(shí)候就可以直接以ColorSelectionModel的addChangeListener()方法
來(lái)檢測用戶(hù)是否對顏色的選擇有所改變,而不需要再另外實(shí)現這些方法.
    每當用戶(hù)JColorChooser上做一次顏色的改變時(shí),就會(huì )觸發(fā)ChangeEvent事件,因此我們必須實(shí)現ChangeListener界面來(lái)處理這個(gè)
事件.此界面只定義了一個(gè)方法,那就是stateChanged().下面范例我們將JColorChooser放在JPanel上,并在label上輸出用戶(hù)所選擇
的顏色與顏色參數.

import java.awt.*;
import java.awt.event.*;//ChangeEvent是Swing的事件,因此我們必須將Swing的event package import進(jìn)來(lái).
import javax.swing.*;
import javax.swing.colorchooser.*;
import javax.swing.event.*;

public class ColorChooserDemo3 implements ChangeListener
{
    JFrame f = null;
    JLabel label = null;
    JColorChooser colorChooser = null;
    
    public ColorChooserDemo3()
    {
        f = new JFrame("ColorChooser Example");         
        Container contentPane = f.getContentPane();
        
        label = new JLabel(" ",JLabel.CENTER);
        //設定label背景顏色為不透明,這樣才可以將label的背景顏色顯示出來(lái)
        label.setOpaque(true);
        //設定label上字體的顏色,也就是label的前景顏色
        label.setForeground(Color.black);
        
        JPanel panel = new JPanel();
        /*建立一個(gè)JColorChooser對象,并以getSelectionModel()方法取得ColorSelectionModel實(shí)體,并在這個(gè)實(shí)體上以
         *addChangeListener()方法檢測用戶(hù)是否有改變顏色.
         */
        colorChooser = new JColorChooser();
        /****add code***/
         //此處為下面"13-2-4中所要加代碼的區塊"
        /****add code***/
        panel.add(colorChooser);
        ColorSelectionModel selectModel =
                                      colorChooser.getSelectionModel();
        selectModel.addChangeListener(this);
        
        contentPane.add(label,BorderLayout.NORTH);
        contentPane.add(panel,BorderLayout.CENTER);
        
        f.pack();
        f.setVisible(true);
        
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    
    public static void main(String[] arg)
    {
        new ColorChooserDemo3();
    }
    //實(shí)現ChangeListener Interface,stateChanged()方法是在處理ChangeEvent事件.當用戶(hù)改變顏色的選擇時(shí),我們就在label
    //輸出用戶(hù)所選擇的顏色,并顯示顏色參數.
    public void stateChanged(ChangeEvent e)
    {
        Color color = colorChooser.getColor();
        label.setBackground(color);
        label.setText("您選擇的顏色參數為:R:"+color.getRed()+
                      "  G:"+color.getGreen()+"  B:"+color.getBlue());
    }
}

13-2-4:改變JColorChooser的顏色選擇面版.
    在以前我們曾經(jīng)提到JColorChooser提供3種面版讓我們選擇,分別"Swatches","HSB"與"RGB".這3個(gè)面版是java已經(jīng)構造好的顏
色面版,如果佻要自行產(chǎn)生自己所設計的顏色面版,你可以繼承AbstractColorChooserPanel這個(gè)抽象類(lèi),并實(shí)現里面的抽象方法,這個(gè)
抽象類(lèi)位于javax.swing.colorchooser這個(gè)package中.當你實(shí)現完成之后,你可以使用JColorChooser類(lèi)提供的addChooserPanel()
方法,或是setChooserPanels()方法,將你所設計的顏色面版增加到上圖的顏色顯示面版中.
    若你想刪除某一個(gè)顏色面版模式,你可以先使用JColorChooser類(lèi)所提供的getChooserPanels()方法,得到類(lèi)型為
AbstractColorChooserPanel的Array Object.例如在上例中運行所示,"Swatches"就會(huì )放在此類(lèi)型的Array[0]中,面"HSB"會(huì )放在
Array[1]中,以此類(lèi)推.得到此Array Object之后,我們就可以利用JColorChooser類(lèi)提供的removeChooserPanel()方法.決定刪除一個(gè)
顏色面版.例如我們若要刪除上例運行所示的"HSB"面版,我們可以在上面范例/****add code***/里面增加這2行程序:
    AbstractColorChooserPanel[] colorPanel=colorChooser.getChooserPanels();
    colorChooser.removeChooserPanel(colorPanel[1]);
   

13-3:建立分隔線(xiàn)(JSeparator):
  JSeparator)的類(lèi)層次結構圖:
    java.lang.Object
     --java.awt.Component
      --java.awt.Container
       --javax.swing.JComponent
        --javax.swing.JSeparator
   JSeparator通常用在菜單(Menu)或工具欄(ToolBar)上,可以明顯地分格出不同的功能區域.在JMenu或JPopupMenu中我們可以使用
addSeparator()方法輕易的加入分隔線(xiàn),但若是在一般的面版中呢?這時(shí)候我們必須自行建立JSeparator對象,然后再依照自己所需將
分隔線(xiàn)放在所想要的位置上.JSeparator有水平與垂直兩種,建立的方式非常簡(jiǎn)單,我們來(lái)看看JSeparator的構造函數:
   JSeparator構造函數:
   JSeparator():建立水平的JSeparator組件.
   JSeparator(int orientation):建立水平或垂直的JSeparator組件.
  JSeparator類(lèi)所提供的方法跟其他Swing組件比較起來(lái)算是少了許多,因為分隔線(xiàn)本身并沒(méi)有什么功能可言,主要是設置分隔線(xiàn)的方
向,其他如分隔線(xiàn)的長(cháng)短或設置位置方法,都可以在它的父類(lèi)JComponent中找到.下面我們來(lái)看如何使用JSeparator,并顯示水平與垂
直分隔線(xiàn)的外觀(guān).
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SeparatorDemo1
{
    JFrame f = null;
    
    public SeparatorDemo1()
    {
        f = new JFrame("Separator Example");         
        Container contentPane = f.getContentPane();
        contentPane.setLayout(new BorderLayout(1,2));
        
        JPanel panel1 = new JPanel(new GridLayout(2,1));
        JLabel label = new JLabel("水平分隔線(xiàn)",JLabel.CENTER);
        JSeparator seph = new JSeparator();
        panel1.add(label);
        panel1.add(seph);
        
        JTextArea textarea = new JTextArea();
        textarea.setPreferredSize(new Dimension(150,100));
        JPanel panel2 = new JPanel(new BorderLayout());
        panel2.add(panel1,BorderLayout.NORTH);
        panel2.add(textarea,BorderLayout.CENTER);
        
        JPanel panel3 = new JPanel(new GridLayout(1,3));
        label = new JLabel("垂直");
        label.setVerticalAlignment(JLabel.CENTER);
        panel3.add(label);
        JSeparator sepv = new JSeparator();
        sepv.setOrientation(JSeparator.VERTICAL);
        panel3.add(sepv);
        
        contentPane.add(panel2,BorderLayout.CENTER);
        contentPane.add(panel3,BorderLayout.EAST);
        f.pack();
        f.setVisible(true);
        
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    
    public static void main(String[] arg)
    {
        new SeparatorDemo1();
    }
}

 

 

Made by e-Stack Room
http://www.mycnknow.com


來(lái)自:http://www.itbbs.cn/ShowPost.Asp?ID=1107

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java Swing中的JButton、JComboBox、JList和JColorChooser組件使用案例
java filter文件過(guò)濾問(wèn)題5
java實(shí)現文本內容替換實(shí)例
Swing文件下載
java學(xué)習---流、JFileChooser
swing/swt可視化開(kāi)發(fā)工具windowbuilder免費了 - pengo - Bl...
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久