欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java必學(xué)必會(huì)之GUI編程

 更新時(shí)間:2015年12月03日 11:49:08   作者:孤傲蒼狼  
這篇文章主要為大家詳細(xì)介紹了java GUI編程,對(duì)于GUI編程小編也不是很了解,通過(guò)這篇文章和大家一起學(xué)習(xí)GUI編程,感興趣的小伙伴們可以參考一下

一、事件監(jiān)聽(tīng)

測(cè)試代碼一:

package cn.javastudy.summary;

import java.awt.*;
import java.awt.event.*;

public class TestTextField {
 public static void main(String args[]) {
  new MyFrameTextField();
 }
}

class MyFrameTextField extends Frame {
 MyFrameTextField() {
  TextField tf = new TextField();
  add(tf);
  tf.addActionListener(new Monitor3());
  tf.setEchoChar('*');
  /*
   * 這個(gè)setEchoChar()方法是設(shè)置文本框輸入時(shí)顯示的字符,這里設(shè)置為*, 
   * 這樣輸入任何內(nèi)容就都以*顯示出來(lái),不過(guò)打印出來(lái)時(shí)依然可以看到輸入的內(nèi)容
   */
  setVisible(true);
  pack();
 }
}

class Monitor3 implements ActionListener {
 /*
  * 接口里面的所有方法都是public(公共的) 
  * 所以從API文檔復(fù)制void actionPerformed(ActionEvent e)時(shí) 要在void前面加上public
  */
 public void actionPerformed(ActionEvent e) {
  /* 事件的相關(guān)信息都封裝在了對(duì)象e里面,通過(guò)對(duì)象e的相關(guān)方法就可以獲取事件的相關(guān)信息 */
  TextField tf = (TextField) e.getSource();
  /*
   * getSource()方法是拿到事件源,注意:拿到這個(gè)事件源的時(shí)候,
   * 是把它當(dāng)作TextField的父類(lèi)來(lái)對(duì)待 
   * getSource()方法的定義是:“public Object getSource()”返回值是一個(gè)Object對(duì)象,
   * 所以要強(qiáng)制轉(zhuǎn)換成TextField類(lèi)型的對(duì)象 
   * 在一個(gè)類(lèi)里面想訪問(wèn)另外一個(gè)類(lèi)的事件源對(duì)象可以通過(guò)getSource()方法
   */
  System.out.println(tf.getText());// tf.getText()是取得文本框里面的內(nèi)容
  tf.setText("");// 把文本框里面的內(nèi)容清空
 }
}

測(cè)試代碼二:

package cn.javastudy.summary;

import java.awt.*;
import java.awt.event.*;
public class TestActionEvent2{
 public static void main(String args[]){
  Frame f = new Frame("TestActionEvent");
  Button btn1 = new Button("start");
  Button btn2 = new Button("stop");
  Monitor2 m2 = new Monitor2();//創(chuàng)建監(jiān)聽(tīng)對(duì)象
  btn1.addActionListener(m2);
  /*一個(gè)監(jiān)聽(tīng)對(duì)象同時(shí)監(jiān)聽(tīng)兩個(gè)按鈕的動(dòng)作*/
  btn2.addActionListener(m2);
  btn2.setActionCommand("GameOver");//設(shè)置btn2的執(zhí)行單擊命令后的返回信息
  f.add(btn1,BorderLayout.NORTH);
  f.add(btn2,BorderLayout.CENTER);
  
  f.pack();
  f.setVisible(true);
 }
}

class Monitor2 implements ActionListener{
 public void actionPerformed(ActionEvent e){
  System.out.println("a button has been pressed,"+"the relative info is:\n"+e.getActionCommand());
  /*使用返回的監(jiān)聽(tīng)對(duì)象e調(diào)用getActionCommand()方法獲取兩個(gè)按鈕執(zhí)行單擊命令后的返回信息
  根據(jù)返回信息的不同區(qū)分開(kāi)當(dāng)前操作的是哪一個(gè)按鈕,btn1沒(méi)有使用setActionCommand()方法設(shè)置
  則btn1返回的信息就是按鈕上顯示的文本*/
 }
}

二、TextField事件監(jiān)聽(tīng)

測(cè)試代碼:

package cn.javastudy.summary;

import java.awt.*;
import java.awt.event.*;

public class TestTextField {
 public static void main(String args[]) {
  new MyFrameTextField();
 }
}

class MyFrameTextField extends Frame {
 MyFrameTextField() {
  TextField tf = new TextField();
  add(tf);
  tf.addActionListener(new Monitor3());
  tf.setEchoChar('*');
  /*
   * 這個(gè)setEchoChar()方法是設(shè)置文本框輸入時(shí)顯示的字符,這里設(shè)置為*, 
   * 這樣輸入任何內(nèi)容就都以*顯示出來(lái),不過(guò)打印出來(lái)時(shí)依然可以看到輸入的內(nèi)容
   */
  setVisible(true);
  pack();
 }
}

class Monitor3 implements ActionListener {
 /*
  * 接口里面的所有方法都是public(公共的) 
  * 所以從API文檔復(fù)制void actionPerformed(ActionEvent e)時(shí) 要在void前面加上public
  */
 public void actionPerformed(ActionEvent e) {
  /* 事件的相關(guān)信息都封裝在了對(duì)象e里面,通過(guò)對(duì)象e的相關(guān)方法就可以獲取事件的相關(guān)信息 */
  TextField tf = (TextField) e.getSource();
  /*
   * getSource()方法是拿到事件源,注意:拿到這個(gè)事件源的時(shí)候,
   * 是把它當(dāng)作TextField的父類(lèi)來(lái)對(duì)待 
   * getSource()方法的定義是:“public Object getSource()”返回值是一個(gè)Object對(duì)象,
   * 所以要強(qiáng)制轉(zhuǎn)換成TextField類(lèi)型的對(duì)象 
   * 在一個(gè)類(lèi)里面想訪問(wèn)另外一個(gè)類(lèi)的事件源對(duì)象可以通過(guò)getSource()方法
   */
  System.out.println(tf.getText());// tf.getText()是取得文本框里面的內(nèi)容
  tf.setText("");// 把文本框里面的內(nèi)容清空
 }
}

使用TextField類(lèi)實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器

package cn.javastudy.summary;

import java.awt.*;
import java.awt.event.*;

public class TestMath {
 public static void main(String args[]) {
  new TFFrame();
 }
}

/* 這里主要是完成計(jì)算器元素的布局 */
class TFFrame extends Frame {
 TFFrame() {
  /*
   * 創(chuàng)建3個(gè)文本框,并指定其初始大小分別為10個(gè)字符和15個(gè)字符的大小 這里使用的是TextField類(lèi)的另外一種構(gòu)造方法 public TextField(int columns)
   */
  TextField num1 = new TextField(10);
  TextField num2 = new TextField(10);
  TextField num3 = new TextField(15);
  /* 創(chuàng)建等號(hào)按鈕 */
  Button btnEqual = new Button("=");
  btnEqual.addActionListener(new MyMonitor(num1, num2, num3));
  /* 給等號(hào)按鈕加上監(jiān)聽(tīng),讓點(diǎn)擊按鈕后有響應(yīng)事件發(fā)生 */
  Label lblPlus = new Label("+");
  /* “+”是一個(gè)靜態(tài)文本,所以使用Label類(lèi)創(chuàng)建一個(gè)靜態(tài)文本對(duì)象 */
  setLayout(new FlowLayout());
  /* 把Frame默認(rèn)的BorderLayout布局改成FlowLayout布局 */
  add(num1);
  add(lblPlus);
  add(num2);
  add(btnEqual);
  add(num3);
  pack();
  setVisible(true);

 }
}

class MyMonitor implements ActionListener {
 TextField num1, num2, num3;

 /*
  * 為了使對(duì)按鈕的監(jiān)聽(tīng)能夠?qū)ξ谋究蛞财鹱饔茫?
  * 所以在自定義類(lèi)MyMonitor里面定義三個(gè)TextField類(lèi)型的對(duì)象 num1,num2,num3,
  * 并且定義了MyMonitor類(lèi)的一個(gè)構(gòu)造方法 這個(gè)構(gòu)造方法帶有三個(gè)TextField類(lèi)型的參數(shù),
  * 用于接收 從TFFrame類(lèi)里面?zhèn)鬟f過(guò)來(lái)的三個(gè)TextField類(lèi)型的參數(shù) 
  * 然后把接收到的三個(gè)TextField類(lèi)型的參數(shù)賦值給在本類(lèi)中聲明的 三個(gè)TextField類(lèi)型的參數(shù)num1,num2,num3 然后再在actionPerformed()方法里面處理num1,num2,num3
  */
 public MyMonitor(TextField num1, TextField num2, TextField num3) {
  this.num1 = num1;
  this.num2 = num2;
  this.num3 = num3;
 }

 public void actionPerformed(ActionEvent e) {
  /* 事件的相關(guān)信息都封裝在了對(duì)象e里面,通過(guò)對(duì)象e的相關(guān)方法就可以獲取事件的相關(guān)信息 */
  int n1 = Integer.parseInt(num1.getText());/* num1對(duì)象調(diào)用getText()方法取得自己顯示的文本字符串 */
  int n2 = Integer.parseInt(num2.getText());/* num2對(duì)象調(diào)用getText()方法取得自己顯示的文本字符串 */
  num3.setText("" + (n1 + n2));/* num3對(duì)象調(diào)用setText()方法設(shè)置自己的顯示文本 */
  num1.setText("");
  /* 計(jì)算結(jié)束后清空num1,num2文本框里面的內(nèi)容 */
  num2.setText("");
  // num3.setText(String.valueOf((n1+n2)));
  /* 字符串與任意類(lèi)型的數(shù)據(jù)使用“+”連接時(shí)得到的一定是字符串,
   * 這里使用一個(gè)空字符串與int類(lèi)型的數(shù)連接,這樣就可以直接把(n1+n2)得到的int類(lèi)型的數(shù)隱式地轉(zhuǎn)換成字符串了,
   * 這是一種把別的基礎(chǔ)數(shù)據(jù)類(lèi)型轉(zhuǎn)換成字符串的一個(gè)小技巧。
   * 也可以使用“String.valueOf((n1+n2))”把(n1+n2)的和轉(zhuǎn)換成字符串 
   */
 }
}

JAVA里面的經(jīng)典用法:在一個(gè)類(lèi)里面持有另外一個(gè)類(lèi)的引用

package cn.javastudy.summary;

import java.awt.*;
import java.awt.event.*;

public class TestMath1 {
 public static void main(String args[]) {
  new TTMyFrame().launchFrame();
  /* 創(chuàng)建出TTMyFrame對(duì)象后調(diào)用lauchFrame()方法把計(jì)算器窗體顯示出來(lái) */
 }
}

/* 做好計(jì)算器的窗體界面 */
class TTMyFrame extends Frame {
 /* 把設(shè)計(jì)計(jì)算器窗體的代碼封裝成一個(gè)方法 */
 TextField num1, num2, num3;

 public void launchFrame() {
  num1 = new TextField(10);
  num2 = new TextField(15);
  num3 = new TextField(15);
  Label lblPlus = new Label("+");
  Button btnEqual = new Button("=");
  btnEqual.addActionListener(new MyMonitorbtnEqual(this));
  setLayout(new FlowLayout());
  add(num1);
  add(lblPlus);
  add(num2);
  add(btnEqual);
  add(num3);
  pack();
  setVisible(true);
 }
}

/*
 * 這里通過(guò)取得TTMyFrame類(lèi)的引用,然后使用這個(gè)引用去訪問(wèn)TTMyFrame類(lèi)里面的成員變量 
 * 這種做法比上一種直接去訪問(wèn)TTMyFrame類(lèi)里面的成員變量要好得多,
 * 因?yàn)楝F(xiàn)在不需要知道 TTMyFrame類(lèi)里面有哪些成員變量了,
 * 現(xiàn)在要訪問(wèn)TTMyFrame類(lèi)里面的成員變量,直接使用 TTMyFrame類(lèi)對(duì)象的引用去訪問(wèn)即可,
 * 這個(gè)TTMyFrame類(lèi)的對(duì)象好比是一個(gè)大管家, 而我告訴大管家,我要訪問(wèn)TTMyFrame類(lèi)里面的那些成員變量,
 * 大管家的引用就會(huì)去幫我找,不再需要我自己去找了。 
 * 這種在一個(gè)類(lèi)里面持有另一個(gè)類(lèi)的引用的用法是一種非常典型的用法 
 * 使用獲取到的引用就可以在一個(gè)類(lèi)里面訪問(wèn)另一個(gè)類(lèi)的所有成員了
 */
class MyMonitorbtnEqual implements ActionListener {
 TTMyFrame ttmf = null;

 public MyMonitorbtnEqual(TTMyFrame ttmf) {
  this.ttmf = ttmf;
 }

 public void actionPerformed(ActionEvent e) {
  int n1 = Integer.parseInt(ttmf.num1.getText());
  int n2 = Integer.parseInt(ttmf.num2.getText());
  ttmf.num3.setText("" + (n1 + n2));
  ttmf.num1.setText("");
  ttmf.num2.setText("");
 }
}

運(yùn)行結(jié)果如下:

三、內(nèi)部類(lèi)

內(nèi)部類(lèi)的使用范例:

package cn.javastudy.summary;

import java.awt.*;
import java.awt.event.*;

public class TestMath3 {

 public static void main(String args[]) {
  new MyMathFrame().launchFrame();
 }
}

class MyMathFrame extends Frame {
 TextField num1, num2, num3;

 public void launchFrame() {
  num1 = new TextField(10);
  num2 = new TextField(15);
  num3 = new TextField(15);
  Label lblPlus = new Label("+");
  Button btnEqual = new Button("=");
  btnEqual.addActionListener(new MyMonitor());
  setLayout(new FlowLayout());
  add(num1);
  add(lblPlus);
  add(num2);
  add(btnEqual);
  add(num3);
  pack();
  setVisible(true);
 }

 /*
  * 這個(gè)MyMonitor類(lèi)是內(nèi)部類(lèi),它在MyFrame類(lèi)里面定義 MyFrame類(lèi)稱為MyMonitor類(lèi)的包裝類(lèi)
  */
 /*
  * 使用內(nèi)部類(lèi)的好處: 
  * 第一個(gè)巨大的好處就是可以暢通無(wú)阻地訪問(wèn)外部類(lèi)(即內(nèi)部類(lèi)的包裝類(lèi))的所有成員變量和方法 
  * 如這里的在MyFrame類(lèi)(外部類(lèi))定義的三個(gè)成員變量num1,num2,num3, 
  * 在MyMonitor(內(nèi)部類(lèi))里面就可以直接訪問(wèn) 
  * 這相當(dāng)于在創(chuàng)建外部類(lèi)對(duì)象時(shí)內(nèi)部類(lèi)對(duì)象默認(rèn)就擁有了一個(gè)外部類(lèi)對(duì)象的引用
  */
 private class MyMonitor implements ActionListener {
  public void actionPerformed(ActionEvent e) {
   int n1 = Integer.parseInt(num1.getText());
   int n2 = Integer.parseInt(num2.getText());
   num3.setText("" + (n1 + n2));
   num1.setText("");
   num2.setText("");
  }
 }
}

內(nèi)部類(lèi)帶來(lái)的巨大好處是:

  • 可以很方便地訪問(wèn)外部類(lèi)定義的成員變量和方法
  • 當(dāng)某一個(gè)類(lèi)不需要其他類(lèi)訪問(wèn)的時(shí)候就把這個(gè)類(lèi)聲明為內(nèi)部類(lèi)。

四、Graphics 類(lèi)

測(cè)試代碼:

package cn.javastudy.summary;

import java.awt.*;
public class TestPaint{
 public static void main(String args[]){
  new MyPaint().launchFrame();
  /*在main()方法里面并沒(méi)有顯示調(diào)用paint(Graphics g)方法
  可是當(dāng)創(chuàng)建出Frame窗體后卻可以看到Frame窗體上畫(huà)出了
  圓和矩形,這是因?yàn)閜aint()方法是一個(gè)比較特殊的方法
  在創(chuàng)建Frame窗體時(shí)會(huì)自動(dòng)隱式調(diào)用
  當(dāng)我們把Frame窗體最小化又再次打開(kāi)時(shí),又會(huì)再次調(diào)用
  paint()方法重新把圓和矩形在Frame窗體上畫(huà)出來(lái)
    即每次需要重畫(huà)Frame窗體的時(shí)候就會(huì)自動(dòng)調(diào)用paint()方法*/
 }
}

class MyPaint extends Frame{
 public void launchFrame(){
  setBounds(200,200,640,480);
  setVisible(true);
 }
 
 public void paint(Graphics g){
  /*paint(Graphics g)方法有一個(gè)Graphics類(lèi)型的參數(shù)g
  我們可以把這個(gè)g當(dāng)作是一個(gè)畫(huà)家,這個(gè)畫(huà)家手里拿著一只畫(huà)筆
  我們通過(guò)設(shè)置畫(huà)筆的顏色與形狀來(lái)畫(huà)出我們想要的各種各樣的圖像*/
  /*設(shè)置畫(huà)筆的顏色*/
  g.setColor(Color.red);
  g.fillOval(100,100,100,100);/*畫(huà)一個(gè)實(shí)心橢圓*/
  g.setColor(Color.green);
  g.fillRect(150,200,200,200);/*畫(huà)一個(gè)實(shí)心矩形*/
  /*這下面的兩行代碼是為了寫(xiě)程序的良好編程習(xí)慣而寫(xiě)的
  前面設(shè)置了畫(huà)筆的顏色,現(xiàn)在就應(yīng)該把畫(huà)筆的初始顏色恢復(fù)過(guò)來(lái)
  就相當(dāng)于是畫(huà)家用完畫(huà)筆之后把畫(huà)筆上的顏色清理掉一樣*/
  Color c = g.getColor();
  g.setColor(c);
 }
}

運(yùn)行結(jié)果:

五、鼠標(biāo)事件適配器

測(cè)試代碼:

package cn.galc.test;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MyMouseAdapter{
 public static void main(String args[]) {
 new MyFrame("drawing...");
 }
}

class MyFrame extends Frame {
 ArrayList points = null;
 MyFrame(String s) {
 super(s);
 points = new ArrayList(); 
 setLayout(null);
 setBounds(300,300,400,300); 
 this.setBackground(new Color(204,204,255));
 setVisible(true);
 this.addMouseListener(new Monitor());
 }
 
 public void paint(Graphics g) {
 Iterator i = points.iterator();
 while(i.hasNext()){
  Point p = (Point)i.next();
  g.setColor(Color.BLUE);
  g.fillOval(p.x,p.y,10,10);
  
 }
 }
 
 public void addPoint(Point p){
 points.add(p);
 }
}

class Monitor extends MouseAdapter {
 public void mousePressed(MouseEvent e) {
 MyFrame f = (MyFrame)e.getSource();
 f.addPoint(new Point(e.getX(),e.getY()));
 f.repaint();
 }
}

六、window事件

測(cè)試代碼:

package cn.galc.test;

import java.awt.*;
import java.awt.event.*;
public class TestWindowClose{
 public static void main(String args[]){
 new WindowFrame("關(guān)閉WindowFrame");
 }
}

class WindowFrame extends Frame{
 public WindowFrame(String s){
 super(s);
 setBounds(200,200,400,300);
 setLayout(null);
 setBackground(new Color(204,204,255));
 setVisible(true);
 this.addWindowListener(new WindowMonitor());
/*監(jiān)聽(tīng)本窗體的動(dòng)作,把所有的動(dòng)作信息封裝成一個(gè)對(duì)象傳遞到監(jiān)聽(tīng)類(lèi)里面*/
 
 this.addWindowListener(
 /*在一個(gè)方法里面定義一個(gè)類(lèi),這個(gè)類(lèi)稱為局部類(lèi),也叫匿名的內(nèi)部類(lèi),
 這里的{……代碼……}里面的代碼很像一個(gè)類(lèi)的類(lèi)體,只不過(guò)這個(gè)類(lèi)沒(méi)有名字,所以叫匿名類(lèi)
 在這里是把這個(gè)匿名類(lèi)當(dāng)成WindowAdapter類(lèi)來(lái)使用,語(yǔ)法上這樣寫(xiě)的本質(zhì)意義是相當(dāng)于這個(gè)匿名類(lèi)
 從WindowAdapter類(lèi)繼承,現(xiàn)在new了一個(gè)匿名類(lèi)的對(duì)象出來(lái)然后把這個(gè)對(duì)象當(dāng)成WindowAdapter來(lái)使用
 這個(gè)匿名類(lèi)出了()就沒(méi)有人認(rèn)識(shí)了*/
  new WindowAdapter(){
  public void windowClosing(WindowEvent e){
   setVisible(false);
   System.exit(-1);
  }
  }
 );
 }
 
 /*這里也是將監(jiān)聽(tīng)類(lèi)定義為內(nèi)部類(lèi)*/
 class WindowMonitor extends WindowAdapter{
 /*WindowAdapter(Window適配器)類(lèi)實(shí)現(xiàn)了WindowListener監(jiān)聽(tīng)接口
 重寫(xiě)了WindowListener接口里面的所有方法
 如果直接使用自定義WindowMonitor類(lèi)直接去
 實(shí)現(xiàn)WindowListener接口,那么就得要重寫(xiě)WindowListener接口
 里面的所有方法,但現(xiàn)在只需要用到這些方法里面的其中一個(gè)方法
 所以采用繼承實(shí)現(xiàn)WindowListener監(jiān)聽(tīng)接口的一個(gè)子類(lèi)
 并重寫(xiě)這個(gè)子類(lèi)里面需要用到的那個(gè)方法即可
 這種做法比直接實(shí)現(xiàn)WindowListener監(jiān)聽(tīng)接口要重寫(xiě)很多個(gè)用不到的方法要簡(jiǎn)潔方便得多*/
/*重寫(xiě)需要用到的windowClosing(WindowEvent e)方法*/
 public void windowClosing(WindowEvent e){
  setVisible(false);/*將窗體設(shè)置為不顯示,即可實(shí)現(xiàn)窗體關(guān)閉*/
  System.exit(0);/*正常退出*/
  }
 }
}

七、鍵盤(pán)響應(yīng)事件——KeyEvent

測(cè)試代碼:

package cn.galc.test;

import java.awt.*;
import java.awt.event.*;
public class TestKeyEvent{
 public static void main(String args[]){
 new KeyFrame("鍵盤(pán)響應(yīng)事件");
 }
}

class KeyFrame extends Frame{
 public KeyFrame(String s){
  super(s);
  setBounds(200,200,400,300);
  setLayout(null);
  setVisible(true);
  addKeyListener(new KeyMonitor());
 }
 /*把自定義的鍵盤(pán)的監(jiān)聽(tīng)類(lèi)定義為內(nèi)部類(lèi)
 這個(gè)監(jiān)聽(tīng)類(lèi)從鍵盤(pán)適配器KeyAdapter類(lèi)繼承
 從KeyAdapter類(lèi)繼承也是為了可以簡(jiǎn)潔方便
 只需要重寫(xiě)需要用到的方法即可,這種做法比
 直接實(shí)現(xiàn)KeyListener接口要簡(jiǎn)單方便,如果
 直接實(shí)現(xiàn)KeyListener接口就要把KeyListener
 接口里面的所有方法重寫(xiě)一遍,但真正用到的
 只有一個(gè)方法,這樣重寫(xiě)其他的方法但又用不到
 難免會(huì)做無(wú)用功*/ 
 class KeyMonitor extends KeyAdapter{
 public void keyPressed(KeyEvent e){
  int keycode = e.getKeyCode();
  /*使用getKeyCode()方法獲取按鍵的虛擬碼*/
  /*如果獲取到的鍵的虛擬碼等于up鍵的虛擬碼
  則表示當(dāng)前按下的鍵是up鍵
  KeyEvent.VK_UP表示取得up鍵的虛擬碼
  鍵盤(pán)中的每一個(gè)鍵都對(duì)應(yīng)有一個(gè)虛擬碼
  這些虛擬碼在KeyEvent類(lèi)里面都被定義為靜態(tài)常量
  所以可以使用“類(lèi)名.靜態(tài)常量名”的形式訪問(wèn)得到這些靜態(tài)常量*/
  if(keycode == KeyEvent.VK_UP){
   System.out.println("你按的是up鍵");
   }
  }
 }
}
/*鍵盤(pán)的處理事件是這樣的:每一個(gè)鍵都對(duì)應(yīng)著一個(gè)虛擬的碼,
當(dāng)按下某一個(gè)鍵時(shí),系統(tǒng)就會(huì)去找這個(gè)鍵對(duì)應(yīng)的虛擬的碼,以此來(lái)確定當(dāng)前按下的是那個(gè)鍵
*/

