成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java  Swing基礎(chǔ)教程之圖形化實(shí)例代碼

java  Swing基礎(chǔ)教程之圖形化實(shí)例代碼

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,是專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

與多線程、泛型等不同,Swing主要在于使用。

下面主要放代碼和注釋?zhuān)僬f(shuō)話。

(一)基本框架

package Swing;

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

/**
 * 
 * @author QuinnNorris
 * 基本框架
 */
public class FrameTest {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub

    // 開(kāi)啟一個(gè)線程,所有的Swing組件必須由事件分派線程進(jìn)行配置,線程將鼠標(biāo)點(diǎn)擊和按鍵控制轉(zhuǎn)移到用戶接口組件。
    EventQueue.invokeLater(new Runnable() {
      // 匿名內(nèi)部類(lèi),是一個(gè)Runnable接口的實(shí)例,實(shí)現(xiàn)了run方法
      public void run() {

        SimpleFrame frame = new SimpleFrame();
        // 創(chuàng)建下面自己定義的SimpleFrame類(lèi)對(duì)象,以便于調(diào)用構(gòu)造器方法

        frame.setExtendedState(Frame.MAXIMIZED_BOTH);
        // 將窗口最大化
        // 其他可選屬性:Frame.NORMAL ICONIFIED MAXIMIZED_HORIZ MAXIMIZED_VERT
        // MAXIMIZED_BOTH

        frame.setTitle("Christmas");
        // 設(shè)置窗口標(biāo)題

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 選擇當(dāng)用戶關(guān)閉框架時(shí)進(jìn)行的操作 ,在有些時(shí)候需要將窗口隱藏,不能直接退出需要用到這個(gè)方法

        frame.setVisible(true);
        // 將窗口可見(jiàn)化,這樣以便用戶在第一次看見(jiàn)窗口之前我們能夠向其中添加內(nèi)容
      }

    });
  }
  // main結(jié)束時(shí),程序并沒(méi)有結(jié)束,而是結(jié)束了主線程,知道所有框架關(guān)閉或者調(diào)用了 System.exit事才終止程序
}

class SimpleFrame extends JFrame {
  public SimpleFrame() {

    Toolkit kit = Toolkit.getDefaultToolkit();
    // 修改窗口在屏幕上面的位置,改變窗口大小
    // Toolkit類(lèi)包含很多與本地窗口交互的方法

    Dimension screenSize = kit.getScreenSize();
    // Toolkit的獲取頻幕大小的方法返回一個(gè)Dimension的類(lèi)對(duì)象

    setSize((int) (screenSize.getWidth()), (int) (screenSize.getHeight()));
    // setBounds(0,0,(int)(screenSize.getWidth()),(int)(screenSize.getHeight()));
    // 定義窗口的位置和大小
    // setLocation(0,0); 定位窗口距離左上角的位置
    // setLocationByPlatform(true); 讓窗口系統(tǒng)控制窗口位置,距離上一個(gè)窗口很小的偏移量

    // 用圖片來(lái)替換窗口圖標(biāo)
    Image img = new ImageIcon("D:/icon.png").getImage();
    setIconImage(img);

  }
}

輸出結(jié)果:一個(gè)充滿整個(gè)屏幕的框體,標(biāo)題欄名字叫做Christmas,圖表是自己填充的圖片。

(二)輸出文字

package Swing;

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

/**
 * 
 * @author QuinnNorris
 * 輸出文字
 */
public class HelloWorld {

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub

    // 開(kāi)啟一個(gè)線程,所有的Swing組件必須由事件分派線程進(jìn)行配置,線程將鼠標(biāo)點(diǎn)擊和按鍵控制轉(zhuǎn)移到用戶接口組件
    EventQueue.invokeLater(new Runnable() {
      // 匿名內(nèi)部類(lèi),是一個(gè)Runnable接口的實(shí)例,實(shí)現(xiàn)了run方法
      public void run() {

        JFrame frame = new HelloWorldFrame();
        // HelloworldFrame在下面定義,繼承了JFrame,使用其中的構(gòu)造器方法

        frame.setTitle("HelloWrold");
        // 設(shè)置標(biāo)題

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 選擇當(dāng)用戶關(guān)閉框架時(shí)進(jìn)行的操作 ,在有些時(shí)候需要將窗口隱藏,不能直接退出需要用到這個(gè)方法

        frame.setVisible(true);
        // 將窗口可見(jiàn)化,這樣以便用戶在第一次看見(jiàn)窗口之前我們能夠向其中添加內(nèi)容
      }
    });

  }

}

