圖形教程

眾所周知,我們可以借助Java庫制作游戲,這些庫為我們提供制作游戲所需的圖形。 因此,今天我將開始一個關于Java圖形的非常新的部分。 我之前曾發表過有關如何制作所得稅計算器的文章 。

首先要滿足一些先決條件:

-您應該對Java語法有一個清晰的了解,因為我不會教它。
-您應該已經下載了Eclipse(任何人都可以做,例如Indigo,Galileo,Ganymede等)
–您應該下載acm.jar文件,并將其作為外部jar文件包含到您的項目中。

注意 :如果可以下載Eclipse或從命令提示符執行。 如果從命令提示符執行,請不要忘記將acm.jar的路徑輸入到Environment Variable-> CLASSPATH ,否則將引發錯誤。

AWT(抽象窗口工具包)提供了可在Java小程序中使用的GUI組件,但是這里我們還將使用acm.jar庫。

java.awt軟件包和acm。* / acm.program。 *軟件包包含GUI組件。

現在,我們應該描述將用于構建GUI的組件。

帆布

畫布(在java.awt中)/ GCanvas(acm。*)是一個類,它在后臺提供畫布以在其上添加對象。 這是由圖形程序自動創建的。

GCanvas的一些方法是:

add(object):將對象添加到畫布上。

add(object,x,y) :將對象添加到指定的位置(x,y)。

add(object,position) :將對象添加到指定的位置(SOUTH,NORTH,EAST,WEST)。

remove(object) :刪除該特定對象

removeAll() :從畫布上刪除所有對象。

setBackground(color) :設置畫布的背景。

要了解有關GCanvas方法的更多信息, 請單擊此處 。

要了解Canvas方法, 請單擊此處 。

容器:

您可以使用add方法將GUI組件添加到容器中。

有兩種類型的容器WindowPanel

視窗

窗口是一個獨立于其他容器的容器。 窗口有兩種類型:“ 框架”和“ 對話框”框架是帶有標題和角的窗口,可以調整大小,而對話框是簡單的窗口。 我們可以移動一個對話框,但不能調整其大小。

面板

面板必須包含在另一個容器或Web瀏覽器窗口中。 您必須將面板放入要顯示的窗口中。

定位尺寸調整 組件

容器中組件的位置和大小是借助布局管理器確定的。 容器具有布局管理器的實例。 每當容器需要調整其內部組件的大小或位置時,它都會調用布局管理器并進行必要的處理。

在布局管理器類中定義了不同的方法來實現重新定位和調整大小。

鏡框

框架Window的子類。 FrameContainer類繼承其屬性,因此您可以使用add方法將組件添加到Frame中

Frame的默認布局是BorderLayout ,認為可以通過setLayout方法進行更改。

構造函數Frame (String)創建一個新的不可見Frame對象,其標題由String指定。

范例:

//Program using the acm library
import javax.swing.*;
import java.awt.*;
import acm.program.*;public class FrameExample extends GraphicsProgram{private JFrame f;public FrameExample(){f = new JFrame("Code 2 Learn");}public void launchMyFrame(){f.setSize(300,300);f.setBackground(Color.blue);f.setVisible(true);}public void init(){FrameExample fe=new FrameExample();fe.launchMyFrame();}
}
//Program using the w/o acm library
import java.awt.*;public class FrameExample{ private Frame f;public FrameExample(){f = new Frame("Code 2 Learn");}public void launchMyFrame(){f.setSize(300,300);f.setBackground(Color.blue);f.setVisible(true);}public static void main(String args[]){FrameExample fe=new FrameExample();fe.launchMyFrame();}
}

面板:

面板 (如Frame)為您提供了附加GUI組件的空間。 每個面板可以有自己的布局管理器。

創建面板后,我們必須將其添加到WindowFrame中 。 這可以使用add()方法來實現。

范例:

