找到了,很久以前寫的一個簡單畫圖,呵呵~當時要求用AWT寫,很難受。
在湟中等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網(wǎng)站設計制作、成都網(wǎng)站設計 網(wǎng)站設計制作按需制作網(wǎng)站,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,成都品牌網(wǎng)站建設,營銷型網(wǎng)站建設,外貿(mào)網(wǎng)站建設,湟中網(wǎng)站建設費用合理。
package net.miqiang.gui;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
/**
* 簡單畫圖板程序
* 好久沒用 AWT 了,寫起來真別扭,如果用 swing 會很舒服,有空再改寫吧。
*
* @author 米強
*
*/
public class TestMain extends Frame {
// 畫板
private Palette palette = null;
// 顯示當前顏色的面板
private Panel nonceColor = null;
// 畫筆粗細
private Label drawWidth = null;
// 畫筆端點的裝飾
private Label drawCap = null;
// 選取顏色按鈕的監(jiān)聽事件類
private ButtonColorAction buttonColorAction = null;
// 鼠標進入按鈕后光標樣式的監(jiān)聽事件類
private ButtonCursor buttonCursor = null;
// 畫筆樣式的監(jiān)聽事件
private ButtonStrokeAction buttonStrokeAction = null;
/**
* 構造方法
*
*/
public TestMain() {
// 設置標題欄文字
super("簡易畫圖板");
// 構造一個畫圖板
palette = new Palette();
Panel pane = new Panel(new GridLayout(2, 1));
// 畫筆顏色選擇器
Panel paneColor = new Panel(new GridLayout(1, 13));
// 12 個顏色選擇按鈕
Button [] buttonColor = new Button[12];
Color [] color = {Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green, Color.magenta, Color.orange, Color.pink, Color.red, Color.white, Color.yellow};
// 顯示當前顏色的面板
nonceColor = new Panel();
nonceColor.setBackground(Color.black);
paneColor.add(nonceColor);
buttonColorAction = new ButtonColorAction();
buttonCursor = new ButtonCursor();
for(int i = 0; i buttonColor.length; i++){
buttonColor[i] = new Button();
buttonColor[i].setBackground(color[i]);
buttonColor[i].addActionListener(buttonColorAction);
buttonColor[i].addMouseListener(buttonCursor);
paneColor.add(buttonColor[i]);
}
pane.add(paneColor);
// 畫筆顏色選擇器
Panel paneStroke = new Panel(new GridLayout(1, 13));
// 控制畫筆樣式
buttonStrokeAction = new ButtonStrokeAction();
Button [] buttonStroke = new Button[11];
buttonStroke[0] = new Button("1");
buttonStroke[1] = new Button("3");
buttonStroke[2] = new Button("5");
buttonStroke[3] = new Button("7");
buttonStroke[4] = new Button("9");
buttonStroke[5] = new Button("11");
buttonStroke[6] = new Button("13");
buttonStroke[7] = new Button("15");
buttonStroke[8] = new Button("17");
buttonStroke[9] = new Button("■");
buttonStroke[10] = new Button("●");
drawWidth = new Label("3", Label.CENTER);
drawCap = new Label("●", Label.CENTER);
drawWidth.setBackground(Color.lightGray);
drawCap.setBackground(Color.lightGray);
paneStroke.add(drawWidth);
for(int i = 0; i buttonStroke.length; i++){
paneStroke.add(buttonStroke[i]);
buttonStroke[i].addMouseListener(buttonCursor);
buttonStroke[i].addActionListener(buttonStrokeAction);
if(i = 8){
buttonStroke[i].setName("width");
}else{
buttonStroke[i].setName("cap");
}
if(i == 8){
paneStroke.add(drawCap);
}
}
pane.add(paneStroke);
// 將畫筆顏色選擇器添加到窗體中
this.add(pane, BorderLayout.NORTH);
// 將畫圖板添加到窗體中
this.add(palette);
// 添加窗口監(jiān)聽,點擊關閉按鈕時退出程序
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 設置窗體 ICON 圖標
this.setIconImage(Toolkit.getDefaultToolkit().createImage("images/palette.png"));
// 設置窗口的大小
this.setSize(new Dimension(400, 430));
// 設置窗口位置,處于屏幕正中央
this.setLocationRelativeTo(null);
// 顯示窗口
this.setVisible(true);
}
/**
* 程序入口
*
* @param args
* 字符串數(shù)組參數(shù)
*/
public static void main(String[] args) {
new TestMain();
}
/**
* 選取顏色按鈕的監(jiān)聽事件類
* @author 米強
*
*/
class ButtonColorAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
Color color_temp = ((Button)e.getSource()).getBackground();
nonceColor.setBackground(color_temp);
palette.setColor(color_temp);
}
}
/**
* 鼠標進入按鈕變換光標樣式監(jiān)聽事件類
* @author 米強
*
*/
class ButtonCursor extends MouseAdapter {
public void mouseEntered(MouseEvent e) {
((Button)e.getSource()).setCursor(new Cursor(Cursor.HAND_CURSOR));
}
public void mouseExited(MouseEvent e) {
((Button)e.getSource()).setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
/**
* 設置畫筆的監(jiān)聽事件類
* @author 米強
*
*/
class ButtonStrokeAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
Button button_temp = (Button) e.getSource();
String name = button_temp.getName();
if(name.equalsIgnoreCase("width")){
drawWidth.setText(button_temp.getLabel());
palette.setStroke(Float.parseFloat(button_temp.getLabel()));
}else if(name.equalsIgnoreCase("cap")){
drawCap.setText(button_temp.getLabel());
if(button_temp.getLabel().equals("■")){
palette.setStroke(BasicStroke.CAP_SQUARE);
}else if(button_temp.getLabel().equals("●")){
palette.setStroke(BasicStroke.CAP_ROUND);
}
}
}
}
}
/**
* 畫板類
*
* @author 米強
*
*/
class Palette extends Panel implements MouseListener, MouseMotionListener {
// 鼠標 X 坐標的位置
private int mouseX = 0;
// 上一次 X 坐標位置
private int oldMouseX = 0;
// 鼠標 Y 坐標的位置
private int mouseY = 0;
// 上一次 Y 坐標位置
private int oldMouseY = 0;
// 畫圖顏色
private Color color = null;
// 畫筆樣式
private BasicStroke stroke = null;
// 緩存圖形
private BufferedImage image = null;
/**
* 構造一個畫板類
*
*/
public Palette() {
this.addMouseListener(this);
this.addMouseMotionListener(this);
// 默認黑色畫筆
color = new Color(0, 0, 0);
// 設置默認畫筆樣式
stroke = new BasicStroke(3.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
// 建立 1280 * 1024 的 RGB 緩存圖象
image = new BufferedImage(1280, 1024, BufferedImage.TYPE_INT_RGB);
// 設置顏色
image.getGraphics().setColor(Color.white);
// 畫背景
image.getGraphics().fillRect(0, 0, 1280, 1024);
}
/**
* 重寫 paint 繪圖方法
*/
public void paint(Graphics g) {
super.paint(g);
// 轉換為 Graphics2D
Graphics2D g2d = (Graphics2D) g;
// 獲取緩存圖形 Graphics2D
Graphics2D bg = image.createGraphics();
// 圖形抗鋸齒
bg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 設置繪圖顏色
bg.setColor(color);
// 設置畫筆樣式
bg.setStroke(stroke);
// 畫線,從上一個點到新的點
bg.drawLine(oldMouseX, oldMouseY, mouseX, mouseY);
// 將緩存中的圖形畫到畫板上
g2d.drawImage(image, 0, 0, this);
}
/**
* 重寫 update 方法
*/
public void update(Graphics g) {
this.paint(g);
}
/**
* @return stroke
*/
public BasicStroke getStroke() {
return stroke;
}
/**
* @param stroke 要設置的 stroke
*/
public void setStroke(BasicStroke stroke) {
this.stroke = stroke;
}
/**
* 設置畫筆粗細
* @param width
*/
public void setStroke(float width) {
this.stroke = new BasicStroke(width, stroke.getEndCap(), stroke.getLineJoin());
}
/**
* 設置畫筆端點的裝飾
* @param cap 參考 java.awt.BasicStroke 類靜態(tài)字段
*/
public void setStroke(int cap) {
this.stroke = new BasicStroke(stroke.getLineWidth(), cap, stroke.getLineJoin());
}
/**
* @return color
*/
public Color getColor() {
return color;
}
/**
* @param color 要設置的 color
*/
public void setColor(Color color) {
this.color = color;
}
public void mouseClicked(MouseEvent mouseEvent) {
}
/**
* 鼠標按下
*/
public void mousePressed(MouseEvent mouseEvent) {
this.oldMouseX = this.mouseX = mouseEvent.getX();
this.oldMouseY = this.mouseY = mouseEvent.getY();
repaint();
}
public void mouseReleased(MouseEvent mouseEvent) {
}
/**
* 鼠標進入棋盤
*/
public void mouseEntered(MouseEvent mouseEvent) {
this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
}
/**
* 鼠標退出棋盤
*/
public void mouseExited(MouseEvent mouseEvent) {
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
/**
* 鼠標拖動
*/
public void mouseDragged(MouseEvent mouseEvent) {
this.oldMouseX = this.mouseX;
this.oldMouseY = this.mouseY;
this.mouseX = mouseEvent.getX();
this.mouseY = mouseEvent.getY();
repaint();
}
public void mouseMoved(MouseEvent mouseEvent) {
}
}
public class TestStar {
public static void main(String[] args) {
String star = "*";
for (int i = 0; i 5; i++) {
if (i == 0) {
System.out.print(" " + star);
System.out.println();
}
if (i == 1) {
for (int z = 0; z 4; z++) {
System.out.print(" " + star);
}
System.out.println();
}
if (i == 2) {
System.out.print(" ");
for (int x = 0; x 3; x++) {
System.out.print(" " + star);
}
System.out.println();
}
if (i == 3) {
for (int y = 0; y 2; y++) {
System.out.print(" " + star + " ");
}
}
}
}
}
是好使的 但是我沒找到畫五角星有什么規(guī)律(五角星好象不是正規(guī)圖形吧?)如果還有什么要求的話 補充問題(如果是用*填充所有的東西 不包括 “ ”的話 我可以重新再給你寫一個)
public class test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
StaticDemo st=new StaticDemo();
System.out.println("靜態(tài)變量x="+st.getX());
System.out.println("實例變量y="+st.getY());
StaticDemo a= new StaticDemo();
StaticDemo b= new StaticDemo();
a.setX(1); a.setY(2);
b.setX(3); b.setY(4);
System.out.println("靜態(tài)變量a.x="+a.getX());
System.out.println("實例變量a.y="+a.getY());
System.out.println("靜態(tài)變量b.x="+b.getX());
System.out.println("實例變量b.y="+b.getY());
}
}
class StaticDemo {
static int x;
int y;
public static int getX() { return x; }
public static void setX(int x) { StaticDemo.x = x; }
public int getY() { return y; }
public void setY(int y) { this.y = y; }
}
這才是正確的,需要注意的是:靜態(tài)變量可以用類名.方法名 而實例變量時通過對象.方法名
代碼:
import java.awt.*;
import javax.swing.*;
public class W extends JFrame
{
public static void main(String[] args)
{
new W();
}
W()
{
JPanel p=new JPanel();
JButton b=new JButton("ok");
b.addActionListener(e-
{
b.setForeground(Color.BLUE);
b.setText("鼠標點擊!");
//setTitle("鼠標點擊!");
});
p.add(b);
add(p,BorderLayout.NORTH);
setTitle("事件測試窗口");
setSize(200,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
運行結果截圖:
實驗1
Java開發(fā)工具及程序設計初步
實驗目的
?
能夠搭建Java的開發(fā)環(huán)境
?
熟悉常用的JDK操作命令的使用
?
熟悉Java程序的編寫和編譯過程
?
了解常用Java開發(fā)工具的使用
實驗內(nèi)容
實驗練習1:搭建和使用JDK
1.JDK的下載和安裝
JDK是SUN公司免費在網(wǎng)上發(fā)布的,我們可以進入SUN公司的網(wǎng)站()下載并安裝。JDK安裝完成后,進行如下操作:
(1)查看并寫出JDK的安裝目錄______________________________;
(2)查看主目錄bin文件夾中常用的JDK命令文件,寫出java、javac等JDK命令所在的文件目錄_________________________________;
(3)在Windows中打開一個命令行窗口,打開命令行窗口的方法有兩種:
?選擇“開始”→“所有程序”→“附件”→“命令提示符”
?選擇“開始”→“運行…”命令,在打開的“運行”窗口中輸入“cmd”命令并“確定”。
(4)在打開的命令行窗口中,分別執(zhí)行java和javac命令,如:C:\java
查看執(zhí)行結果,看是否輸出如下的java命令的幫助信息(如圖1-1所示)。
圖1-1:java命令的幫助信息
C:\javac
查看執(zhí)行結果,看是否輸出如下的javac命令的幫助信息(如圖1-2所示)。
圖1-2:javac命令的幫助信息
如果上面的信息均能輸出,說明JDK的安裝成功,基本上可正常使用。
2.操作系統(tǒng)環(huán)境變量的使用
操作系統(tǒng)的環(huán)境變量是在操作系統(tǒng)中定義的變量,可被該操作系統(tǒng)上運行的程序訪問。JDK中主要有兩個相關的操作系統(tǒng)環(huán)境變量,即path和classpath。
(1)查看操作系統(tǒng)環(huán)境變量
?在命令行窗口中執(zhí)行set命令
如:C:\set
查看set命令的輸出結果,在set命令的輸出結果中可看到許多等式,其中等號的左邊是環(huán)境變量的名稱,等號的右邊是環(huán)境變量的取值。
命令:set
環(huán)境變量名,可查看指定的某個環(huán)境變量的設置情況。
執(zhí)行命令:C:\set
path,查看path變量的設置情況。
?在“環(huán)境變量”窗口中查看環(huán)境變量
用鼠標右鍵單擊“我的電腦”,選擇“屬性”命令,在打開的“系統(tǒng)屬性”對話框中選擇“高級”→“環(huán)境變量”,打開“環(huán)境變量”窗口。
在“環(huán)境變量”窗口中,有用戶變量和系統(tǒng)變量兩種環(huán)境變量。其中,用戶環(huán)境變量只對某個用戶起作用;系統(tǒng)環(huán)境變量對該系統(tǒng)上的所有用戶都有效。
當我們以某一用戶身份登錄Windows時,它所使用的變量是系統(tǒng)變量和用戶變量的總和。
如果一個變量在系統(tǒng)變量窗口和用戶變量窗口都進行了設置,那么這個變量的取值在一般情況下為系統(tǒng)變量的取值與用戶變量的取值相加;但有時也會出現(xiàn)用戶變量的取值覆蓋系統(tǒng)變量取值的情況。不管是什么情況,最終都以在命令行窗口中通過set命令查看到的結果為準。
(2)設置系統(tǒng)的環(huán)境變量
?在命令窗口中執(zhí)行set命令
格式:set
變量名=[變量值]
執(zhí)行如下命令,查看執(zhí)行結果。
C:\set
Xx=aa
//新建一個環(huán)境變量并設置其取值
C:\set
Xx
//查看該環(huán)境變量
C:\set
Xx=
//取消環(huán)境變量的設置
C:\set
//查看環(huán)境變量
注意:在命令行窗口中設置的環(huán)境變量,只在該命令行窗口中起作用。
?在“環(huán)境變量”窗口中進行設置
可使用“新建”或“編輯”按鈕。
注意:①
在“環(huán)境變量”窗口中設置的環(huán)境變量對以后所有的應用程序和命令行窗口都起作用,但不會影響原來運行的應用程序和啟動的命令行窗口。
②
在“用戶環(huán)境變量”窗口中進行的設置需要在注銷重新登錄后才起作用。
(3)path環(huán)境變量的作用和設置
環(huán)境變量path的值指定了JDK命令搜索路徑,即當我們要執(zhí)行某個命令時,操作系統(tǒng)首先會在當前目錄下查找這個命令,如果當前目錄下沒有這個命令程序,操作系統(tǒng)會沿著path環(huán)境變量中所指定的目錄依次去查找這個命令文件,并以最先找到的為準。
觀察path變量的取值情況,path變量可以有多個取值,每個值代表一條搜索路徑,它們之間用“;”分隔。
在命令行窗口中執(zhí)行如下命令:
C:\set
path
//查看path環(huán)境變量
C:\set
path=
或set
path=C:\
//取消path變量的設置或重新設置path的值
C:\set
path
C:\java
或javac
//執(zhí)行java或javac命令
會出現(xiàn)如下錯誤信息(如圖1-3所示):
圖1-3:錯誤信息
分析錯誤的原因:_____________________________________________________
改正的方法:__________________________________
實驗練習2:Java程序的編寫與編譯過程
1.一個簡單的Java程序的編寫與編譯
第一步:先在磁盤上創(chuàng)建保存程序文件的目錄(文件夾),如:D:\javawork\lesson1。
第二步:在“記事本”中創(chuàng)建并編輯Java源程序文件Test1.java,程序代碼如下:
class
Test1
{
}
保存文件,擴展名為.java。
第三步:在命令行窗口中,對源文件Test1.java進行編譯。
可參考如下命令:
如果當前盤當前目錄為C:\,先將當前目錄設置為D:\javawork\lesson1。
C:\d:
D:\cd
ja*w*
D:\javaworkcd
le*
D:\javawork\lesson1javac
Test1.java
如果編譯成功,則不出現(xiàn)任何提示,回到命令提示符狀態(tài)下。打開保存源文件的文件夾,查看編譯生成的字節(jié)碼文件Test1.class。
第四步:運行字節(jié)碼文件Test1.class。
D:\javawork\lesson1java
Test1
執(zhí)行結果出現(xiàn)異常,如圖1-4所示。
圖1-4:執(zhí)行出現(xiàn)異常
出現(xiàn)異常的原因是:缺少執(zhí)行應用程序的入口main方法。main方法的聲明必須是public
static
void
main(String
args[]){}。修改源程序代碼并重新編譯,源程序代碼如下:
class
Test1
{
public
static
void
main(String
args[])
{
}
}
編譯完成后,執(zhí)行字節(jié)碼文件。
在main方法中,添加輸出的語句并重新編譯執(zhí)行,程序代碼如下:
class
Test1
{
public
static
void
main(String
args[])
{
System.out.println("Hello
World!");
}
}
輸出結果如圖1-5所示。
圖1-5:程序執(zhí)行結果
2.classpath環(huán)境變量的作用與設置
環(huán)境變量calsspath用于指定Java類的路徑,即設置classpath的作用是告訴Java運行系統(tǒng)的類加載器到哪里去尋找要執(zhí)行的類。
在前面打開的命令行窗口中繼續(xù)執(zhí)行以下命令:
D:\java
Test1
執(zhí)行結果如圖1-6所示:
圖1-6:改變當前目錄后重新執(zhí)行的結果
會發(fā)現(xiàn)程序執(zhí)行出現(xiàn)異常:無法找到Test1類。說明在classpath變量中沒有將Test1.class文件所在的目錄設置為搜索路徑,在命令行窗口中執(zhí)行命令:
D:\set
classpath=%classpath%;d:\javawork\lesson1
重新執(zhí)行程序,則運行結果正常。
調試練習
本節(jié)中的程序Test2.java不能正確地編譯,修改所有的語法錯誤,使程序能夠成功編譯。程序編譯之后,執(zhí)行程序,比較輸出結果與示例輸出,然后排除所有可能的邏輯錯誤,示例輸出演示了代碼更正后程序的正確輸出結果。
1.示例輸出
2.錯誤的代碼
//Test2.java
import
javax.swing.JOptionPane;
public
class
test2
{
public
static
void
main(string
args[])
{
JOptionPane.showMessageDialog(null,"Hello")
}
}
一下代碼僅供參考
package?com.kidd.test.zhidao;
import?java.util.NoSuchElementException;
import?java.util.Scanner;
public?class?Test?{
public?static?void?main(String[]?args)?{
Scanner?sc?=?new?Scanner(System.in);
int?a?=?0;
int?b?=?0;
boolean?next?=?false;
while?(!next)?{
System.out.print("請輸入兩個整數(shù)(用空格分隔):");
try?{
a?=?sc.nextInt();
b?=?sc.nextInt();
next?=?true;
}?catch?(NoSuchElementException?e)?{
System.out.println("輸入有誤,請重新輸入.");
sc.nextLine();
continue;
}
}
System.out.printf("最大值為:%d\n",?a??b???a?:?b);
}
}