重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
使用java画圆要用到绘图类Graphics,下面是实例代码和运行效果:
创新互联主要从事成都做网站、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务青海,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务: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面板,用于绘图区域
class MyPanel extends JPanel{
//覆盖JPanel
// Graphics 是绘图的重要类,可以理解成一支画笔
public void paint(Graphics g){
// 1. 调用父类函数完成初始化任务
// 这句话不可以少
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);
}
这种方法的优点: 代码码量少,简洁
缺点:指定颜色后,不好修改。不够灵活
方法二:指定构造方法中有一个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;
}
}
方法二的优点:方便灵活,能通过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的圆.红色. } } }
您好,现给你一个简单MFC对话框例子,工程名为TEXT:
(1)Text.h:
class CTextApp : public CWinApp
{
public:
CTextApp();
~CTextApp();
// 重写
public:
virtual BOOL InitInstance();
ULONG_PTR gdiplusToken;
// 实现
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()。否则,将无法创建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(InitCtrls);
CWinApp::InitInstance();
//GDI+初始化
GdiplusStartupInput StartupInput;
GdiplusStartup(gdiplusToken, StartupInput, NULL);
AfxEnableControlContainer();
// 创建 shell 管理器,以防对话框包含
// 任何 shell 树视图控件或 shell 列表视图控件。
CShellManager *pShellManager = new CShellManager;
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
CTextDlg dlg;
m_pMainWnd = dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置处理何时用
// “确定”来关闭对话框的代码
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置处理何时用
// “取消”来关闭对话框的代码
}
// 删除上面创建的 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);
}