通過(guò)這篇文章和大家一起學(xué)習(xí)了GUI編程,希望大家對(duì)GUI編程有了更全面的認(rèn)識(shí),關(guān)于GUI編程遠(yuǎn)不止這些,還需要大家繼續(xù)學(xué)習(xí)。

相關(guān)文章

  • Mybatis-Plus中的selectByMap使用實(shí)例

    Mybatis-Plus中的selectByMap使用實(shí)例

    Mybatis-Plus來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查時(shí),將里面的函數(shù)試了個(gè)遍,接下來(lái)我就將使用selectByMap函數(shù)的簡(jiǎn)單測(cè)試實(shí)例寫(xiě)出來(lái),方便沒(méi)有使用過(guò)的朋友們快速上手,感興趣的可以了解一下
    2021-11-11
  • Java中基于Shiro,JWT實(shí)現(xiàn)微信小程序登錄完整例子及實(shí)現(xiàn)過(guò)程

    Java中基于Shiro,JWT實(shí)現(xiàn)微信小程序登錄完整例子及實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了Java中基于Shiro,JWT實(shí)現(xiàn)微信小程序登錄完整例子 ,實(shí)現(xiàn)了小程序的自定義登陸,將自定義登陸態(tài)token返回給小程序作為登陸憑證。需要的朋友可以參考下
    2018-11-11
  • java實(shí)現(xiàn)三角形分形山脈

    java實(shí)現(xiàn)三角形分形山脈

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)三角形分形山脈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • JavaWeb實(shí)現(xiàn)打印功能

    JavaWeb實(shí)現(xiàn)打印功能

    這篇文章主要介紹了JavaWeb實(shí)現(xiàn)打印功能的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • Mybatis中自定義TypeHandler處理枚舉的示例代碼

    Mybatis中自定義TypeHandler處理枚舉的示例代碼

    typeHandler,是 MyBatis 中的一個(gè)接口,用于處理數(shù)據(jù)庫(kù)中的特定數(shù)據(jù)類(lèi)型,下面簡(jiǎn)單介紹創(chuàng)建自定義 typeHandler 來(lái)處理枚舉類(lèi)型的示例,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • 基于Beanutils.copyProperties()的用法及重寫(xiě)提高效率

    基于Beanutils.copyProperties()的用法及重寫(xiě)提高效率

    這篇文章主要介紹了Beanutils.copyProperties( )的用法及重寫(xiě)提高效率的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 基于spring cloud多個(gè)消費(fèi)端重復(fù)定義feign client的問(wèn)題

    基于spring cloud多個(gè)消費(fèi)端重復(fù)定義feign client的問(wèn)題

    這篇文章主要介紹了spring cloud多個(gè)消費(fèi)端重復(fù)定義feign client的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java基于代理模式解決紅酒經(jīng)銷(xiāo)問(wèn)題詳解

    Java基于代理模式解決紅酒經(jīng)銷(xiāo)問(wèn)題詳解

    這篇文章主要介紹了Java基于代理模式解決紅酒經(jīng)銷(xiāo)問(wèn)題,詳細(xì)描述了代理模式的概念、原理并結(jié)合實(shí)例形式分析了java基于代理模式解決紅酒經(jīng)銷(xiāo)問(wèn)題的相關(guān)步驟、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • Java中的對(duì)象和引用詳解

    Java中的對(duì)象和引用詳解

    這篇文章主要介紹了Java中的對(duì)象和引用詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • elasticsearch+logstash并使用java代碼實(shí)現(xiàn)日志檢索

    elasticsearch+logstash并使用java代碼實(shí)現(xiàn)日志檢索

    這篇文章主要介紹了elasticsearch+logstash并使用java代碼實(shí)現(xiàn)日志檢索,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02

最新評(píng)論