问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

GUI画图板(绘图板)设计,用Java编写程序代码!!谢谢!!

发布网友 发布时间:2022-04-22 22:52

我来回答

2个回答

热心网友 时间:2023-09-27 16:49

只有矩形有圆形能移动,其它实现起来麻烦点,办法有的只是代码太多。
画圆弧改成了画曲线,圆弧稍麻烦,当然方法是很简单的,你可以自己思考一下。
双击13个颜色中的任意一个都会弹出颜色选择器。
有保存与打开功能。扩展名请用 .jdr
基本满足条件,细节可能不是很好,另,代码比较乱,怕不好看懂咯,呼呼。

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;

public class JDraw {
public static void main(String[] args) {
JFrame f=new JFrame();
f.setDefaultCloseOperation(3);
f.setSize(880,600);
f.setLocationRelativeTo(null);
f.getContentPane().add(M.c);
f.getContentPane().add(M.m,"South");
f.setVisible(true);
}
}

class CVS extends Component implements ComponentListener,MouseListener,MouseMotionListener{
public void componentHidden(ComponentEvent e) {}
public void componentMoved(ComponentEvent e) {}
public void componentResized(ComponentEvent e) {resized();}
public void componentShown(ComponentEvent e) {}
private void resized() {
int w=this.getWidth();
int h=this.getHeight();
tbuff=new BufferedImage(w,h,3);
makeBuff(w,h);
}
private void makeBuff(int w,int h) {
Graphics g = tbuff.getGraphics();
g.drawImage(buff,0,0,null);
g.dispose();
buff=new BufferedImage(w,h,3);
g=buff.getGraphics();
g.drawImage(tbuff,0,0,null);
g.dispose();
}

BufferedImage buff,tbuff;
CVS(){
this.addComponentListener(this);
this.addMouseListener(this);
this.addMouseMotionListener(this);
buff=new BufferedImage(1,1,3);
}

public void paint(Graphics gr){
Graphics2D g = buff.createGraphics();
g.setBackground(new Color(0xff000000,true));
g.clearRect(0,0,getWidth(),getHeight());
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
M.sa.drawAll(g);
if(M.ts!=null)
M.ts.draw(g);
g.dispose();
gr.drawImage(buff,0,0,this);
gr.dispose();
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
M.mp(e.getPoint());
}
public void mouseReleased(MouseEvent e) {
M.mr(e.getPoint());
}
public void mouseDragged(MouseEvent e) {
M.md(e.getPoint());
}
public void mouseMoved(MouseEvent e) {}
}
class Menu extends JComponent implements MouseListener,ActionListener{
JComboBox sbox,method;
CLabel[] cl;
JCheckBox fillC,drawB;
JRadioButton fc,bc;
ButtonGroup bg;
JButton clear,up,down,save,load;
Menu(){
this.setLayout(new FlowLayout());
method=new JComboBox(new Object[]{"draw","move","erase",});
add(method);
sbox=new JComboBox(new Object[]{"Pt","Ln","Rect","Cir","Arc",});
add(sbox);
cl=new CLabel[13];
for(int i=0; i<cl.length; i++){
cl[i]=new CLabel();
cl[i].addMouseListener(this);
add(cl[i]);
}
fc=new JRadioButton("fc",true);
bc=new JRadioButton("bc");
bg=new ButtonGroup();
bg.add(fc);bg.add(bc);
add(fc);add(bc);
fc.setOpaque(true);
bc.setOpaque(true);
fc.setBackground(Color.white);
bc.setBackground(Color.blue);
fillC=new JCheckBox("Fill",true);
drawB=new JCheckBox("Draw",true);
fillC.addActionListener(this);
drawB.addActionListener(this);
add(fillC);add(drawB);
clear=new JButton("clear");
clear.addActionListener(this);
add(clear);
up=new JButton("zUp");
up.addActionListener(this);
add(up);
down=new JButton("zDown");
down.addActionListener(this);
add(down);
save=new JButton("Save");
save.addActionListener(this);
add(save);
load=new JButton("Load");
load.addActionListener(this);
add(load);
}
public void mouseClicked(MouseEvent e) {
JLabel l=(JLabel)e.getSource();
if(e.getClickCount()==2){
Color sc=JColorChooser.showDialog(null, "Color chooser", l.getBackground());
l.setBackground(sc);
mousePressed(e);
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
Color c=((JLabel)e.getSource()).getBackground();
if(fc.isSelected())
fc.setBackground(c);
else if(bc.isSelected())
bc.setBackground(c);
M.cp();
}
public void mouseReleased(MouseEvent e) {}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==clear)M.clear();
else if(e.getSource()==up)M.up();
else if(e.getSource()==down)M.down();
else if(e.getSource()==save)M.save();
else if(e.getSource()==load)M.load();
else if(e.getSource()==fillC||e.getSource()==drawB)M.cp();
}
}
class CLabel extends JLabel{
static Color[] cs={Color.red,Color.orange,Color.yellow,Color.green,Color.cyan,
Color.blue,Color.magenta,Color.magenta.brighter(),
Color.white,Color.black,Color.gray,Color.LIGHT_GRAY,Color.DARK_GRAY,};
static int i;
CLabel(){
this.setOpaque(true);
this.setBackground(cs[i++]);
this.setBorder(BorderFactory.createLineBorder(Color.black));
this.setPreferredSize(new Dimension(10,20));
}
}
class M{
static JFileChooser jfc=new JFileChooser();
static Menu m=new Menu();
static CVS c=new CVS();
static SA sa=new SA();
static S ts=null,selected=null;
static Color fc,bc;
static void clear(){
sa.ss.clear();
c.repaint();
}
public static void cp() {
System.out.println(selected);
if(selected!=null){
selected.fillColor=m.fc.getBackground();
selected.borderColor=m.bc.getBackground();
selected.fc=m.fillC.isSelected();
selected.db=m.drawB.isSelected();
c.repaint();
}
}
public static void up() {
if(selected!=null){
sa.upZ(selected);
c.repaint();
}
}
public static void down(){
if(selected!=null){
sa.downZ(selected);
c.repaint();
}
}
static{
jfc.setFileFilter(new FileNameExtensionFilter("JDraw file (*.jdraw,*.jdr)","jdr","jdraw"));
}
static void save(){
int x=jfc.showSaveDialog(c);
if(x==JFileChooser.APPROVE_OPTION){
File f = jfc.getSelectedFile();
try{
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(f));
oos.writeObject(sa);
oos.flush();
oos.close();
}catch(Exception e){}
}
}
static void load(){
int x=jfc.showOpenDialog(c);
if(x==JFileChooser.APPROVE_OPTION){
File f = jfc.getSelectedFile();
try{
ObjectInputStream oos=new ObjectInputStream(new FileInputStream(f));
Object r=oos.readObject();
if(r!=null){
sa=(SA)r;
c.repaint();
}
oos.close();
}catch(Exception e){e.printStackTrace();}
}
}
static int mx,my,tx,ty,ox,oy;
static int pc=0,pmax;
static int sm;
static boolean ne=true;
static int mid;
static void mp(Point p){
mid=m.method.getSelectedIndex();
if(mid==0){
if(ne){
mx=p.x;my=p.y;
pc=0;
sm=m.sbox.getSelectedIndex();
pmax=sm==4?2:1;
ne=false;
}
++pc;
}
else if(mid==1){
checkSel(p);
mx=p.x;my=p.y;
}
else if(mid==2){
checkSel(p);
if(selected!=null){
sa.ss.remove(selected);
c.repaint();
}
}
}
private static void checkSel(Point p) {
selected=null;
for(int i=sa.ss.size();i>0; i--)
if(sa.ss.get(i-1).shape.contains(p)){
selected=sa.ss.get(i-1);break;
}
sa.select(selected);
c.repaint();
}
static void mt(){
Shape s=null;
int cx,cy,cw,ch;
switch(sm){
case 0:
case 2:
cx=Math.min(mx,tx);
cy=Math.min(my,ty);
cw=Math.abs(mx-tx);
ch=Math.abs(my-ty);
if(sm==0)
s=new Ellipse2D.Double(cx,cy,cw,ch);
else
s=new Rectangle(cx,cy,cw,ch);
break;
case 1:
s=new Line2D.Float(mx,my,tx,ty);
break;
case 3:
cw=Math.abs(mx-tx);
ch=Math.abs(my-ty);
int cd=(int)Math.sqrt(Math.pow(mx-tx,2)+Math.pow(my-ty,2))*2;
cx=mx-cd/2;
cy=my-cd/2;
s=new Ellipse2D.Double(cx,cy,cd,cd);
break;
case 4:
Path2D p=new Path2D.Double();
p.moveTo(mx,my);
if(pc==1){
p.lineTo(tx, ty);
}
else{
p.quadTo(ox,oy,tx,ty);
}
s=p;
break;
}
ts=new S(s,m.fc.getBackground(),m.bc.getBackground(),m.fillC.isSelected(),m.drawB.isSelected(),null);
c.repaint();
}
static void md(Point p){
if(mid==0){
if(!sa.ss.isEmpty()){
sa.ss.get(sa.ss.size()-1).sel=false;
}
if(pc>1){
ox=p.x;oy=p.y;
}
else{
tx=p.x;ty=p.y;
}
mt();
}
else if(mid==1){
if(selected!=null){
moveTo(selected,p);
c.repaint();
}
}
else if(mid==2){
checkSel(p);
if(selected!=null){
sa.ss.remove(selected);
c.repaint();
}
}
}
static void moveTo(S s, Point p) {
if(s.shape instanceof Rectangle){
Rectangle r=(Rectangle)s.shape;
r.setLocation(r.x+p.x-mx,r.y+p.y-my);
mx=p.x;my=p.y;
}
else if(s.shape instanceof Ellipse2D){
Ellipse2D e=(Ellipse2D)s.shape;
e.setFrame(e.getX()+p.x-mx,e.getY()+p.y-my,e.getWidth(),e.getHeight());
mx=p.x;my=p.y;
}
}
static void mr(Point p) {
if(pc==pmax){
pc=0;
ne=true;
sa.add(ts);
selected=ts;
ts=null;
}
}
}