// 編寫(xiě)繼承了JFrame的類(lèi),我們的工作在這里進(jìn)行
class HelloWorldFrame extends JFrame {
  public HelloWorldFrame() {

    add(new HelloWorldComponent());
    //向其中添加一個(gè)實(shí)例化的實(shí)現(xiàn)JComponent類(lèi)的子類(lèi)

    pack();
    //調(diào)用框架組件的首選大小,或者我們可以用SetSize方法來(lái)替換它
  }
}

class HelloWorldComponent extends JComponent {
  public static final int MESSAGE_X = 75;
  public static final int MESSAGE_Y = 100;

  private static final int DEFAULT_WIDTH = 300;
  private static final int DEFAULT_HEIGHT = 200;

  /**
   * 我們覆蓋了這個(gè)以用來(lái)書(shū)寫(xiě)內(nèi)容
   * 
   * @param g
   *      Graphics對(duì)象保存著用于繪制圖像和文本的設(shè)置
   */
  public void paintComponent(Graphics g) {
    g.drawString("Hello World!", MESSAGE_X, MESSAGE_Y);
    // 參數(shù):書(shū)寫(xiě)內(nèi)容,字符串中第一個(gè)字符位于從左向右75像素,字符串中第一個(gè)字符從上向下100像素
  }

  /**
   * 我們覆蓋了這個(gè)方法來(lái)表示出這個(gè)類(lèi)的組件的大小
   * 
   * @return 返回這個(gè)類(lèi)的組件本身應(yīng)該有多大
   */
  public Dimension getPreferredSize() {
    return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    // 返回一個(gè)Dimension對(duì)象,表示這個(gè)組件的大小
  }
}

輸出結(jié)果:位于左上角的名字叫做HelloWrold的小窗口,在窗口中部有“Hello World!”字樣。

(三)打印圖形

package Swing;

import java.awt.EventQueue;

import javax.swing.*;

import java.awt.*;
import java.awt.geom.*;

/**
 * 
 * @author QuinnNorris
 * 打印圖形
 */
public class DrawTest {

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub

    // 開(kāi)啟一個(gè)線程,所有的Swing組件必須由事件分派線程進(jìn)行配置,線程將鼠標(biāo)點(diǎn)擊和按鍵控制轉(zhuǎn)移到用戶接口組件。
    EventQueue.invokeLater(new Runnable()
    {
      // 匿名內(nèi)部類(lèi),是一個(gè)Runnable接口的實(shí)例,實(shí)現(xiàn)了run方法
      public void run(){

        JFrame frame = new DrawFrame();
        // 創(chuàng)建下面自己定義的SimpleFrame類(lèi)對(duì)象,以便于調(diào)用構(gòu)造器方法

        frame.setTitle("DrawTest");
        // 設(shè)置標(biāo)題

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 選擇當(dāng)用戶關(guān)閉框架的時(shí)候進(jìn)行的操作 ,在有些時(shí)候需要將窗口隱藏,不能直接退出需要用到這個(gè)方法

        frame.setVisible(true);
        // 將窗口可見(jiàn)化,這樣以便用戶在第一次看見(jiàn)窗口之前我們能夠向其中添加內(nèi)容
      }
    });
  }

}


class DrawFrame extends JFrame
{
  public DrawFrame(){

    add(new DrawComponent());
    //向其中添加一個(gè)實(shí)例化的實(shí)現(xiàn)JComponent類(lèi)的子類(lèi)

    pack();
    //調(diào)用框架組件的首選大小,或者我們可以用SetSize方法來(lái)替換它
  }
}

class DrawComponent extends JComponent
{
  private static final int DEFAULT_WIDTH = 400;
  private static final int DEFAULT_HEIGHT = 400;

