程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java Swing基礎教程之圖形化實例代碼

java Swing基礎教程之圖形化實例代碼

編輯:關於JAVA

java Swing基礎教程之圖形化實例代碼。本站提示廣大學習愛好者:(java Swing基礎教程之圖形化實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是java Swing基礎教程之圖形化實例代碼正文


java  Swing基礎教程之圖形化實例代碼

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

下面主要放代碼和注釋,少說話。

(一)基本框架

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

    // 開啟一個線程,所有的Swing組件必須由事件分派線程進行配置,線程將鼠標點擊和按鍵控制轉移到用戶接口組件。
    EventQueue.invokeLater(new Runnable() {
      // 匿名內部類,是一個Runnable接口的實例,實現了run方法
      public void run() {

        SimpleFrame frame = new SimpleFrame();
        // 創建下面自己定義的SimpleFrame類對象,以便於調用構造器方法

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

        frame.setTitle("Christmas");
        // 設置窗口標題

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

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

    });
  }
  // main結束時,程序並沒有結束,而是結束了主線程,知道所有框架關閉或者調用了 System.exit事才終止程序
}

class SimpleFrame extends JFrame {
  public SimpleFrame() {

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

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

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

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

  }
}

輸出結果:一個充滿整個屏幕的框體,標題欄名字叫做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

    // 開啟一個線程,所有的Swing組件必須由事件分派線程進行配置,線程將鼠標點擊和按鍵控制轉移到用戶接口組件
    EventQueue.invokeLater(new Runnable() {
      // 匿名內部類,是一個Runnable接口的實例,實現了run方法
      public void run() {

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

        frame.setTitle("HelloWrold");
        // 設置標題

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

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

  }

}

// 編寫繼承了JFrame的類,我們的工作在這裡進行
class HelloWorldFrame extends JFrame {
  public HelloWorldFrame() {

    add(new HelloWorldComponent());
    //向其中添加一個實例化的實現JComponent類的子類

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

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;

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

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

輸出結果:位於左上角的名字叫做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

    // 開啟一個線程,所有的Swing組件必須由事件分派線程進行配置,線程將鼠標點擊和按鍵控制轉移到用戶接口組件。
    EventQueue.invokeLater(new Runnable()
    {
      // 匿名內部類,是一個Runnable接口的實例,實現了run方法
      public void run(){

        JFrame frame = new DrawFrame();
        // 創建下面自己定義的SimpleFrame類對象,以便於調用構造器方法

        frame.setTitle("DrawTest");
        // 設置標題

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

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

}


class DrawFrame extends JFrame
{
  public DrawFrame(){

    add(new DrawComponent());
    //向其中添加一個實例化的實現JComponent類的子類

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

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

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

    Graphics2D g2 = (Graphics2D)g;
    //實例化Graphics2D這個類的對象,他是參數Graphics2D的一個子類

    double leftX = 100;
    double topY = 100;
    double width = 200;
    double height = 150;
    //我們設置矩形的四個屬性

    Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height);
    //創建一個Rectangle2D的對象,這個對象繼承了Sharp接口
    //Double是其中的一個靜態內部類,當我們初始化時需要在Double中設置參數

    g2.draw(rect);
    //傳入一個實現Sharp接口的實例,並在畫布上畫出

    Ellipse2D ellipse = new Ellipse2D.Double();
    //創建一個橢圓的實例

    ellipse.setFrame(rect);
    //橢圓和矩形類是兄弟關系,因為他們有著相同的邊界判斷方式
    //這裡我們直接用rect來對橢圓形進行描述(通過橢圓的外接矩形)

    g2.draw(ellipse);
    //傳入一個實現Sharp接口的實例,並在畫布上畫出

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

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

    Ellipse2D circle = new Ellipse2D.Double();
    //創建一個圓的實例
    circle.setFrameFromCenter(centerX, centerY, centerX+radius, centerY+radius);
    //設置坐標和半徑
    g2.draw(circle);
    //在畫布上畫出一個圓
  }

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

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

(四)圖形上色

Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height);
//創建一個Rectangle2D的對象,這個對象繼承了Sharp接口
//Double是其中的一個靜態內部類,當我們初始化時需要在Double中設置參數

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

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

g2.draw(rect);
//傳入一個實現Sharp接口的實例,並在畫布上畫出

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

輸出結果:中間為藍色矩形,以矩形中心為原點,150像素為半徑有個藍色線條的圓形。

(五)特殊字體

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

    // 開啟一個線程,所有的Swing組件必須由事件分派線程進行配置,線程將鼠標點擊和按鍵控制轉移到用戶接口組件。
    EventQueue.invokeLater(new Runnable() {
      // 匿名內部類,是一個Runnable接口的實例,實現了run方法
      public void run() {
        JFrame frame = new FontFrame();
        // 創建下面自己定義的SimpleFrame類對象,以便於調用構造器方法

        frame.setTitle("FontTest");
        // 設置標題

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

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

}

class FontFrame extends JFrame {
  public FontFrame() {
    add(new FontComponent());
    // 向其中添加一個實例化的實現JComponent類的子類

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

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

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

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

    Font f = new Font("Dialog", Font.BOLD, 36);
    // 創建一個字體類型,參數包括字體族,風格類型,大小
    // 也可以通過特殊的方法,調用加載得到本地的字體包

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

    FontRenderContext context = g2.getFontRenderContext();
    // 通過調用方法,得到屏幕設備字體屬性的描述對象

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

    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);
    // 設置字符串位置

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

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

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

    g2.draw(rect);
  }

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

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

(六)添加圖片

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

    // 開啟一個線程,所有的Swing組件必須由事件分派線程進行配置,線程將鼠標點擊和按鍵控制轉移到用戶接口組件。
    EventQueue.invokeLater(new Runnable() {
      // 匿名內部類,是一個Runnable接口的實例,實現了run方法
      public void run() {
        JFrame frame = new ImageFrame();
        // 創建下面自己定義的SimpleFrame類對象,以便於調用構造器方法

        frame.setTitle("ImageTest");
        // 設置標題

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

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

}

class ImageFrame extends JFrame {
  public ImageFrame() {
    add(new ImageComponent());
    // 向其中添加一個實例化的實現JComponent類的子類

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

class ImageComponent extends JComponent {

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

  private Image image;

  /**
   * ImageComponent的構造函數,用來實例化圖片
   */
  public ImageComponent(){
    image = new ImageIcon("D:/image.jpg").getImage();
    //通過路徑得到圖片
  }

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

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

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

輸出結果:在畫布以左上角為開始放置你添加的圖片。

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved