JavaGUI界面—窗口、按钮、文本框,及其解决按钮的中文乱码
一. Java圖形化界面開發概述
通常情況下,java語言一般是用來開發后臺程序的,所謂的后臺程序就是部署在服務器端的程序,默默的工作,用戶是看不到任何界面的。
事實上,我們使用java語言同樣可以完成圖形化界面程序的開發,而學習圖形化界面編程相對來說就會有趣很多,因為所見即所得,也就是說,我們寫的大部分代碼的執行效果,是可以通過圖形化界面實實在在能夠看得到的。
java使用AWT和Swing相關的類可以完成圖形化界面編程,其中AWT的全稱是抽象窗口工具集(Abstract Window Toolkit),它是sun公司最早提供的GUI庫,這個GUI庫提供了一些基本功能,但這個GUI庫的功能比較有限,所以后來sun公司又提供了Swing庫。通過使用AWT和Swing提供的圖形化界面組件庫,java的圖形化界面編程非常簡單,程序只需要依次創建所需的圖形組件,并以合適的方式將這些組件組織在一起,就可以開發出非常美觀的用戶界面。
二. AWT 編程
2.1 AWT簡介
? 當 JDK 1.0發布時, Sun 提供了 一套基本的GUI類庫,這個GUI類庫希望可以在所有平臺下都能運行 , 這套基本類庫被稱為"抽象窗口工具集 CAbstract Window Toolkit )",它為Java應用程序提供了基本的圖形組件 。 AWT是窗口框架,它從不同平臺的窗口系統中抽取出共同組件 , 當程序運行時,將這些組件的創建和動作委托給程序所在的運行平臺 。 簡而言之 ,當使用 AWT 編寫圖形界面應用 時, 程序僅指定了界面組件的位置和行為,并未提供真正的實現,JVM調用操作系統本地的圖形界面來創建和平臺 一致的對等體 。
? 使用AWT創建的圖形界面應用和所在的運行平臺有相同的界面風格 , 比如在 Windows 操作系統上,它就表現出 Windows 風格 ; 在 UNIX 操作系統上,它就表現出UNIX 風格 。 Sun 希望采用這種方式來實現 " Write Once, Run Anywhere " 的目標 。
2.2 AWT繼承體系
所有和 AWT 編程相關的類都放在 java.awt 包以及它的子包中, AWT 編程中有兩個基類 :Component和 MenuComponent。
- Component:代表一個能以圖形化方式顯示出來,并可與用戶交互的對象,例如 Button 代表一個按鈕,TextField 代表 一個文本框等;
- MenuComponent:則代表圖形界面的菜單組件,包括 MenuBar (菜單條)、 Menultem (菜單項)等子類。
其中 Container 是一種特殊的 Component,它代表一種容器,可以盛裝普通的 Component。
AWT中還有一個非常重要的接口叫LayoutManager ,如果一個容器中有多個組件,那么容器就需要使用LayoutManager來管理這些組件的布局方式。
2.3 Container容器
2.3.1 Container繼承體系
- ? Winow是可以獨立存在的頂級窗口,默認使用BorderLayout管理其內部組件布局;
- ? Panel可以容納其他組件,但不能獨立存在,它必須內嵌其他容器中使用,默認使用FlowLayout管理其內部組件布局;
- ? ScrollPane 是 一個帶滾動條的容器,它也不能獨立存在,默認使用 BorderLayout 管理其內部組件布局;
2.3.2 常見API
Component作為基類,提供了如下常用的方法來設置組件的大小、位置、可見性等。
| setLocation(int x, int y) | 設置組件的位置。 |
| setSize(int width, int height) | 設置組件的大小。 |
| setBounds(int x, int y, int width, int height) | 同時設置組件的位置、大小。 |
| setVisible(Boolean b): | 設置該組件的可見性。 |
Container作為容器根類,提供了如下方法來訪問容器中的組件
| Component add(Component comp) | 向容器中添加其他組件 (該組件既可以是普通組件,也可以 是容器) , 并返回被添加的組件 。 |
| Component getComponentAt(int x, int y): | 返回指定點的組件 。 |
| int getComponentCount(): | 返回該容器內組件的數量 。 |
| Component[] getComponents(): | 返回該容器內的所有組件 。 |
2.3.3 容器演示
2.3.3.1 Window
import java.awt.*;public class FrameDemo {public static void main(String[] args) {//1.創建窗口對象Frame frame = new Frame("這是第一個窗口容器");//設置窗口的位置和大小frame.setBounds(100,100,500,300);//設置窗口可見frame.setVisible(true);} }2.3.3.2 Panel
public class PanelDemo {public static void main(String[] args) {//1.創建Frame容器對象Frame frame = new Frame("這里在測試Panel");//2.創建Panel容器對象Panel panel = new Panel();//3.往Panel容器中添加組件panel.add(new TextField("這是一個測試文本"));panel.add(new Button("這是一個測試按鈕"));//4.把Panel添加到Frame中frame.add(panel);//5.設置Frame的位置和大小frame.setBounds(30,30,500,300);//6.設置Frame可見frame.setVisible(true);} }為什么其中出現亂碼了呢?
由于IDEA默認使用utf-8進行編碼,但是當前我們執行代碼是是在windows系統上,而windows操作系統的默認編碼是gbk,所以會亂碼,如果出現了亂碼,那么只需要在運行當前代碼前,設置一個jvm參數 -Dfile.encoding=gbk即可。
2.3.3.3 ScrollPane
import java.awt.*;public class ScrollPaneDemo {public static void main(String[] args) {//1.創建Frame窗口對象Frame frame = new Frame("這里測試ScrollPane");//2.創建ScrollPane對象,并且指定默認有滾動條ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);//3.往ScrollPane中添加組件scrollPane.add(new TextField("這是測試文本"));scrollPane.add(new Button("這是測試按鈕"));//4.把ScrollPane添加到Frame中frame.add(scrollPane);//5.設置Frame的位置及大小frame.setBounds(30,30,500,300);//6.設置Frame可見frame.setVisible(true);} }程序明明向 ScrollPane 容器中添加了 一個文本框和一個按鈕,但只能看到 一個按鈕,卻看不到文本框 ,這是為什么 呢?這是因為ScrollPane 使用 BorderLayout 布局管理器的緣故,而 BorderLayout 導致了該容器中只有一個組件被顯示出來 。
總結
以上是生活随笔為你收集整理的JavaGUI界面—窗口、按钮、文本框,及其解决按钮的中文乱码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么使用ai人工智能聊天
- 下一篇: java awt 教程,Java AWT