  /**
   * 我們覆蓋了這個(gè)以用來(lái)打印圖形
   * 
   * @param g
   *      Graphics對(duì)象是我們需要用的Graphics2D的父類(lèi)
   */
  public void paintComponent(Graphics g){

    Graphics2D g2 = (Graphics2D)g;
    //實(shí)例化Graphics2D這個(gè)類(lèi)的對(duì)象,他是參數(shù)Graphics2D的一個(gè)子類(lèi)

    double leftX = 100;
    double topY = 100;
    double width = 200;
    double height = 150;
    //我們?cè)O(shè)置矩形的四個(gè)屬性

    Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height);
    //創(chuàng)建一個(gè)Rectangle2D的對(duì)象,這個(gè)對(duì)象繼承了Sharp接口
    //Double是其中的一個(gè)靜態(tài)內(nèi)部類(lèi),當(dāng)我們初始化時(shí)需要在Double中設(shè)置參數(shù)

    g2.draw(rect);
    //傳入一個(gè)實(shí)現(xiàn)Sharp接口的實(shí)例,并在畫(huà)布上畫(huà)出

    Ellipse2D ellipse = new Ellipse2D.Double();
    //創(chuàng)建一個(gè)橢圓的實(shí)例

    ellipse.setFrame(rect);
    //橢圓和矩形類(lèi)是兄弟關(guān)系,因?yàn)樗麄冇兄嗤倪吔缗袛喾绞?    //這里我們直接用rect來(lái)對(duì)橢圓形進(jìn)行描述(通過(guò)橢圓的外接矩形)

    g2.draw(ellipse);
    //傳入一個(gè)實(shí)現(xiàn)Sharp接口的實(shí)例,并在畫(huà)布上畫(huà)出

    g2.draw(new Line2D.Double(leftX,topY,leftX+width,topY+height));
    //在畫(huà)布上畫(huà)出一條直線

    double centerX = rect.getCenterX();
    double centerY = rect.getCenterY();
    double radius = 150;
    //定義圓心坐標(biāo)和半徑

    Ellipse2D circle = new Ellipse2D.Double();
    //創(chuàng)建一個(gè)圓的實(shí)例
    circle.setFrameFromCenter(centerX, centerY, centerX+radius, centerY+radius);
    //設(shè)置坐標(biāo)和半徑
    g2.draw(circle);
    //在畫(huà)布上畫(huà)出一個(gè)圓
  }

  /**
   * 我們覆蓋了這個(gè)方法來(lái)表示出這個(gè)類(lèi)的組件的大小
   * 
   * @return 返回這個(gè)類(lèi)的組件本身應(yīng)該有多大
   */
  public Dimension getPreferredSize(){
    return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
    // 返回一個(gè)Dimension對(duì)象,表示這個(gè)組件的大小
  }
}

輸出結(jié)果:左上角的窗口中有一個(gè)橢圓,外面有一個(gè)外界矩形,有一條從矩形左上角到右下角的直線,以這個(gè)矩形中心為原點(diǎn)有一個(gè)半徑為150像素的圓。

(四)圖形上色

Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height);
//創(chuàng)建一個(gè)Rectangle2D的對(duì)象,這個(gè)對(duì)象繼承了Sharp接口
//Double是其中的一個(gè)靜態(tài)內(nèi)部類(lèi),當(dāng)我們初始化時(shí)需要在Double中設(shè)置參數(shù)

g2.setColor(Color.BLUE);
//為g2對(duì)象設(shè)置一種填充顏色,會(huì)影響線條顏色

g2.fill(rect);
//將我們選擇的顏色填充到rect表示的封閉圖形中

g2.draw(rect);
//傳入一個(gè)實(shí)現(xiàn)Sharp接口的實(shí)例,并在畫(huà)布上畫(huà)出

在上一個(gè)代碼其他部分不改變的情況下,插入這樣兩行代碼(在1,4行代碼的原位置中間插入2,3行代碼)。得到上色效果。

輸出結(jié)果:中間為藍(lán)色矩形,以矩形中心為原點(diǎn),150像素為半徑有個(gè)藍(lán)色線條的圓形。

