‘壹’ java中swing绘制图形问题
//完整程序如下
import java.awt.*;
import javax.swing.*;
public class DrawPolygon extends JFrame {
boolean closed;
boolean filled;
int[] x,y;
int count;
boolean canDraw=false;
public DrawPolygon() {
super("画多边形");
setBounds(100,100,400,300);
count=0;
setVisible(true);
while (count==0) {
try {
count=Integer.parseInt(JOptionPane.showInputDialog(this,"输入多边形点个数","顶点",JOptionPane.INFORMATION_MESSAGE));
if (count<3 || count>10) {
JOptionPane.showMessageDialog(this,"输入的顶点数不在3-10范围之内","顶点",JOptionPane.ERROR_MESSAGE);
count=0;
}
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(this,"输入的不是合法整数","顶点",JOptionPane.ERROR_MESSAGE);
}
}
x=new int[count];
y=new int[count];
for (int i=0; i<count; i++) {
y[i]=0;
while (y[i]==0) {
try {
String s=JOptionPane.showInputDialog(this,"输入第"+String.valueOf(i+1)+"个点的坐标:\n例如:80,120","顶点",JOptionPane.INFORMATION_MESSAGE);
if (s==null) {
return;
}
x[i]=Integer.parseInt(s.substring(0,s.indexOf(',')));
y[i]=Integer.parseInt(s.substring(s.indexOf(',')+1));
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(this,"输入的点坐标不合法","顶点",JOptionPane.ERROR_MESSAGE);
}
}
}
closed=false;
filled=false;
if (JOptionPane.showConfirmDialog(this,"是否封闭图形?","封闭",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.YES_OPTION) {
closed=true;
}
if (JOptionPane.showConfirmDialog(this,"是否填充图形?","填充",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.YES_OPTION) {
filled=true;
}
canDraw=true;
repaint();
}
public void paint(Graphics g) {
g.clearRect(0,0,getWidth(),getHeight());
if (canDraw && count>=3 && count<=10) {
if (filled) {
g.fillPolygon(x,y,count);
}
if (closed) {
g.drawPolygon(x,y,count);
} else {
g.drawPolyline(x,y,count);
}
}
}
public static void main(String[] args) {
new DrawPolygon();
}
}
‘贰’ 用Java实现画图板功能的程序,请问如何编写一个绘制三角形的程序段
class Triangle extends drawings//空心三角形类
{
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke,
BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL));
g2d.drawLine((int)((x1+x2)/2),Math.min(y1,y2),Math.max(x1,x2),Math.max(y1,y2));
g2d.drawLine(Math.max(x1,x2),Math.max(y1,y2),Math.min(x1,x2),Math.max(y1,y2));
g2d.drawLine(Math.min(x1,x2),Math.max(y1,y2),(int)((x1+x2)/2),Math.min(y1,y2));
}
}
以上是通过绘制三条直线作为三角形的三条边来绘制三角形.
class fillTriangle extends drawings//实心三角形
{
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
int mx=(int)((x1+x2)/2);
int[] x={mx,Math.max(x1,x2),Math.min(x1,x2)};
int[] y={Math.min(y1,y2),Math.max(y1,y2),Math.max(y1,y2)};
g2d.fillPolygon(x,y,3);
}
}
以上是用填充多边形的方式填充一个三角形,如果把最后的:g2d.fillPolygon(x,y,3)改为g2d.drawPolygon(x,y,3); 则是以绘制多边形的方式绘制空心三角形.
这里说明一下:因为(x1,y1,x2,y2)只能确定一个矩形区域,即鼠标拉动的起点和终点确定的矩形区域所以可以有多种方式确定三角形的三个顶点,我这个用的三个顶点是:
点1( (x1+x2)/2, min(y) ) 点2( max(x),max(y) ) 点3( min(x),max(y) )
你的补充内容太多了,没心情看啊,太累了
‘叁’ java为图形填充颜色
只需把g.drawOval(...)改成g.setColor(Color.RED); g.fillOval(..)就行了,drawOval是只画不填充,而fillOval是画并且填充,填充的颜色是由g.setColor()方法的参数决定的。
‘肆’ java画多边形和三角形
python">好像不难不过我不是用java写的思路大概就这样
self.list=[]
defonStart(self,event):
self.list.append((event.x,event.y))
defonPolygondraw(self):
i=askinteger("问题","你要几边形啊",minvalue=1,
maxvalue=7)
polygon=[]
foriinrange(i):
polygon.append(self.list[-i-1])
self.panel.create_polygon(polygon)
‘伍’ java里面怎么画多边形
如果是可以用正方形,三角形,圆形等基本图形拼接出来的多边形,可以使用area,然后对基本图形取交集或者并集即可
‘陆’ java里面怎么画多边形
我采取的方式是画直线,在点击右键的时候再把第一个点和最后一个点连接起来,这个是不规则的多边形,像五角星,六角星那些规则的,就用drawPolygon(int[] xPoints,int[] yPoints,int nPoints)方法,对于每个点的X,和y这个就要自己去计算,有规律的,都是按比例去计算得到点。
‘柒’ java 画多边形。。
自己查api,Graphics类有个花封闭曲线的方法,传进去一组x坐标,一组Y坐标
要么用AlphaComposite做颜色混合,选择src_over
SRC_OVER混合规则把源像素(新的像素)组合到目的像素(原有像素)上面,这样重叠的部分就只显示了源像素的颜色。如果你开始渲染一个蓝色矩形,然后把一个红色矩形和它部分重叠,则重叠的部分会被渲染为红色。换句话说最后被渲染成的颜色将在最上面显示出来。
‘捌’ Java绘图类Graphics中drawPolygon方法绘多边形原理
60 10 , 35 90, 110 40 以此类推卅。。。int[] x是装的X的所有坐标,y[]亦如此。 对应下就好了
‘玖’ java中的Graphics类方法可以绘制三角形吗怎样表示,如果不可,又怎样绘制
可以的。Griphics类中有一个画多边形的方法
public void drawPolygon(int xPoints[],int yPoints[],int nPoints)//绘制多边形
xPoints[]存放的是各个点的x坐标,yPoints[]存放的是各个点的y坐标,nPoints是有几条边
public void fillPolygon()//填充多边形
‘拾’ 用java编程: 在JFrame窗体中绘制五角星,并用红色填充
importjava.awt.Color;
importjava.awt.Graphics;
importjava.awt.Point;
importjavax.swing.JLabel;
{
=-3847465547528967067L;
privatePointpointA;
privatePointpointB;
privatePointpointC;
privatePointpointD;
privatePointpointE;
privatePointpointLeftInner;
privatePointpointRightInner;
privateintpix;
privatestaticColorbgColor=Color.YELLOW;
privatestaticColorfieldColor=Color.RED;
publicstaticvoidsetBgColor(ColorbgColor){
Pentagram.bgColor=bgColor;
}
publicstaticvoidsetFieldColor(ColorfieldColor){
Pentagram.fieldColor=fieldColor;
}
/**只有width有效,把label弄成正方的*/
publicvoidsetBounds(intx,inty,intwidth,intheight){
super.setBounds(x,y,width,width);
}
/**只有width有效,把label弄成正方的*/
publicvoidsetSize(intwidth,intheight){
super.setSize(width,width);
}
publicvoidsetSize(intsize){
setSize(size,size);
}
publicPentagram(intsize){
pix=size/12;
setSize(pix*12);
initPoints();
}
privatevoidinitPoints(){
pointA=newPoint(6*pix,0);//上边中间点
pointB=newPoint(0,4*pix);//左边上面点
pointC=newPoint(12*pix,4*pix);//右边上面点
pointD=newPoint(3*pix,12*pix);//左边下面点
pointE=newPoint(9*pix,12*pix);//右边下面点
pointLeftInner=newPoint(5*pix,4*pix);//左边里面的点
pointRightInner=newPoint(7*pix,4*pix);//右边里面的点
}
privatevoiddraw(Graphicsg){
fillPolygon(g,pointA,pointLeftInner,pointRightInner);
fillPolygon(g,pointB,pointE,pointRightInner);
fillPolygon(g,pointC,pointD,pointLeftInner);
}
/**
*已知点,填充多边形。
*@paramg画笔
*@parampoints已知的'点'们
*/
privatevoidfillPolygon(Graphicsg,Point...points){
int[]xPoints=newint[points.length];
int[]yPoints=newint[points.length];
for(inti=0;i<points.length;i++){
xPoints[i]=points[i].x;
yPoints[i]=points[i].y;
}
g.fillPolygon(xPoints,yPoints,points.length);
}
publicvoidpaint(Graphicsg){
g.setColor(bgColor);
g.fillRect(0,0,12*pix,12*pix);
g.setColor(fieldColor);
draw(g);
}
}
/**以下是测试代码*/
importjavax.swing.JFrame;
importjavax.swing.JLabel;
publicclassTest{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame();
frame.setBounds(200,200,400,400);
JLabellabel=newPentagram(frame.getSize().height/2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(label);
frame.setVisible(true);
}
}