1. 程式人生 > >java新手,用repaint方法重新繪圖

java新手,用repaint方法重新繪圖

    最近在學習paint方法的使用,想著用一個按鈕來改變背景圖片(就像我們平時做的那樣),然後各方查資料。當然,資料是查不到多少的,因為百度首頁的前幾頁的那幾個部落格,除了一個原創之外(雖然寫的很晦澀難懂),其他的都是濫竽充數之徒!最讓我惱火的是百度知道里面的登徒子,一個個為了點點積分而胡亂回答,真不知道那幾位問問題的同路那個時候想法。

    所以我決定把我自己的repaint程式碼貼上,因為我冥思苦想了幾個小時,終於都想明白了怎麼去使用repaint才能達到自己的要求。很蠢吧?花了那麼多的時間。

目的:按一個按鈕來更換圖片;

使用:repaint 、paintcomponent 、ActionListener

以下是原始碼,在eclipse nexo3.0 上可以使用

package home;



import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class PaintTest extends JPanel
{
JFrame frame ;
JButton btn1 ;
JButton btn2 ;
String Loca ;

ImageIcon ii ;
Image i ;

public PaintTest ()
{
Loca = "/image/piano.jpg" ;
}
public void paintComponent (Graphics g)
{
ii = new ImageIcon (PaintTest.class.getResource(Loca)) ;
i = ii.getImage() ;/*這裡是得到一個img物件,給drawimage的*/
super.paintComponent (g)  ;
g.drawImage (i,0,0,400,300,this) ; 
}
public void set ()
{
frame = new JFrame () ;

btn2 = new JButton ("b") ;/*這個button是用來測試畫出來的影象是否會覆蓋這個按鈕的,結果是不會*/
btn2.setBounds(0, 0, 50, 50);
this.add(btn2) ;

btn1 = new JButton ("a") ;
btn1.setBounds(0, 400, 50, 50) ;
btn1.addActionListener(new ActionListener ()
{


@Override
public void actionPerformed(ActionEvent e)/*監聽器,如果這裡看不懂的話先去看看那部分的知識。這裡總結起來就是:按一個鍵,改變Loca,再重繪*/
{
Loca = "/image/pic.jpg" ;/*Loca是用來放地址的,給上面的imageicon得到一個icon物件(不是image)*/
repaint () ;
}

}) ;

this.setLayout(null) ;
this.add(btn1) ;
frame.add(this) ;
frame.setSize(500, 500) ;
frame.setVisible(true) ;
}
public static void main (String [] args) 
{
PaintTest pt = new PaintTest () ;
pt.set() ;
}
}

先吃飯,有些額外的說明以後再說。

希望能幫助到大家!

相關推薦

java新手repaint方法重新繪圖

    最近在學習paint方法的使用,想著用一個按鈕來改變背景圖片(就像我們平時做的那樣),然後各方查資料。當然,資料是查不到多少的,因為百度首頁的前幾頁的那幾個部落格,除了一個原創之外(雖然寫的很晦澀難懂),其他的都是濫竽充數之徒!最讓我惱火的是百度知道里面的登徒子,一

Java中打印出來完全相同的兩個字串equals方法比較返回的卻是false的原因

今天遇到一個奇怪的問題,兩個字串打印出來完全一樣,可是用equals比較就是返回false,單獨寫了兩個字串列印比較也是true,到底什麼原因呢。 原來一個是通過ResourceBundle讀取資原始

定義抽象類Shape抽象方法為showArea()求出面積並顯示定義矩形類Rectangle,正方形類Square,圓類 Circle根據各自的屬性,用showArea方法求出各自的面積在main方法中構造3個對象調showArea方法。(體現多態)

子類 protected new 都是 package 使用 類指針 3.1 shape 實現多態的三個條件:1.要有繼承2.要有抽象方法重寫3.用父類指針(引用)指向子類對象 重載重寫重定義的區別: 1.重載:在同一個類中進行;  編譯時根據參數類型和個數決定方法調用; 

Java中調JavaScript方法

兩個 tint work object c ash 沒有 .net nashorn alc 我們都知道腳本語言非常靈活,在處理某些問題的時候 Java 實現用十幾行來寫,用 js 可能不到十行就寫完,並且非常簡潔,那麽有沒有一種優雅的方式將 Java 與腳本語言結合呢,在

shell定義帶變量的模板直接修改變量這種方法再也不用擔心正則匹配不準的問題了

shell定義帶變量的模板 shell直接修改文件內的變量 shell不用正則修改文件內容 shell修改配置文件 之前用shell 寫腳本,有時候不光要定義一個 配置文件,很多時候還要有個模板,不同的環境直接替換相同的模板內容來用;然而,在這之前,一直都是用的 sed 、 awk 、grep