(五)特殊字體

package Swing;

import javax.swing.*;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;

/**
 * 
 * @author QuinnNorris 特殊字體
 */
public class FontTest {

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub

    // 開(kāi)啟一個(gè)線程,所有的Swing組件必須由事件分派線程進(jìn)行配置,線程將鼠標(biāo)點(diǎn)擊和按鍵控制轉(zhuǎn)移到用戶接口組件。
    EventQueue.invokeLater(new Runnable() {
      // 匿名內(nèi)部類(lèi),是一個(gè)Runnable接口的實(shí)例,實(shí)現(xiàn)了run方法
      public void run() {
        JFrame frame = new FontFrame();
        // 創(chuàng)建下面自己定義的SimpleFrame類(lèi)對(duì)象,以便于調(diào)用構(gòu)造器方法

        frame.setTitle("FontTest");
        // 設(shè)置標(biāo)題

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 選擇當(dāng)用戶關(guān)閉框架的時(shí)候進(jìn)行的操作 ,在有些時(shí)候需要將窗口隱藏,不能直接退出需要用到這個(gè)方法

        frame.setVisible(true);
        // 將窗口可見(jiàn)化,這樣以便用戶在第一次看見(jiàn)窗口之前我們能夠向其中添加內(nèi)容
      }
    });
  }

}

class FontFrame extends JFrame {
  public FontFrame() {
    add(new FontComponent());
    // 向其中添加一個(gè)實(shí)例化的實(shí)現(xiàn)JComponent類(lèi)的子類(lèi)

    pack();
    // 調(diào)用框架組件的首選大小,或者我們可以用SetSize方法來(lái)替換它
  }
}

class FontComponent extends JComponent {
  private static final int DEFAULT_WIDTH = 300;
  private static final int DEFAULT_HEIGHT = 200;

  /**
   * 我們覆蓋了這個(gè)以用來(lái)做一些工作
   * 
   * @param g
   *      Graphics對(duì)象是我們需要用的Graphics2D的父類(lèi)
   */
  public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    // 實(shí)例化Graphics2D這個(gè)類(lèi)的對(duì)象,他是參數(shù)Graphics2D的一個(gè)子類(lèi)

    String message = "Hello World!";
    // 寫(xiě)出我們要操作的文字

    Font f = new Font("Dialog", Font.BOLD, 36);
    // 創(chuàng)建一個(gè)字體類(lèi)型,參數(shù)包括字體族,風(fēng)格類(lèi)型,大小
    // 也可以通過(guò)特殊的方法,調(diào)用加載得到本地的字體包

    g2.setFont(f);
    // 將f設(shè)置在g2之中

    FontRenderContext context = g2.getFontRenderContext();
    // 通過(guò)調(diào)用方法,得到屏幕設(shè)備字體屬性的描述對(duì)象

    Rectangle2D bounds = f.getStringBounds(message, context);
    // getStringBounds方法返回一個(gè)包圍著字符串的矩形

    double x = (DEFAULT_WIDTH - bounds.getWidth()) / 2;
    // bounds.getWidth方法可以獲得字符串的寬度

    double y = (DEFAULT_HEIGHT - bounds.getHeight()) / 2;
    // bounds.getHeight方法可以獲得字符串的高度

    double ascent = -bounds.getY();
    // 獲得字體的上坡度

    double baseY = y + ascent;
    // 文字的基線位置

    g2.drawString(message, (int) x, (int) y);
    // 設(shè)置字符串位置

    g2.setPaint(Color.LIGHT_GRAY);
    // 設(shè)置線條顏色為亮灰色

    g2.draw(new Line2D.Double(x, baseY, x + bounds.getWidth(), baseY));
    // 在文字的基線上畫(huà)下一條橫線

    Rectangle2D rect = new Rectangle2D.Double(x, y, bounds.getWidth(),
        bounds.getHeight());

    g2.draw(rect);
  }

  /**
   * 我們覆蓋了這個(gè)方法來(lái)表示出這個(gè)類(lèi)的組件的大小
   * 
   * @return 返回這個(gè)類(lèi)的組件本身應(yīng)該有多大
   */
  public Dimension getPreferredSize() {
    return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    // 返回一個(gè)Dimension對(duì)象,表示這個(gè)組件的大小
  }
}