class S implements Serializable{
boolean fc,db,sel=true;
Shape shape;
Color fillColor,borderColor;
Stroke stroke;
static Stroke bstroke=new MyBasicStroke();
static Stroke selectStroke=new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER,1,new float[]{5,2},1);
S(Shape s,Color c,Color b,boolean f,boolean d,Stroke k){
this.shape=s;this.fillColor=c;this.borderColor=b;this.fc=f;this.db=d;this.stroke=k==null?bstroke:k;
}
void draw(Graphics2D g){
if(fc){
g.setColor(fillColor);
g.fill(shape);
}
if(db){
g.setColor(borderColor);
g.setStroke(stroke);
g.draw(shape);
}
if(sel){
g.setColor(Color.green);
g.setStroke(selectStroke);
g.draw(shape.getBounds());
}
}
}
class MyBasicStroke extends BasicStroke implements Serializable{}
class SA implements Serializable{
ArrayList<S> ss=new ArrayList<S>();
void add(S s){
if(s!=null){
for(S sx:ss)
sx.sel=false;
ss.add(s);
}
}
S remove(int i){
return ss.remove(i);
}
void remove(S s){
ss.remove(s);
}
void upZ(S s){
indexZ(s,1);
}
void downZ(S s){
indexZ(s,-1);
}
void indexZ(S s, int i) {
int si=ss.indexOf(s);
if(si+i<0||si+i>ss.size()-1)return;
swap(s,ss.get(si+i));
}
void swap(S a,S b){
int ai=ss.indexOf(a);
int bi=ss.indexOf(b);
ss.set(ai,b);
ss.set(bi,a);
}
void select(S s){
for(S x:ss)
x.sel=false;
if(s!=null)
s.sel=true;
}
void drawAll(Graphics2D g){
for(S s:ss)
s.draw(g);
}
}