Ant Design ProsetFieldsValue方法給巢狀到Form表單中的DatePicker元件設定預設值

 其實用setFieldsValue或者獲取setState方法都可以設定DatePicker的預設值。 setState方法: <FormItem label="日期選擇框"> {getFieldDecorator('date', {

無線網路覆蓋-javaMath.sqrt()時必須要注意小數問題

時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3 描述 我們的樂樂同學對於網路可算得上是情有獨鍾,他有一個計劃,那就是用無線網覆蓋鄭州大學。 現在學校給了他一個機會,因此他要購買很多的無線路由。現在他正在部署某條大道的網路,而學校只允許把他的無線路由器放在路的正中間。我們預設這條大道

在使用SmartRefreshLayout中onResume方法會載入重複資料以及解決

先描述一下問題,就是在使用SmartRefreshLayout本身是沒有問題的,但是我需要在進入這個介面的時候就進行載入,就用到了onResume();在這個方法裡我進行了網路請求資料,但是出現了這麼一個問題,在我點選跳轉回來的資料載入第二頁就會多出來幾條資料,下面標紅的是我的解決方法。

Redis 存取 java 物件 hash 雜湊命令儲存物件的各個屬性和採用 String 字串命令儲存序列化後的物件之開銷對比

轉自:http://www.jfinal.com/share/460 用一個簡單的User物件做試驗,共有4個屬性,型別分別為整型,整型,字串,字串。 測試程式碼 public class TestRedis { private static final Cache testCach

怎麼將圖片壓縮到最小什麼方法

圖片怎麼才能壓縮到最小呢?在我們的工作中,圖片檔案是不可缺少的,怎麼樣將圖片壓縮到最小呢?下面為大家介紹一下圖片壓縮到最小的操作方法。 1:首先需要將自己的圖片檔案準備好,放置在可以隨時進行新增的位置。 2:在瀏覽器找到一款壓縮軟體,將壓縮軟體安裝到自己的電腦中。開啟

一個變數一個常量equals()方法比較讓咱們看看到底是常量放前面好啊還是變數放前面好

其實說白了,如果是兩個都是變數,那就放哪都行沒啥區別;(有點廢話了) 現在主要就是有一個是常量,大家應該知道吧,equals()方法是在Object類裡定義的,也就是說任何物件都可以呼叫equals()方法,但是物件在呼叫方法的時候,如果物件為null那系統執行就會報

劍指Offer面試題33:把陣列排成最小的數 Java 實現三種方法

題目:把陣列排成最小的數    輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這3個數字能排成的最小數字321323. 演算法分析: 1.最直接的辦法就是先求出這個陣列中所有數字

[c/c++] 一個程序有多個執行緒什麼方法讓主執行緒不退出更好佔用資源最少效率最高?

[c/c++] 一個程序有多個執行緒,用什麼方法讓主執行緒不退出更好,要求佔用資源最少,效率最高? 我所知道的不讓主執行緒退出的方法有: 一,死迴圈:while(1);/ for(;;); 二,pause(); 讓主執行緒暫停等待訊號使其退出 三,另一種死迴圈whil

Docker 出現 “device or resource busy” 異常一下方法解決

雖然這個錯誤很少見,但還是記錄一下,防止以後找不到cat /proc/mounts | grep "mapper/docker" | awk '{print $2}'umount /var/lib/docker/devicemapper/mnt/ddf1dd91bbf46dc

Java學習——方法中傳遞參數分簡單類型與復雜類型(引用類型)編程計算100+98+96+。。。+4+2+1的值遞歸方法實現

dig oid 傳遞 system alt style 類型 遞歸 gen package hello; public class digui { public static void main(String[] args) { /

JAVA實現實現字元重複指定字元擴充字串移除字串中的指定字元字串反轉 不用直接反轉的方法

import java.util.Scanner; public class StringsTest{ public static void main(String[] args){ //實現字元重複 Scanner scanner = new Scanner(Syst

JAVA以UTF-8編碼格式匯出CSV檔案office開啟產生亂碼的解決方法

一般java匯出為csv檔案程式碼如下 OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream

java 移動節點排序號進行重新排序以閉包形式實現ztree增刪改查操作其中排序運用到此方法

package com.avic.custom.controller.ct; import java.util.HashMap; import java.util.Map; /** * 移動節點重新排序操作 * @author Administrator * */

javapost方法獲取json資料與伺服器進行互動

下載好以後匯入依賴包,下面sendInfo方法就是互動方法,可以直接拿去用: public static String sendInfo(String sendurl, String data)

JAVA以UTF-8匯出CSV檔案excel開啟產生亂碼的解決方法

先上一段程式碼(上好的程式碼,多年陳釀) OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream(), "UTF-8"); // 要輸出的內容 result = (String)co