輸出結(jié)果:窗口正中間有文字“Hello World”,外圍被一個(gè)灰色矩形包括,在基線的地方有一條橫線分割。

(六)添加圖片

package Swing;

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

/**
 * 
 * @author QuinnNorris 添加圖片
 */
public class ImageTest {

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub

    // 開(kāi)啟一個(gè)線程,所有的Swing組件必須由事件分派線程進(jìn)行配置,線程將鼠標(biāo)點(diǎn)擊和按鍵控制轉(zhuǎn)移到用戶接口組件。
    EventQueue.invokeLater(new Runnable() {
      // 匿名內(nèi)部類(lèi),是一個(gè)Runnable接口的實(shí)例,實(shí)現(xiàn)了run方法
      public void run() {
        JFrame frame = new ImageFrame();
        // 創(chuàng)建下面自己定義的SimpleFrame類(lèi)對(duì)象,以便于調(diào)用構(gòu)造器方法

        frame.setTitle("ImageTest");
        // 設(shè)置標(biāo)題

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 選擇當(dāng)用戶關(guān)閉框架的時(shí)候進(jìn)行的操作 ,在有些時(shí)候需要將窗口隱藏,不能直接退出需要用到這個(gè)方法

        frame.setVisible(true);
        // 將窗口可見(jiàn)化,這樣以便用戶在第一次看見(jiàn)窗口之前我們能夠向其中添加內(nèi)容
      }
    });
  }

}

class ImageFrame extends JFrame {
  public ImageFrame() {
    add(new ImageComponent());
    // 向其中添加一個(gè)實(shí)例化的實(shí)現(xiàn)JComponent類(lèi)的子類(lèi)

    pack();
    // 調(diào)用框架組件的首選大小,或者我們可以用SetSize方法來(lái)替換它
  }
}

class ImageComponent extends JComponent {

  private static final int DEFAULT_WIDTH = 300;
  private static final int DEFAULT_HEIGHT = 200;

  private Image image;

  /**
   * ImageComponent的構(gòu)造函數(shù),用來(lái)實(shí)例化圖片
   */
  public ImageComponent(){
    image = new ImageIcon("D:/image.jpg").getImage();
    //通過(guò)路徑得到圖片
  }

  /**
   * 我們覆蓋了這個(gè)以用來(lái)做一些工作
   * 
   * @param g
   *      
   */
  public void paintComponent(Graphics g) {
    if(image == null ) return;
    //如果圖片不正確,則直接返回避免發(fā)生錯(cuò)誤

    g.drawImage(image, 0,0,null);
    //在畫(huà)布上給出圖片
  }

  /**
   * 我們覆蓋了這個(gè)方法來(lái)表示出這個(gè)類(lèi)的組件的大小
   * 
   * @return 返回這個(gè)類(lèi)的組件本身應(yīng)該有多大
   */
  public Dimension getPreferredSize() {
    return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    // 返回一個(gè)Dimension對(duì)象,表示這個(gè)組件的大小
  }
}

輸出結(jié)果:在畫(huà)布以左上角為開(kāi)始放置你添加的圖片。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

網(wǎng)站名稱:java  Swing基礎(chǔ)教程之圖形化實(shí)例代碼
分享鏈接:http://jinyejixie.com/article40/ppiceo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、微信小程序、企業(yè)建站、虛擬主機(jī)、網(wǎng)站改版、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
钦州市| 自治县| 伊通| 鹤山市| 龙州县| 济南市| 若羌县| 平和县| 江门市| 新龙县| 班玛县| 关岭| 突泉县| 彭州市| 马关县| 青铜峡市| 海林市| 江源县| 舒兰市| 芮城县| 尼勒克县| 札达县| 平度市| 两当县| 张家界市| 惠州市| 临江市| 什邡市| 锡林郭勒盟| 栖霞市| 潼关县| 平和县| 育儿| 泉州市| 平塘县| 大同县| 谷城县| 金阳县| 句容市| 阳江市| 砚山县|