setColor:設(shè)置畫(huà)筆的顏色。
成都創(chuàng)新互聯(lián)公司專注于黎城企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城建設(shè)。黎城網(wǎng)站建設(shè)公司,為黎城等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
drawLine:在指定坐標(biāo)的(x1,y1)與(x2,y2)兩點(diǎn)之間畫(huà)條線段。
drawRect:以坐標(biāo)點(diǎn)(x,y)為左上角,繪制指定寬高的矩形邊框。
fillRect:以坐標(biāo)點(diǎn)(x,y)為左上角,繪制指定寬高的矩形區(qū)域。
drawRoundRect:以坐標(biāo)點(diǎn)(x,y)為左上角,繪制指定寬高和指定圓角的圓角矩形邊框。
fillRoundRect:以坐標(biāo)點(diǎn)(x,y)為左上角,繪制指定寬高和指定圓角的圓角矩形區(qū)域。
drawOval:以坐標(biāo)點(diǎn)(x,y)為外切矩形的左上角,繪制指定橫縱半徑的橢圓輪廓。注意,如果橫縱半徑的數(shù)值相等,此時(shí)橢圓就變成了圓形。
fillOval:以坐標(biāo)點(diǎn)(x,y)為外切矩形的左上角,繪制指定橫縱半徑的橢圓區(qū)域。
drawArc:以坐標(biāo)點(diǎn)(x,y)為外切矩形的左上角,繪制指定橫縱半徑和指定角度的圓弧。
fillArc:以坐標(biāo)點(diǎn)(x,y)為外切矩形的左上角,繪制指定橫縱半徑和指定角度的扇形。
setFont:設(shè)置畫(huà)筆的字體。
drawString:在當(dāng)前位置的橫縱偏移距離處繪制文本。
此外,Graphics也支持幾種簡(jiǎn)單的管理操作,包括平移畫(huà)筆、擦除區(qū)域、裁剪畫(huà)布等功能,對(duì)應(yīng)的處理方法說(shuō)明如下:
translate:平移畫(huà)筆至坐標(biāo)點(diǎn)(x,y)。
clearRect:清除某塊矩形區(qū)域,該矩形以坐標(biāo)點(diǎn)(x,y)為左上角,且符合指定寬高。
clipRect:裁剪某塊矩形區(qū)域,該矩形以坐標(biāo)點(diǎn)(x,y)為左上角,且符合指定寬高。該方法的執(zhí)行效果與clearRect正好相反,clearRect方法清除了矩形內(nèi)部的所有圖案;而clipRect方法清除了矩形外部的所有圖案,只留下矩形內(nèi)部的圖案。
繪制圖案與字符串的過(guò)程與繪制圖像一樣,都是重寫(xiě)自定義控件的paint方法,在該方法中調(diào)用畫(huà)筆對(duì)象的各種繪圖方法。接下來(lái)按照之前的圖像視圖依樣畫(huà)瓢定義一個(gè)繪畫(huà)視圖DrawView,變動(dòng)之處在于繪制控件的paint方法,并據(jù)此演示幾種圖案的實(shí)現(xiàn)效果。首先準(zhǔn)備繪制一條黑色線段,線段的起點(diǎn)位于控件的左上角,終點(diǎn)位于控件的右下角,則相應(yīng)的繪制方法示例如下:
1
2
3
g.setColor(Color.BLACK); // 設(shè)置畫(huà)筆的顏色為黑色
// 在指定坐標(biāo)的(x1,y1)與(x2,y2)兩點(diǎn)之間畫(huà)條線段
g.drawLine(0, 0, getWidth(), getHeight());
主界面的代碼比較簡(jiǎn)單,有關(guān)繪畫(huà)視圖的調(diào)用可參考如下的代碼片段:
1
2
3
4
5
Panel panelCenter = new Panel(); // 創(chuàng)建中央面板
DrawView draw = new DrawView(); // 創(chuàng)建一個(gè)繪畫(huà)視圖
draw.setSize(360, 180); // 設(shè)置繪畫(huà)視圖的寬高
panelCenter.add(draw); // 在中央面板上添加繪畫(huà)視圖
frame.add(panelCenter, BorderLayout.CENTER); // 把中央面板添加到窗口的中間位置
運(yùn)行修改后的測(cè)試代碼,彈出的線段繪制窗口界面如下圖所示。
接著繪制一個(gè)矩形邊框,假設(shè)邊框?yàn)榧t色,則對(duì)應(yīng)的繪制方法如下所示:
1
2
3
g.setColor(Color.RED); // 設(shè)置畫(huà)筆的顏色為紅色
// 以坐標(biāo)點(diǎn)(x,y)為左上角,繪制指定寬高的矩形邊框
g.drawRect(10, 10, getWidth() - 20, getHeight() - 20);
同樣運(yùn)行測(cè)試界面代碼,彈出的矩形繪制窗口界面如下圖所示。
再繪制一個(gè)綠色的圓角矩形,但它是實(shí)心的,此時(shí)繪制過(guò)程應(yīng)當(dāng)調(diào)用fillRoundRect方法:
1
2
3
g.setColor(Color.GREEN); // 設(shè)置畫(huà)筆的顏色為綠色
// 以坐標(biāo)點(diǎn)(x,y)為左上角,繪制指定寬高和指定圓角的圓角矩形區(qū)域
g.fillRoundRect(10, 10, getWidth() - 20, getHeight() - 20, 50, 50);
運(yùn)行主界面的測(cè)試代碼,彈出的圓角矩形繪制窗口如下圖所示。
繼續(xù)繪制一個(gè)藍(lán)色的橢圓輪廓,注意它是空心的,此時(shí)繪制過(guò)程應(yīng)當(dāng)調(diào)用drawOval方法:
1
2
3
g.setColor(Color.BLUE); // 設(shè)置畫(huà)筆的顏色為藍(lán)色
// 以坐標(biāo)點(diǎn)(x,y)為外切矩形的左上角,繪制指定橫縱半徑的橢圓輪廓
g.drawOval(10, 10, getWidth() - 20, getHeight() - 20);
運(yùn)行主界面的測(cè)試代碼,彈出的橢圓繪制窗口界面如下圖所示。
還可以繪制一個(gè)橙色的扇形,所謂扇形是由某段圓弧連接兩端的橫縱半徑組成,因此它相當(dāng)于實(shí)心的圓弧,此時(shí)繪制過(guò)程應(yīng)當(dāng)調(diào)用dfillArc方法:
1
2
3
g.setColor(Color.ORANGE); // 設(shè)置畫(huà)筆的顏色為橙色
// 以坐標(biāo)點(diǎn)(x,y)為外切矩形的左上角,繪制指定橫縱半徑和指定角度的扇形
g.fillArc(10, 10, getWidth() - 20, getHeight() - 20, 0, 90);
運(yùn)行主界面的測(cè)試代碼,彈出的扇形繪制窗口界面如下圖所示。
最后使用畫(huà)筆繪制幾個(gè)文字,同時(shí)指定這段文字的顏色、字體以及大小,則對(duì)應(yīng)的繪制方法如下所示:
1
2
3
g.setColor(Color.BLACK); // 設(shè)置畫(huà)筆的顏色為黑色
g.setFont(new Font("大號(hào)粗體", Font.BOLD, 50)); // 設(shè)置畫(huà)筆的字體
g.drawString("春天花會(huì)開(kāi)", 50, 50); // 在當(dāng)前位置的橫縱偏移距離處繪制文本
運(yùn)行主界面的測(cè)試代碼,彈出的文字繪制窗口界面如下圖所示。
這個(gè)覆蓋 paint 方法就可以了。
我?guī)湍銓?xiě)好了,我采用的方法是:把內(nèi)容畫(huà)在一個(gè) JPanel 里,然后用 setContentPane 添加到了 JFrame 上,這樣做是因?yàn)槎ㄎ粏?wèn)題:JFrame 有邊框,繪制組件的時(shí)候坐標(biāo)是算邊框占位的,但是 drawLine 的時(shí)候是不算的,為了統(tǒng)一算邊框,就用了這個(gè)辦法。
下面是兩個(gè)文件,第一個(gè) MyFrame 是一個(gè)完整的工具,MyFrame 因?yàn)槔^承了 JFrame,用起來(lái)和 JFrame 一樣用,另外提供了一個(gè)接口,addComponent(JComponent) 方法可以向里添加組件,會(huì)自動(dòng)連線的。你只要 import ui 就可以用了。
然后第二個(gè)是測(cè)試類,可以看到我在 setVisible 之后添加的組件,它也能正確顯示,證明 addComponent 方法可以隨時(shí)調(diào)用,不用另外刷新。
---------------------------- MyFrame.java -----------------------------
package ui;
import java.awt.*;
import javax.swing.*;
import java.util.*;
class MyPanel extends JPanel {
private VectorJComponent comps;
public MyPanel () {
comps = new VectorJComponent();
setLayout(null);
}
public void paint (Graphics g) {
g.setColor(Color.BLACK);
for (int i=1; icomps.size(); i++) {
g.drawLine(comps.get(0).getLocation().x+comps.get(0).getSize().width/2,
comps.get(0).getLocation().y+comps.get(0).getSize().height/2,
comps.get(i).getLocation().x+comps.get(i).getSize().width/2,
comps.get(i).getLocation().y+comps.get(i).getSize().height/2);
}
super.paintComponents(g);
}
public void addComponent (JComponent comp) {
comp.setOpaque(true);
comps.add(comp);
add(comp);
repaint();
}
}
public class MyFrame extends JFrame {
private MyPanel mp;
public MyFrame () {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mp = new MyPanel();
setContentPane(mp);
}
public void addComponent (JComponent comp) {
mp.addComponent(comp);
}
}
---------------------------- TestMyFrame.java -----------------------------
import ui.*;
import javax.swing.*;
import javax.swing.border.*;
public class TestMyFrame {
public static void main (String args[]) {
MyFrame mf = new MyFrame();
mf.setSize(500, 500);
mf.setLocationRelativeTo(null);
mf.setVisible(true);
testAddComponent(mf);
}
public static void testAddComponent (MyFrame mf) {
JLabel l1 = new JLabel("l1");
l1.setBorder(new EtchedBorder());
l1.setBounds(200, 100, 20, 20);
mf.addComponent(l1);
JLabel l2 = new JLabel("l2");
l2.setBounds(100, 150, 20, 20);
l2.setBorder(new EtchedBorder());
mf.addComponent(l2);
JLabel l3 = new JLabel("l3");
l3.setBounds(150, 150, 20, 20);
l3.setBorder(new EtchedBorder());
mf.addComponent(l3);
JLabel l4 = new JLabel("l4");
l4.setBounds(200, 150, 20, 20);
l4.setBorder(new EtchedBorder());
mf.addComponent(l4);
}
}
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;public class DrawLine extends Frame
implements WindowListener
{
static ArrayList lbArray; DrawLine(){
setBounds(150,150,300,300);
setVisible(true);
Label lb0=new Label("Hello");
addWindowListener(this);
add(lb0);
lb0.setBounds(50,30,40,20);
Label lb1=new Label("World!");
add(lb1);
lb1.setBounds(50,90,40,20); Label lb2=new Label("Java");
add(lb2);
lb2.setBounds(50,150,40,20);
lbArray.add(lb0);
lbArray.add(lb1);
lbArray.add(lb2);
repaint(); }
public void windowClosed(WindowEvent w)
{
System.exit(0);
}
public void windowClosing(WindowEvent w)
{
dispose();
}
public void windowOpened(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void paint(Graphics g)
{
super.paint(g); if(lbArray.size()=1)
{
g.setColor(Color.red);
int x1,y1,x2,y2;
Label lb=(Label)lbArray.get(0);
Rectangle rc=lb.getBounds();
x1=rc.x+rc.width/2;
y1=rc.y+rc.height/2;
for(int i=1;ilbArray.size();i++)
{
lb=(Label)lbArray.get(i);
rc=lb.getBounds();
x2=rc.x+rc.width/2;
y2=rc.y+rc.height/2;
g.drawLine(x1,y1,x2,y2);
x1=x2;
y1=y2;
}
}
} public static void main(String[] args){
lbArray=new ArrayList(10);
new DrawLine();
}
} 終于做了個(gè)滿足你要求的東西。要知道我昨天和你說(shuō)過(guò)我并不常用Java。趕快采納吧。