//Program using the acm library
import javax.swing.*;
import java.awt.Color;
import acm.program.*;public class FrameExample extends GraphicsProgram{private JFrame f;private JPanel p;public FrameExample(){f = new JFrame("Code 2 Learn");p=new JPanel();}public void launchMyFrame(){f.setSize(300,300);f.setLayout(null); //Override the default layout managerp.setSize(300, 50);p.setBackground(Color.BLACK);f.add(p);f.setVisible(true);}public static void main(String args[]){FrameExample fe=new FrameExample();fe.launchMyFrame();}
}
/Program using the w/o acm library
import javax.swing.*;
import java.awt.*;public class FrameNPanel{private Frame f;private Panel p;public FrameNPanel(){f = new Frame("Code 2 Learn");p=new Panel();}public void launchMyFrame(){f.setSize(300,300);f.setLayout(null); //Override the default layout managerp.setSize(300, 50);p.setBackground(Color.BLACK);f.add(p);f.setVisible(true);}public static void main(String args[]){FrameNPanel fe=new FrameNPanel();fe.launchMyFrame();}
}

我已經解釋了可以放置物品的面板,框架和窗戶。 但是我們在上一教程中沒有設置窗口,面板或框架的布局,而是使用默認布局。
現在,我們將了解可用于使用和操作GUI的布局上的不同類型。

容器布局:

容器中每個組件的布局均由布局管理器控制 。 每個容器(例如PanelFrames )都有一個與之關聯的默認布局管理器,我們可以更改它。

布局管理器:

Java編程語言隨附以下布局管理器:

  • FlowLayout – FlowLayout是PanelApplet的默認布局管理器。 當組件放置在具有布局管理器作為FlowLayout的容器中時,組件將彼此相鄰放置以形成流(就像直線上的學生一樣)
  • BorderLayoutBorderLayout是Window, Dialog和Frame的默認布局管理器。 應用BorderLayout時,將根據給出的選擇使組件顯示在邊界上,即WEST,SOUTH,NORTH,CENTER或EAST。
  • GridLayout –此布局管理器提供了將組件放置在容器上的靈活性
  • CardLayout –它使用兩個或多個共享相同顯示的組件(如下所示)。
  • GridBagLayoutGridBagLayout是Java環境中最靈活,最復雜的布局管理器。 它放置的是組件以及行和列,因此允許我們進行行跨度或列跨度以便放置在組件上。

注意 :

默認情況下,所有Window類都使用BorderLayout管理器,而Panel類則使用FlowLayout管理器。 名為setLayout()的函數用于更改容器的布局(示例中如下所示)。

一個簡單的FlowLayout示例:

import java.awt.*;public class GUI2 {private Frame f;private Button but1;private Button but2;public GUI2(){f = new Frame("CODE 2 LEARN");but1 = new Button("Like Code 2 Learn");but2 = new Button("Don't Like Code 2 Learn");}public void generateGUI(){f.setLayout(new FlowLayout());f.add(but1);f.add(but2);f.pack();f.setVisible(true);}public static void main(String[] args) {GUI2 launchgui= new GUI2();launchgui.generateGUI();}
}

參考: Java Code Tutorial – 1和Java Graphics Tutorial -II,來自我們的JCG合作伙伴 Farhan Khwaja,位于Code 2 Learn博客上。


翻譯自: https://www.javacodegeeks.com/2012/02/graphics-tutorial.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373259.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

文件上傳預覽

<fieldset><legend>使用readAsDataUrl()方法預覽圖片</legend><input type"file" name"fileUpload" id"fileUpload" onchange"filePrevImg(this.files);" multiple"true" /><ul id"prevUpl…

c++強制類型轉換:dynamic_cast、const_cast 、static_cast、reinterpret_cast

一、介紹 dynamic_cast: 通常在基類和派生類之間轉換時使用const_cast: 主要針對const和volatile的轉換static_cast: 一般的轉換(no run-time check)通常&#xff0c;如果你不知道該用哪個&#xff0c;就用這個。 reinterpret_cast: 用于進行沒有任何關聯之間的轉換&…

K8S Pod Terminating/Unknown故障排查

一、pod異常出現現象 優雅終止周期(Graceful termination period): 當pod被刪除時&#xff0c;會進入"Terminating"狀態&#xff0c;等待容器優雅關閉。如果容器關閉所需時間超過默認期限(默認30秒)&#xff0c;則pod將保持在"Terminating"狀態。 Finalize…

矩陣指數 matlab,矩陣指數 - MATLAB Simulink Example - MathWorks 中國

方法 1&#xff1a;加權平方expmdemo1 是以下著作中算法 11.3.1 的實現&#xff1a;Golub, Gene H. and Charles Van Loan.Matrix Computations, 3rd edition.Baltimore, MD:Johns Hopkins University Press, 1996.% Scale A by power of 2 so that its norm is < 1/2 .[f,e…

向導設計模式

我們都喜歡巫師……。 &#xff08;我的意思是軟件向導&#xff09;。 我們總是很高興跳上那些“下一步”按鈕&#xff0c;就像我們在我們的時髦的小雞上跳舞一樣。 因此&#xff0c;今天我們將您心愛的向導帶入您的編碼經驗中。 讓我們跳入一個例子。 假設您要設計一個Conserv…

IO(三)字節流練習

public class ByteStreamDemo {/*int available(); 可以取得輸入文件的大小&#xff08;字節個數&#xff09;,沒有返回0void close(); 關閉輸入流abstract int read(); 讀取一個字節&#xff0c;并把讀…

基于matlab的人臉五官邊緣檢測方法,人臉邊緣檢測方法研究與仿真

人臉表情是人類情感的主載體之一,它含有豐富的人體行為信息。通過臉部表情能夠表達人微妙的情緒反應以及對應的心理狀態[1],人臉表情識別技術隨著人們對表情信息的日益重視而受到關注,現已成為人們研究的熱點。基于幾何特征提取是一個快速、直接、有效的人臉表情識別方法,運用基…

GWT –利弊

我喜歡JavaScript。 隨著jQuery和Mootools的出現&#xff0c;我對JavaScript的熱愛僅增加了很多倍。 只要有選擇&#xff0c;我就可以將上述框架中的任何一個用于我開發的任何Web應用程序。 但是進入服務行業后&#xff0c;我不得不一次次屈服于客戶的壓力&#xff0c;并在他們…

秦九韶算法matlab實驗報告,數值分析上機實驗報告.doc

實驗報告一題目&#xff1a; (緒論) 非線性方程求解及誤差估計摘要&#xff1a;非線性方程的解析解通常很難給出&#xff0c;因此線性方程的數值解法就尤為重要。本實驗采用兩種常見的求解方法二分法、Newton法和改進的Newton法。可以節省計算機的計算時間&#xff0c;還能減小…

Flex 布局教程:語法篇

網頁布局&#xff08;layout&#xff09;是CSS的一個重點應用。 布局的傳統解決方案&#xff0c;基于盒狀模型&#xff0c;依賴 display屬性 position屬性 float屬性。它對于那些特殊布局非常不方便&#xff0c;比如&#xff0c;垂直居中就不容易實現。 2009年&#xff0c;W3…

練習錯誤

form:阻止表單提交的方法一&#xff1a;在form標簽中給出以下代碼&#xff1a; 1 onsubmit "return False" 方法二&#xff1a;設置事件阻止 1 e.preventDefault() js中判斷&#xff1a;只要非數字都應該表示為字符串 1 if(Email.indexOf("") -1){ 2 …

JavaFX 2中的PopupMenu

創建彈出菜單 要在JavaFX中創建Popupmenu&#xff0c;可以使用ContextMenu類。 您向其中添加MenuItems&#xff0c;也可以使用SeparatorMenuItem創建可視分隔符。 在下面的示例中&#xff0c;我選擇子類ContextMenu并將MenuItems添加到其構造函數中。 public class Animatio…

matlab中CH指標聚類評價指標,MATLAB聚類有效性評價指標(外部)

MATLAB聚類有效性評價指標(外部)作者&#xff1a;凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/更多內容&#xff0c;請看標簽&#xff1a;MATLAB、聚類前提&#xff1a;數據的真實標簽已知&#xff01;1. 歸一化互信息(Normalized Mutual information)定義程序functio…

學習進度表

周數 專業學習目標 專業學習時/每分鐘 新增代碼量 知識技能總結 第六周 ps的圖像處理 80 30 看書加以實踐 第七周 數據結構的鏈式結構 100 50 多做習題加以鞏固知識 第八周 網頁設計 80 30 多多練習&#xff0c;學會用代碼設計 第九周 圖片美工 70 30 慢慢學會運用軟…

Axis通過wsdd部署Web Service

axis網上的教程很多&#xff0c;不過搜來搜去&#xff0c;總是只有那么幾篇。仔細看了一下那幾篇文章&#xff0c;都感覺到不是自己想要的&#xff0c;所以自己整理了一篇分享一下。 本文介紹axis應用的一個小例子&#xff0c;沒有麻煩的命令行操作&#xff0c;只需照下面的步驟…

彈簧特性

1.概述 本教程將展示如何通過XML或Java配置在Spring中設置和使用屬性 。 在Spring 3.1之前 &#xff0c;將新的屬性文件添加到Spring并使用屬性值并不像它那樣靈活和健壯。 從Spring 3.1開始 &#xff0c;新的Environment和PropertySource抽象大大簡化了此過程。 2.通過XML名…

php-cgi cpu很高,php-cgi占用cpu資源過高的解決方法

轉的網上的&#xff0c;不過對PHP-CGI菜鳥的人&#xff0c;還是有點幫助的。1. 一些php的擴展與php版本兼容存在問題&#xff0c;實踐證明 eAccelerater與某些php版本兼容存在問題&#xff0c;具體表現時啟動php-cgi進程后&#xff0c;運行10多分鐘&#xff0c;奇慢無比&#x…

《做中學》讀后有感

《做中學》讀后有感 最近讀了婁老師的“做中學”系列文章&#xff0c;有很大感觸&#xff0c;今天想著重談一談我在學習方面收到的啟發。 如何成功get一項技能 如果問到“如何開始get一項技能”&#xff0c;我想我們應該是最有發言權的一代。從小就被爸爸媽媽引導著參加各種課外…

多表之間關聯查詢

內連接 jion on 自連接 本表進行內連接的查詢形式 外鏈接&#xff1a; 左鏈接 寫法&#xff1a;select 字段 from 表1 t left join 表2 s on t.字段1 s.字段1 where 條件 或者 作用&#xff1a;保證左邊的表的數據全部顯示&#xff0c;包括空的 右鏈接 寫法 &#xff1a;sele…

php文件夾0777,PHP代碼mkdir(‘images’,’0777′)創建一個具有411權限的文件夾!為什么?...

我發誓這是昨天的工作.然而,現在下面的代碼破壞文件夾沒有問題,但創建一個具有411權限的新文件夾應該是777.我的代碼昨天這樣做.這樣做的目的是壓縮文件夾,傳遞文件夾,刪除圖像,然后為圖像創建新目錄.有人能告訴我我做錯了什么或我應該做什么&#xff1f;謝謝function delete_d…