热心网友 时间:2023-09-27 16:50

这个做过,好简单的。
GUI画图板(绘图板)设计,用Java编写程序代码!!谢谢!!

实验内容:画板程序至少要实现如下功能:1、使用ComboBox列出可以绘制的图形(至少包括点、线、矩形、圆形、圆弧),用户可以使用组合框选择要绘制的图形;提供一组按钮(13个)可以让... 实验内容:画板程序至少要实现如下功能:1、使用ComboBox列出可以绘制的图形(至少包括点、线、矩形、圆形、圆弧),用户可以使用组合框选择...

AI绘图工具

广州市海珠区图灵人工智能科技有限公司推出的AI绘图工具,是一款革命性的创作利器。它运用先进的深度学习技术,能够自动生成丰富多样的图像,满足用户多样化的设计需求。该工具操作简便,即使是没有绘画基础的用户也能轻松上手。同时,它还能根据用户的创意指导,智能调整图像风格、色彩和构图,助力用户释放无限创意。无论是设计师、艺术家还是普通用户,都能在这款AI绘图工具的帮助下,轻松实现心中的视觉梦想。Ai无限设计大师1.0是一款使用简单的ai设计软件,涵盖了装修,建筑,景观,产品,服装,绘画的功能,操作简单,不需要关键词输入,只需要点一下按钮就可以生成设计图,不割韭菜,无需复杂的学习,无需购买昂贵的电脑,适合快速上手。

