使用java畫圓要用到繪圖類Graphics,下面是實例代碼和運行效果:
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、成都網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務青海,十年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575
package?com.dikea.demo01;
import?java.awt.*;
import?javax.swing.*;
//?java繪圖原理
public?class?demo_01??extends?JFrame?{
MyPanel?mp?=?null;
public?static?void?main(String[]?args)?{
//?TODO?自動生成的方法存根
demo_01?demo01?=?new?demo_01();
}
public?demo_01(){
mp?=?new?MyPanel();
this.add(mp);
this.setSize(400,?300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//?定義一個MyPanel面板,用于繪圖區(qū)域
class?MyPanel?extends?JPanel{
//覆蓋JPanel
//?Graphics?是繪圖的重要類,可以理解成一支畫筆
public?void?paint(Graphics?g){
//??1.?調用父類函數(shù)完成初始化任務
//??這句話不可以少
super.paint(g);
//?先畫出一個圓圈
g.drawOval(100,?100,?30,?30);
}
}
代碼復制進ide編程工具,運行效果如下:
public class Exam
{
public static void main(String[] args)
{
Circle c=new Circle(3,4,5);
System.out.printf("圓心:(%f,%f),半徑:%f,面積:%f",c.x,c.y,c.r,c.countArea());
}
}
class Circle
{
public Circle()
{
this(0,0,0);
}
public Circle(double x,double y,double r)
{
this.x=x;
this.y=y;
this.r=r;
}
public double countArea()
{
return Math.PI*r*r;
}
/*private*/public double x,y,r;
}
java swing中指定圓的顏色,最常用的有兩種方法
方法一:畫圓的時候就指定畫筆的顏色,那么畫出的顏色就是制定的顏色。
public?void?paint(Graphics?g)?{
g.setColor(Color.BLUE);
g.fillOval(50,?8,?50,?50);
}
這種方法的優(yōu)點: 代碼碼量少,簡潔
? ? ? ? ? ? 缺點:指定顏色后,不好修改。不夠靈活
方法二:指定構造方法中有一個Color變量。設置get set方法
class?MyJPanel?extends?JPanel{
Color?c;
public?MyJPanel(Color?c)?{
this.c?=?c?;
}
@Override
public?void?paint(Graphics?g)?{
g.setColor(c);
g.fillOval(50,?8,?50,?50);
}
public?Color?getC()?{
return?c;
}
public?void?setC(Color?c)?{
this.c?=?c;
}
}
方法二的優(yōu)點:方便靈活,能通過set get方法輕松修改圓圈顏色
缺點:代碼稍多,改變顏色后需要repaint()一下
代碼案例供參考
import?java.awt.BorderLayout;
import?java.awt.Color;
import?java.awt.Graphics;
import?javax.swing.JFrame;
import?javax.swing.JPanel;
public?class?Circle?extends?JFrame{
MyJPanel?jp;
public?Circle()?{
jp?=?new?MyJPanel(Color.RED);
this.setLayout(new?BorderLayout());
this.add(jp,BorderLayout.CENTER);
this.setBounds(300,?200,?150,?100);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
try?{
Thread.sleep(500);
jp.setC(new?Color(210,250,0));
jp.repaint();
}?catch?(InterruptedException?e)?{
}
}
public?static?void?main(String[]?args)?{
new?Circle();
}
}
class?MyJPanel?extends?JPanel{
Color?c;
public?MyJPanel(Color?c)?{
this.c?=?c?;
}
@Override
public?void?paint(Graphics?g)?{
g.setColor(c);
g.fillOval(50,?8,?50,?50);
}
public?Color?getC()?{
return?c;
}
public?void?setC(Color?c)?{
this.c?=?c;
}
}
代碼如下:
import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class TestSw extends JFrame { public static void main(String[] args) { new TestSw(); } public TestSw(){ super("Test"); this.setSize(new Dimension(400,300)); this.setContentPane(new Mypane()); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } class Mypane extends JPanel{ public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); g.setXORMode(Color.white); g.drawArc(20, 20, 100, 100, 0, 360); ///此方法將畫一個直徑100的圓.紅色. } } }
您好,現(xiàn)給你一個簡單MFC對話框例子,工程名為TEXT:
(1)Text.h:
class CTextApp : public CWinApp
{
public:
CTextApp();
~CTextApp();
// 重寫
public:
virtual BOOL InitInstance();
ULONG_PTR gdiplusToken;
// 實現(xiàn)
DECLARE_MESSAGE_MAP()
};
extern CTextApp theApp;
注:ULONG_PTR gdiplusToken; ~CTextApp(); 為新添加的東西
(2)Text.cpp里
CTextApp::~CTextApp()
{
//GDI+釋放
GdiplusShutdown(gdiplusToken);
}
BOOL CTextApp::InitInstance()
{
// 如果一個運行在 Windows XP 上的應用程序清單指定要
// 使用 ComCtl32.dll 版本 6 或更高版本來啟用可視化方式,
//則需要 InitCommonControlsEx()。否則,將無法創(chuàng)建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 將它設置為包括所有要在應用程序中使用的
// 公共控件類。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(InitCtrls);
CWinApp::InitInstance();
//GDI+初始化
GdiplusStartupInput StartupInput;
GdiplusStartup(gdiplusToken, StartupInput, NULL);
AfxEnableControlContainer();
// 創(chuàng)建 shell 管理器,以防對話框包含
// 任何 shell 樹視圖控件或 shell 列表視圖控件。
CShellManager *pShellManager = new CShellManager;
// 標準初始化
// 如果未使用這些功能并希望減小
// 最終可執(zhí)行文件的大小,則應移除下列
// 不需要的特定初始化例程
// 更改用于存儲設置的注冊表項
// TODO: 應適當修改該字符串,
// 例如修改為公司或組織名
SetRegistryKey(_T("應用程序向導生成的本地應用程序"));
CTextDlg dlg;
m_pMainWnd = dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置處理何時用
// “確定”來關閉對話框的代碼
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置處理何時用
// “取消”來關閉對話框的代碼
}
// 刪除上面創(chuàng)建的 shell 管理器。
if (pShellManager != NULL)
{
delete pShellManager;
}
// 由于對話框已關閉,所以將返回 FALSE 以便退出應用程序,
// 而不是啟動應用程序的消息泵。
return FALSE;
}
注:GdiplusStartupInput StartupInput; GdiplusStartup(gdiplusToken, StartupInput, NULL);為新添加的東西
(3)stdafx.h
//GDI+
#includegdiplus.h
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")
注:以上為為新添加的東西,需要的頭文件就是上而這些
(4)接著你就可以使用LinearGradientBrush, 在TextDlg.cpp
void CTextDlg::OnPaint()
{
Graphics graphics(this-m_hWnd);
LinearGradientBrush linGrBrush(
Point(0,0),
Point(200,0),
Color(255,255,0,0),
Color(255,0,0,255));
graphics.FillRectangle(linGrBrush, 0, 0, 200, 200);
}