Java语言程序设计—GUI(图形用户界面)

探索Java编程的瑰宝,GUI(图形用户界面)设计以其直观性和用户体验,成为了Java语言的重要组成部分。本文将深入解析AWT与Swing,以及新兴的JavaFX,带你领略GUI世界的魅力。从基础开始,AWT(Abstract Window Toolkit)是Sun公司提供的图形界面库,它为开发者提供了与操作系统交互的底层工具。其中,MenuComponen...

编写一个Java GUI

public static void main(String[] args){ // ---程序入口--- JFrame frame = new painting();frame.setVisible(true);} }

java的gui程序设计

参考代码 //导入swing图形界面开发常用的3个包import java.awt.*;import java.awt.event.*;import javax.swing.*;public class AddFrame extends JFrame implements ActionListener {JTextField jtf1, jtf2, jtf3;public AddFrame() {JPanel jpcenter = new JPanel(new GridLayout(3, 2)); //...

JAVA 编写一个java图形GUI程序,比较大小数并输出

1.首先定义三个输入框 JTextField firstNumber;JTextField secontdNumber;JTextField maxNumber;2.然后怎样生成并把它们放到界面上我就不多说了。3.接下来生成最大数按钮maxNumberButton和关闭按钮closeButton,并放在界面上。然后让maxnNumberButton监听鼠标单击事件 maxNumberButton.addMouseListener(new Mouse...

求好心人帮找或做个JAVA画板程序 代码,主要能实现简单的画板功能!

求好心人帮找或做个JAVA画板程序 代码,主要能实现简单的画板功能! 程序运行效果如Windows画板所示。能够实现随手画、画弹簧线、画各种图形,并根据颜色对话框给画线设置不同的颜色。可以加个流程图吗,谢谢... 程序运行效果如Windows画板所示。能够实现随手画、画弹簧线、画各种图形,并根据颜色对话框给画线设置不同...

GUI程序设计(java)

//下面板设置 jpnSouth.setBounds(8, 60, 190, 120);jpnSouth.setLayout(new GridLayout(4, 4));addSouthJpn(); //添加17个按钮 //添加监听器 addListener();} /*17个按钮显示值初始化*/ public void buttonInit() { for (int i = 0; i &lt; 10; i++) { btnGrp[i] = new J...

我想用java编写一个程序,就是能在画板上实现填加一段字符串,最好能提供...

void doPaint(Graphics g);} import javax.swing.*;import javax.swing.event.*;import java.awt.*;/ author Hardneedl / final class StringPaintDemo extends JFrame { public String getTitle() {return "String Paint";} static private final Dimension size = new Dimension(600, 400);publ...

java编程中,GUI界面的一般框架有什么??希望大神给写个程序实例,程序内 ...

java GUI一般,通过AWT,SWING 实现 其余比较流行的是SWT,但是它不是官方库, 并且不能跨平台 //注意:Swing, 所以很多不涉及界面组件的一些类比如布局 等Swing也可以使用 但是组件,最好不要混用, 容易出现一些组件叠加,等显示错误 比如JButton TextField等混用 //参考代码 下面使用Swing组件来实现 imp...

用Java实现画图板功能的程序,请问如何编写一个绘制三角形的程序段

以上是用填充多边形的方式填充一个三角形,如果把最后的:g2d.fillPolygon(x,y,3)改为g2d.drawPolygon(x,y,3); 则是以绘制多边形的方式绘制空心三角形.这里说明一下:因为(x1,y1,x2,y2)只能确定一个矩形区域,即鼠标拉动的起点和终点确定的矩形区域所以可以有多种方式确定三角形的三个顶点,我这个...

怎样编写程序代码 编写程序代码 程序编程代码大全 编程序写代码的区别 怎么编写程序代码 编程常用代码 编写代码干嘛用 vb编程代码 vb程序代码
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
给小哈士奇吃儿童用的优卡丹可以么?| 孙悟空结交了哪七个弟兄?他喝醉后,睡觉时,被索魂的人套... 烫发后多久可以再染发 立式钢琴可以平放运输吗,我嫁到外地了,想把钢琴带上走,想用自己的私家... 东兰墨米酒有哪些制作流程? 怎么给头皮正确除螨 谁是西游记的主人公? 我们应该如何判断山泉水是否安全可供饮用? 烤箱烤红薯要几分钟做法步骤 有没有唱歌软件可以打分、有画面、还可以唱英文歌的? 三清茶食用方法? JAVA图形界面(GUI)为什么现在很少有人用 java做图形界面程序,GUI写出来怎么那么丑啊,java做界面只有swing吗 三清茶好不好?口臭喝三清茶有用吗? Java Swing图形界面开发需不需要单独去学?感觉开发界面好像很重要?请问是不是啊? 没有想到这几个礼拜肠胃总是不舒服的,貌似三清茶有可以改善的作用,有用吗? 三清茶,有一段时间口臭,有慢性咽炎,但肠胃不好不是便秘,大便稀次数不多,能用吗? 草本三清茶功效孩子可以喝吗? 三清茶有什么功效? 《肠胃不好,能饮用三清茶吗,有哪位知晓啊》 有肠胃病能喝三清茶么? 有慢性胃炎可以喝三清茶吗? 投诉淘宝卖家如果不成功会怎么样 借条怎样写才有效 借条怎么写才有效,你才有法律保护呢 商业银行针对行政事业单位客户的营销方案 银行理财产品营销方案该怎么写? 借条应该怎么写才规范 银行如何开展网络营销? 商业银行的网点营销如何赋能?提升网点运营效率? 胃不好的人,可以喝哪些茶呢? 我有慢性结肠炎,吃三清茶会有副作用吗 我有慢性结肠炎,吃三清茶会有副作用吗 java编程中,GUI界面的一般框架有什么??希望大神给写个程序实例,程序内容包括布局的应用,多个 肠胃功能不好的人能喝茶吗? 肠胃功能不好的人能喝茶吗? 被封发信息也不能解封是怎么回事 淮能告诉我忍辱负重,以屈求伸,发奋图强,救亡图存的成语意思 语言表达能力用英文怎么说 思维活跃 语言表达能力强 怎么翻译 谢谢! 有较强的语言表达能力交际能力能更快的找到一份好的工作 用英语怎么说 请问4s店的会计报表怎么做 (我有良好的英语语言表达能力和英语语法讲解能力)这句话用英语怎么说? 谢谢 请问大家,汽车4s店的会计每月必须提供的报表有什么? 翻译“我拥有较强的语言沟通能力和语言表达能力” 汽车4S店的会计都需要做什么工作 越具体越好 在线等 回答详细的有追加 “语言的表达能力”用日语怎么说 求一份4S店的财务报表(包括现金流量表、资产负债表、利润表) 求4s店财务报表分析报告的模板 有较强的组织能力、活动策划能力和语言表达能力 有很好的团队精神 用英语怎么说啊