java绘图闪屏问题,在以绘图的JFrame上加上JPanel画图

我在画了图的JFrame上再加个JPanel画图,就会出现图片闪屏闪得很严重,因为是在做小游戏想背景和人物分开来画如何解决这个问题

import java.awt.*;
import javax.swing.*;
import java.util.*;
public class Baground extends JFrame{
    Image baground;
    Random random;
    int bgNum;
    People p=new People(); 
    public Baground(){
        JFrame frame=new JFrame();
        this.setSize(1200,336*2-100);
        this.setVisible(true);
        this.setResizable(false);
        random=new Random();
        random.setSeed(49849);
        bgNum=(int)(random.nextDouble()*10);
        System.out.print(bgNum);
        baground=Toolkit.getDefaultToolkit().getImage("素材/背景图片/"+bgNum+".gif"); 
        this.getContentPane().add(p);

    }
    public void paint(Graphics g){
        p.paint(g);
        int w=baground.getWidth(this);
        int h=baground.getHeight(this);
        g.drawImage(baground,1,0,w+400,h*2-100,this);
    }
    public static void main(String[] args){
        new Baground();
    }
}
class People extends JPanel{
    Image peopleImage;
    public People(){
        peopleImage=Toolkit.getDefaultToolkit().getImage("素材/people1/1.gif");
    }
    public void paint(Graphics g){
        super.paint(g);
        int a=peopleImage.getWidth(this);
        int b=peopleImage.getHeight(this);
        g.drawImage(peopleImage,150,350,this);
    }
}

2个回答

搜索下java 双缓冲

上次 我也是碰到,这样的问题。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
在jpanel上绘图问题
我直接写了一个MyJPanel类继承JPanel,然后在我的类里面重写了paint()函数。rnpublic void paint(Graphics g)rng.drawRect(100, 100, 1000, 1000);rnrnrn然后在一个JScrollPane里面添加MyJPanel,代码如下:rnMyJPanel mjp = new MyJPanel();rnmjp.setLayout(null);rnmjp.setPreferredSize(new Dimension(1500,1500));rnthis.jScrollPane.setViewportView(mjp) ;rn结果发现拖动滚动条的时候,矩形变模糊,混乱。rn请问这是什么原因?是我不该直接在JPanel上画图么,还是代码其他什么地方有错。
在一添加进JFrame中的jPanel上绘图
想画一个圆。有两个JPanel,jp添加了两个JButton,想在show上画圆。现在不能画出圆来。觉得从那里看过,画的圆被show覆盖,可是repaint()以后还是不行rn但是如果利用/**/当中部分,既把画圆做成类,做成底层JPanel,就可以。可是不想这样子rn按现在这代码应该怎样修改那rn[code=Java]rnimport java.awt.*;rnimport java.awt.event.*;rnimport javax.swing.*;rnimport javax.swing.border.*;rnpublic class Clock1rn public static void main(String[] args)rn ClockFrame frame=new ClockFrame();rn frame.setVisible(true);rn frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);rn rnrnclass ClockFrame extends JFramern ClockPanel panel=new ClockPanel();rn public ClockFrame()rn setTitle("clock"); rn setSize(200,200);rn add(panel);rn rnrnclass ClockPanel extends JPanelrn private JPanel jp=new JPanel();rn private JPanel show=new JPanel();rn /* private JPanel show=new JPanel(); */rn private JButton modify=new JButton("modify");rn private JButton ok=new JButton("ok");rn public ClockPanel()rn setLayout(new BorderLayout());rn setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"clock"));rn show.setBackground(Color.RED);rn jp.add(ok);rn jp.add(modify);rn add(show); rn jp.setLayout(new FlowLayout());rn add(jp,BorderLayout.NORTH);rn repaint();rn rn public void paintComponent(Graphics g)rn super.paintComponent(g);rn g.drawOval(60,60,100,100);rn rnrnrn/*rnclass DrawPanel1 extends JPanelrn public void paintComponent(Graphics g)rn super.paintComponent(g);rn g.drawOval(60,60,100,100);rn rn*/rn[/code]rn
JPanel绘图的问题:
下面的直线怎么不显示啊?rnrnimport java.awt.*;rnimport javax.swing.*;rnrnclass Mypanel extends JPanelrn public void paintCompoent(Graphics g)rn super.paintComponent(g);rn g.setColor(Color.red);rn g.drawLine(1,1,300,300);rn rnrnrnpublic class MyGridLayout extends JFramernrn Mypanel mp = new Mypanel();rn public MyGridLayout()rn rn super("layout");rn this.getContentPane().add(mp);rn this.setSize(300, 300);rn this.setVisible(true);rn this.setLocation(1, 1);rn rn public static void main(String[] args)rn rn new MyGridLayout();rn rn
保存jpanel绘图问题
我现在在jpanel里面画了一个图,超出屏幕范围,然后我用下面代码保存rn[code=Java]rn Component c = jpanel;rn BufferedImage bi = (BufferedImage)c.createImage(c.getWidth(),c.getHeight());rn System.out.print(c.getHeight());rn c.paint(bi.getGraphics());rn try rn javax.imageio.ImageIO.write(bi, "jpg", new File("c:/x1.jpg"));rn catch (IOException ex) rn Logger.getLogger(Form_Against_Graph.class.getName()).log(Level.SEVERE, null, ex);rn rn[/code]rnrn结果发现保存下来的图片画到一半的时候就从最初位置重画了。如图rn[img=E:/error.jpg][/img]rn说明:在jpanel里面画的图没有问题,就是保存的时候变成这个样子,请问是有谁知道是怎么一回事,在哪里需要设置的么?rn
在JPanel 绘图的问题 急!
有个作业做五子棋 我用jpanel作画布 棋盘都画好了 也能下子rn问题来了:rnpaintComponent(Graphics)负责绘制棋盘 和 落的子rn通过监听鼠标点击事件 调用 repaint()方法来落子 rn但每次下子都只有最新放下的一个棋子显示出来 以前画的棋子被清空了rn能有什么办法把原来画好的内容保留下来 下次repaint()在这基础上接着画??
绘图、画图
选择颜色,粗细后即可用鼠标拖动随意画图,与系统自带的画图工具原理
Java用JFrame、JPanel、Graphics绘图案例讲解
本文将介绍Java绘图工具的使用,通过具体示例,演示通过Java的Graphics类在JFrame中的JPanel上绘制图形的步骤和方法。 JFrame类,是存放组件的容器。相当于相框。 JPanel类,是面板容器类。相当于画板。 Graphics类,是Java用绘图类,相当于画笔。
JAVA 基本绘图——利用JFrame JPanel 绘制扇形
利用JFrame制作幕布(容器),创建JPanel部件,将JPanel部件添加到JFrame容器中,利用了基本的java绘制图形方法,步骤也是基本的套路。 利用了API ——— fillArc() fillArc()方法定义如下: public abstract void fillArc(int x, int y, int width, int height, int startA...
双缓冲绘图解决闪屏问题
利用双缓冲方法在内存中用画布进行绘图,最后显示,解决绘图过程中的闪屏问题
基于FormView的 绘图闪屏 问题
void CICRView::OnPaint() rnrn // TODO: Add your message handler code herern CPaintDC dc(this); // device context for paintingrnrn RECT rect;rn m_image.GetClientRect(&rect);rnrn CDC *pDC = m_image.GetDC();rnrn CBitmap bf;rn bf.CreateBitmap(768, 576, 1, 24, lpbuf);rn bf.CreateCompatibleBitmap(pDC, 768, 576);rnrn CDC *memDC;rn memDC->CreateCompatibleDC(pDC);rn memDC->SelectObject(&bf);rn memDC->FillSolidRect(&rect, pDC->GetBkColor());rn rn pDC->BitBlt(rect.left, rect.top, 768, 576, memDC, 0, 0, SRCCOPY);rn rn memDC->DeleteDC();rn bf.DeleteObject();rn pDC->DeleteDC();rnrn // Do not call CFormView::OnPaint() for painting messagesrnrnrn代码是按照MFC双缓冲处理闪屏问题写的,但又有区别:rnrn本代码中没有以文件形式存在的位图,rn所以,先用CreateBitmap函数创建了一个文图对象(不知这样可否)rn其中,lpbuf是图像采集卡采集图像后得到的位图数据指针rn一运行就报错!!!!!rn请各位高手指点,是哪的问题,该怎么解决。
新手求助:jPanel绘图问题
下面是代码 主要看下jButton1MouseClicked()吧rnrnimport java.awt.*;rnrnpublic class NewJFrame extends javax.swing.JFramernrn rn /** Creates new form NewJFrame */rn public NewJFrame()rn rn initComponents();rn rn rn /** This method is called from within the constructor torn * initialize the form.rn * WARNING: Do NOT modify this code. The content of this method isrn * always regenerated by the Form Editor.rn */rn // rn private void initComponents()rn rn jPanel1 = new javax.swing.JPanel();rn jButton1 = new javax.swing.JButton();rnrn setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);rn jPanel1.setBackground(new java.awt.Color(204, 255, 255));rn javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);rn jPanel1.setLayout(jPanel1Layout);rn jPanel1Layout.setHorizontalGroup(rn jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)rn .addGap(0, 250, Short.MAX_VALUE)rn );rn jPanel1Layout.setVerticalGroup(rn jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)rn .addGap(0, 166, Short.MAX_VALUE)rn );rnrn jButton1.setText("jButton1");rn jButton1.addMouseListener(new java.awt.event.MouseAdapter()rn rn public void mouseClicked(java.awt.event.MouseEvent evt)rn rn jButton1MouseClicked(evt);rn rn );rnrn javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());rn getContentPane().setLayout(layout);rn layout.setHorizontalGroup(rn layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)rn .addGroup(layout.createSequentialGroup()rn .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)rn .addGroup(layout.createSequentialGroup()rn .addGap(69, 69, 69)rn .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))rn .addGroup(layout.createSequentialGroup()rn .addGap(143, 143, 143)rn .addComponent(jButton1)))rn .addContainerGap(81, Short.MAX_VALUE))rn );rn layout.setVerticalGroup(rn layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)rn .addGroup(layout.createSequentialGroup()rn .addGap(34, 34, 34)rn .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)rn .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 48, Short.MAX_VALUE)rn .addComponent(jButton1)rn .addGap(29, 29, 29))rn );rn pack();rn // rnrn private void jButton1MouseClicked(java.awt.event.MouseEvent evt) rn rn jPanel1.getGraphics().drawLine(0,0,100,100);rn jPanel1.getGraphics().drawString("abc",0,0);rn jPanel1.getGraphics().drawImage(Toolkit.getDefaultToolkit().getImage("img.gif"),0,0,this);rn rn rn rn /**rn * @param args the command line argumentsrn */rn public static void main(String args[])rn rn java.awt.EventQueue.invokeLater(new Runnable()rn rn public void run()rn rn new NewJFrame().setVisible(true);rn rn );rn rn rn // 变量声明 - 不进行修改 rn private javax.swing.JButton jButton1;rn private javax.swing.JPanel jPanel1;rn // 变量声明结束 rn rnrnrn编译运行 点击按钮后 只有 drawLine显示出来了 drawString和drawImage却没有显示rn请教下大家这是为什么 怎么改?
jpanel 添加 JLabel的绘图问题
import java.awt.Graphics;rnimport java.awt.Graphics2D;rnrnimport javax.swing.JFrame;rnimport javax.swing.JLabel;rnimport javax.swing.JPanel;rnrnrnpublic class testPaint extends JLabel rnrn /**rn * @param argsrn */rnrn rn private String text = "Hello World";rn rn //重写paintComponet()方法,在组件上画字符串rn public void paint(Graphics g)rn System.out.println("here");rn Graphics2D g2=(Graphics2D)g;rn // g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); rn g2.drawString(text, getX(), getHeight()/2);rn System.out.println("ok");rn rn rn rn rn public static void main(String[] args) rn // TODO Auto-generated method stubrn rn JFrame frame = new JFrame();rn rn testPaint test = new testPaint();rn rn JPanel p = new JPanel();rn rn frame.add(p);rn p.add(test);rn frame.add(p);rn rn frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);rn frame.setSize(200,300);rn frame.setVisible(true);rn rn rnrnrnrn不能显示jlabel中的文字,如果frame直接添加jlabel就能显示了,求点迷津!!!
有关JPanel和布局的绘图问题。
先看代码rn[code=Java]rnimport java.awt.event.*;rnimport java.awt.*;rnimport javax.swing.*;rnrnpublic class AGraphMov extends JFramern rn Graphics gg;rn Circle circle;rn GPanel pan=new GPanel();rn JButton s=new JButton("Start");rn public AGraphMov()rn rn super("AGraphMov");rn setSize(400,600);rn setLayout(null);rn pan.setLocation(0,0);rn pan.setSize(400,400);rn pan.setBackground(Color.RED);rn s.setLocation(200,410);rn s.setSize(75,30);rn add(pan);rn add(s);rn setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);rn setVisible(true);rn s.addActionListener(new ButtonHandler());rn rn rn class GPanel extends JPanelrn rn int x,y,w,h;rn int ax,ay;rn rn public GPanel()rn rn super();rn x=1;y=200;w=60;h=60;rn ax=1;ay=-1;rn rn rn public void setOval(int x1,int y1,int w1,int h1)rn rn x=x1;y=y1;w=w1;h=h1;rn rn rn public int getX()rn rn return x;rn rn rn public int getY()rn rn return y;rn rn rn public int getAx()rn return ax;rn rn public int getAy()rn return ay;rn rn public void paint(Graphics g)rn rn super.paint(g);rn g.drawOval(x,y,w,h);rn rn rn rn public class ButtonHandler implements ActionListenerrn rn public void actionPerformed(ActionEvent e)rn rn circle=new Circle();rn circle.start();rn rn rn rn class Circle extends Threadrn rn public Circle()rn rn rn public void run()rn rn while(pan.getX()+60<400&&pan.getX()>0&&pan.getY()>0&&pan.getY()+60<400)rn rn pan.setOval(pan.getX()+pan.getAx(),pan.getY()+pan.getAy(),60,60);rn repaint();rn tryrn rn this.sleep(2);rn rn catch(InterruptedException ie)rn rn rn rn rn public static void main(String args[])rn rn AGraphMov application=new AGraphMov();rn rn rnrn[/code]rn预期的功能就是是GPanel上的圆在红色画布的范围内向的右上方移动,可是运行之后觉得很奇怪:rn1.我没有用布局管理器,把GPanel的Location设在了(0,0)的位置,为什么运行程序是(按下按钮之前)GPanel的位置是在偏中间的位置,而JButton的位置却没有问题。rn2.按下按钮后,圆形开始向右上方移动,但是一意想不到的是画布也跟着在移!这是为什么?rn就是以上的问题,麻烦高手指导!rn
JFrame绘图没有方法
代码如下:rnpackage No29;rnimport java.awt.*;rnimport javax.swing.*;rnpublic class JFrame rnrn /**rn * @param argsrn */rn public static void main(String[] args) rn // TODO Auto-generated method stubrnrn JFrame jf=new JFrame();rn jf.setSize(200,200);rn rn rnrnrn报错:rnThe method setSize(int, int) is undefined for the type JFramernjf.setSize(200,200);
Jpanel 上画图的问题
我想在一JPanel上画出一实时显示当前时间的字符串,用一线程画字符串,rn代码如下:rn class SimplePanel1 extends JPanelrnrn SimpleDateFormat formatter;rn java.util.Date currentDate;rn String lastdate;rn SimplePanel1()rn rn super();rn formatter=new SimpleDateFormat("EEE MMM dd hh:mm:ss yyyy",Locale.getDefault()); rn rn rnclass DrawRunner implements Runnablernrn Graphics g;rn DrawRunner(Graphics g)rn rn this.g=g;rn rn public void run()rn rn while(true)rn rn currentDate =new java.util.Date();rn lastdate=formatter.format(currentDate);rn g.drawString(lastdate,5,20); rn currentDate=null;rn tryrn rn Thread.sleep(300);rn rn catch(InterruptedException e)rn rn rnrnrnpublic void paintComponent(Graphics g)rn rn super.paintComponent(g);rn DrawRunner drawrunner=new DrawRunner(g);rn Thread DrawThread=new Thread(drawrunner);rn DrawThread.start(); rn rnrnrn为什么Jpanel上的字符不会自动刷新,而且有时切换界面后字符串会消失呢?rn请各位帮忙看看,是否还有其他方法实现?谢谢
java绘图java绘图java绘图
java绘图java绘图java绘图java绘图java绘图java绘图java绘图java绘图java绘图
java绘图程序的问题(类似WINDOWS画图)
现在已经实现的功能大体分为两种:一,以鼠标拖动轨迹绘图;二,以固定图形绘图(包括直线,长方形,椭圆等)。rn第一种功能我是以getGraphics方法写的,第二种功能用paint方法。利用了双缓冲。rnrn总的外在表现问题是:用一方法绘图时当窗口被遮挡或最小化恢复后,图形消失,在继续拖动鼠标时才出现之前的图形。(鼠标绘图的drawLine方法写在mouseDragged方法中,所以继续拖动,可以实现读取缓存中的图形。)这里的问题是如何才能使窗口被遮挡和窗口重新恢复之间的时间里图形不会消失(我尝试在WindowEvent中窗口最小化恢复方法里写入读取缓存图形的方法,结果没有效果);rn用二方法时,当鼠标拖动后,之前画的图形消失(draw方法也是写在mouseDragged中,画特定图形时用到了repaint方法,这样以保证按住鼠标拖动时让图形变化,而不是画很多图形)。这里其实我也知道用到repaint就有一个清除的过程,我尝试在mousepressed,mousereless方法里读取缓存图象,但都得不到稳定的效果。可是WINDOWS画图程序里就是用同样的表现方式绘图,却不会有消失的过程。这里的问题就是如何做到WINDOWS画图程序中画多个特定图形但都不会消失的效果。rnrn之后还有个小问题,就是我让绘图区域继承JPanel类时,设定了背景色为白,但当用鼠标拖动绘图时背景色变成了菜单色(铅色),换成继承Panel类时却一切正常,这是什么原因呢~rnrn写了一大堆,希望高手们不厌其烦,帮助帮助小弟~~万分感谢!
VC 内存绘图,不闪屏。。。
VC 内存绘图类,不闪屏,使用方法见博客文章。
Java中的JFrame与JPanel问题?
public class DicomMain extends JFramernrnrn public DicomMain() rnrnrn setSize(1280, 1024);rn setTitle("Read Test");rn DicomTest panel = new DicomTest();rn setContentPane(panel);rnrnrn rnrnrn public static void main(String[] args) rnrnrnrnrn DicomMain frame = new DicomMain();rn frame.getContentPane().setLayout(null);rnrnrn frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);rn frame.setVisible(true);rnrnrn rnrnclass DicomTest extends JPanelrnpublic DicomTest()rnrn //这样运行结果不显示按钮rn JPanel Mainpanel=new JPanel();rnrn JButton ReadButton=new JButton("ReadCT");rn ReadButton.setBounds(1150,20,80,40);rn ReadButton.addActionListener(new ReadButtonAction());rn Mainpanel.add(ReadButton);rn//改成下面所示的,显示。为什么?rn JButton ReadButton=new JButton("ReadCT");rn ReadButton.setBounds(1150,20,80,40);rn ReadButton.addActionListener(new ReadButtonAction());rn add(ReadButton);rnrn
C++画图VC,绘图
C++画图VC,绘图工具,简易的的绘图工具
C#绘图程序(画图)
C#绘图程序,显示鼠标坐标,调节画笔粗细,画笔颜色
Java swing JFrame窗口程序实现绘图(2)
上次写了一个可以跟随鼠标移动的代码,但是存在很多的bug  这次通过精简,实现了可移动划线的代码。通过调用父类的paint()方法可以实现清除路迹,然后通过Point()类数组来记录鼠标每次的按下以及抬起的位置,每次重绘之前的线段。除此之外还按照同理实现了矩形的跟随鼠标拉伸。之后会继续完善绘图程序。不多说了直接上代码。/* * To change this license header, choo...
GDI绘图之画图
1. 创建画笔   HPEN CreateOen(   int fdPenStyle,  // 画笔的样式   int nWidth,  // 画笔的粗细   COLORREF crColor // 画笔的颜色      );      PS_SOLID - 实线笔 可以多个像素   PS_DASH  - 虚线笔,只能一个像素宽,否则不起作用   2. 将画笔应用到DC中
绘图(上)
本课程通过两天时间讲解了GO语言图形界面编程并用红白棋实例强化了所学知识
java中Jpanel上绘图,效果一闪即逝,求解答
设计思路是一个大的Jpanel(继承Frame)上布局有一些常规控件,另外还添加了一个小Jpanel,这个Jpanel上用于绘制出点(点坐标已有)。效果是点击某一个按钮,小Jpanel上绘制出点。问题是运行后Frame下的组件都能显示,但点击按钮小Jpanel绘出的点一闪即逝,或是根本不显示。试过将绘制方法重写并放入另一线程中,仍然不能解决。 急!!!望大神们不吝赐教,谢谢
在窗体上绘图问题???
现在要实现一个在旋转的图像上实现连线操作,功能可以实现,但是只要连了一两条在Windows的任务管理器中占用的CPU资源就为100%了,看了许久不知道哪里出了问题,麻烦大家帮我看看rn代码如下:rn private class myMouseAdapter extends MouseAdapter // 监听类实现rnrn public void mousePressed(MouseEvent e) rn if (e.getButton() == e.BUTTON1) rn clicksum++;rn for (int i = 0; i < tudian.length; i++) // 循环判断点击是否在绿色圆图上如是替换绿色原图为红色图,记录拖拽初始点坐标rn if (e.getX() >= tudian[i].xrn && e.getX() <= tudian[i].x + 10rn && e.getY() >= tudian[i].yrn && e.getY() <= tudian[i].y + 10) rn startx = tudian[i].x + 5;rn starty = tudian[i].y + 5;rn tuimage[i] = dian2image;rn clickok++;rn break;// 跳出循环rnrn rn rn rn // 右键菜单功能rn if (e.getButton() == e.BUTTON3) rn repaint();rn // 弹出对话框设定rn int selection = JOptionPane.showConfirmDialog(null, "记录结果",rn "提示信息", JOptionPane.YES_NO_CANCEL_OPTION,rn JOptionPane.INFORMATION_MESSAGE);rn switch (selection) // 根据单击对话框上的不同按钮做不同事件rn case JOptionPane.YES_OPTION: rn updateData();rn clock.stop();rn LianXian.this.dispose();rn PublicLei.time = 1;rn new ZhuanDongPic().setVisible(true);rn break;rn rn case JOptionPane.NO_OPTION: rn clock.stop();rn PublicLei.time = 1;rn LianXian.this.dispose();rn new ZhuanDongPic().setVisible(true);rn break;rn rn case JOptionPane.CANCEL_OPTION: rn PublicLei.time = 1;rn break;rn rn rn rnrn rnrn public void mouseReleased(MouseEvent e) rn if (e.getButton() == e.BUTTON1) rn for (int i = 0; i < tudian.length; i++) // 循环判断点击是否在绿色圆图上如是替换绿色原图为红色图,rn if (e.getX() >= tudian[i].xrn && e.getX() <= tudian[i].x + 10rn && e.getY() >= tudian[i].yrn && e.getY() <= tudian[i].y + 10) rn // 记录拖拽结束点坐标rn endx = tudian[i].x + 5;rn endy = tudian[i].y + 5;rn tuimage[i] = dian2image;rn Point ppjvli = new Point(endx, endy);// 记录结束点以便下一行判断起始结束点间距离如为0则为同一点不绘线rn //if()rn if (startx != 0 && starty != 0 && endx != 0rn && endy != 0rn && ppjvli.distance(startx, starty) != 0) // startx!=endx判断当点击同一点时不绘线rn // 动态实例化线数组rn shareline[lineflag] = new Line2D.Double(startx,starty, endx, endy);rn lineflag++;rn okline = true;rn break;// 跳出循环rn rnrn rn rn rnrn rnrn rnrn public void paintComponent(Graphics g) // 外部类绘图rn super.paintComponent(g);// 此句的重要性,不然屏幕上会有按钮残留影像rn Graphics2D g2d = (Graphics2D) g;rnrn // 画连接线rn g2d.setTransform(at); // 应用此动作给g2drn g2d.drawImage(luoxuanimage, (int) w / 2 - 300, (int) h / 2 - 300,rn 600, 600, null); // 绘出图形,此处的坐标是用旋转点坐标减去图形半径得到的rn at.rotate(xuanzhuansudu, (int) w / 2, (int) h / 2); // 给变换对象做旋转动作,此处是旋转点坐标rn g2d.setTransform(kong);rn for (int i = 0; i < tudian.length; i++) rn g2d.drawImage(tuimage[i], tudian[i].x, tudian[i].y, 10, 10,rn null);// 绘出图形rn // 以下4行根据拖拽事件中存的线数组绘线rn rn if (okline) rn g2d.setColor(Color.red);rn g2d.setStroke(new BasicStroke(3.0f));// 设置线宽rn for (int k = 0; k < lineflag; k++) // 根据LINEFLAG只绘到拖拽事件中存的线数组中有的线rn g2d.draw(shareline[k]);rn rn rnrn rnrn public void update(Graphics g) rn paint(g);rn rnrn public void run() rn while (ok) rn try rn myrun();rn catch (InterruptedException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn rn rnrn public synchronized void myrun() throws InterruptedException rn repaint();rn wait(sleeptime);rn rn
在控件上绘图的问题
1.我写了一个自定义控件myCtrl:UserControl,在上面加了一个editbox(填满整个控件,设置为没有border);rn2.在这个editbox的Paint()事件中绘制了几条线:rn Pen pn = new Pen(Color.Black, 1);rn Point[] p = rn new Point(0, 0), rn new Point(this.label1.Size.Width - 1, 0), rn new Point(this.label1.Size.Width - 1, this.label1.Size.Height - 1), rn new Point(0, this.label1.Size.Height - 1),rn new Point(0, 0);rn Graphics graph = this.label1.CreateGraphics();rn graph.DrawLines(pn, p);rn3.在MouseDown()中也画这几条线;rn4.做了工具条,点击上面的按钮然后在窗口中用new的方式生成并显示一个myCtrl。rnrn问题:rn1.点击了按钮后,控件生成了,也显示了,但是画的线条闪现了一下就消失了(跟踪Paint()是执行了的);rn2.鼠标点一下控件,线条就有了;rn3.或者在Paint()中绘制线条之前弹一个消息框,在点了消息框上的“OK”键之后,画的线条也出现了;rnrn请各位大虾帮帮忙啊!已经被挡住好几天啦!
控件上绘图的问题
基于对话框的工程,上面有一按钮和一个网格控件,点击按钮的时候在网格控件上绘图,有什么办法在对话框OnPaint时,不重绘这个网格控件
Form上的绘图问题
如果要在程序执行的中间绘图(不影响其它已经绘制的图的情况下),该怎么做rnrn在下只知道Paint事件是队列中的惟一事件,如何在Paint执行期间再绘图
C# GDI绘图闪屏问题求助
程序:rn有一个大图:a.bmprn从大图里,通过Timer控件,根据时间不停的截取小图。rn并且将小图作为Panel控件的背景图片呈现。rn当Panel的背景不断更换的时候,产生闪屏现象。rnrn在构造器里添加:this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);rn没有产生作用。rn求达人。rnrn[code=C#]rnprivate void timer_Tick(object sender, EventArgs e)rn rn //根据时间显示图片rn if (time <= musicHz.Length)rn rn time += 1;rn bmDisplay = new Bitmap(pl_draw.Width, pl_draw.Height);rn g1 = Graphics.FromImage(bmDisplay);rnrn //从大图里截取小图rn g1.DrawImage(bmHz, new Rectangle(0, 0, pl_draw.Width, pl_draw.Height), new Rectangle(time, 0, pl_draw.Width, pl_draw.Height), GraphicsUnit.Pixel);rn //将Panel的背景图改成新的小图rn pl_draw.BackgroundImage = bmDisplay;//闪屏出现rn rn else rn rn timer.Stop();rn rn rn[/code]
在一个jpanel上画图??
我打算在一个jpanel上直接显示一个跳动的数字时钟rnrn 可以直接用 Graphics2D 这个类?rnrn我看到的例子都是小应用程序的, 不知道在使用的时候有何区别??
JPanel上画图
JPanel jp_background = new JPanel() { public void paint(Graphics g) { ImageIcon img = new ImageIcon(&quot;soldier/金描.png&quot;); ...
在image上绘图的问题。
根据一些给定的坐标在image上绘制出坐标的轨迹。rn由于图片比较大,放在scrollBox上,rn怎么实现当轨迹已经超出显示范围时,scrollbox的滚动条自动滚动?
Image 上绘图问题
我在IMAGE上绘图,为什么Image底色会自动为白色,可不可能做到除了绘图的部分,Image其余部分透明?这rnrn非常简单的作图:rnrnImage1->Canvas->Pen->Color = clRed;rnImage1->Canvas->MoveTo(left,(277-t_height));rnImage1->Canvas->LineTo(left,277);rnrn执行完毕后Image的底色会自动变为白色,能否使其为透明?由于Image下的部分是动态图形,故不能简单的设置Image1->Canvas->Brush->Color = "下面的颜色";rnrn已经设置了 Image1->Transparent = true;rn Image1->Canvas->Brush->Style = bsClear;
对话框中绘图,解决闪屏问题
在对话框中绘制图形,并采用双缓存方式解决闪屏问题
VS2012 GDI绘图双缓冲 去闪屏问题
VS2012 GDI绘图双缓冲 去闪屏问题 CMemDC类 使用CMemDC类实现双缓冲是非常简单的 CDC *pDC = GetDC(); CMemDC dcMem(*pDC,this); CDC& dc = dcMem.GetDC(); HDC hdc = dc.m_hDC; using namespace Gdiplus; Grap
关于Applet中JPanel的绘图问题
我在一个applet中加入了自己定制的DrawPanel类,并且设置了背景色,DrawPanel类是用于画图的,但是很奇怪,无论怎么设置JPanel总是显示不出背景色,除非把paintComponent注释掉,这是为什么呢?希望大家能帮我讲述一下JPanel的绘图原理,无比感激!rnrn[code=Java]rnpublic class MainApplet extends Applet implements ActionListenerrnrn JPanel jpnFunction = new JPanel();rn DrawPanel jpnDraw;rn rn rn /**rn * 在applet上加swing组件。rn * @param jc 组件rn * @param x x坐标rn * @param y y坐标rn * @param width 组件长度rn * @param height 组件高度rn */rn public void add(JComponent jc,int x,int y,int width,int height)rn rn jc.setBounds(x, y, width, height);rn add(jc);rn rn rn public void init()rn rn setBackground(Color.yellow); rn setLayout(null);rn jpnDraw = new DrawPanel();rn jpnDraw.setBackground(Color.green);rn jpnFunction.setBackground(Color.blue);rn rn add(jpnDraw,10,10,600,600);rn add(jpnFunction,350,350,300,300);rn rnrn public void actionPerformed(ActionEvent e)rn rnrn rnrnrnpublic class DrawPanel extends JPanel rnrn public void paintComponent(Graphics g)rn rn super.paintComponents(g);rn g.setColor(Color.blue);rn g.drawString("fuck", getX(),getY());rn g.drawRect(getX(),getY(),getWidth()/10,getHeight()/10); rn rnrn[/code]
C#使用双缓冲解决绘图闪屏的问题
最近在工作需要使用C#绘制图形,看了一下绘制的函数觉得很简单就开始着手工作了,但是在实际应用的时候发现鼠标进行绘制的时候会闪屏,原因是图元重绘的时间不一致,百度一下有很多更详细的,于是参照网上的解决办法在窗体初始化函数中加入 SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | Con
【救急!】JPanel绘图的问题!帮帮小弟!!
Swing的JPanel和AWT的Canvas都是可绘图的面板rnCanvas使用很方便,但有些很奇怪的问题,也许是因为它是重型组件,会把包括JMenu或Tip之类的轻型组件遮挡掉!真晕rn然后我现在把一个用于绘图的继承自Canvas的类改成JPanel:rnpaint改为paintComponentrnmouseDown改为 mousePressedrnmouseUp改为 mouseReleasedrnmouseDrag改为 mouseDraggedrnrn运行后出现一下问题:rn1。鼠标事件更本响应不了!mousePressed函数根本进不去rn2。任何在其上出现的东西(比如一个JFileChooser)会有乱七八糟的残影留在上面!一定要最小化重画后才会消失rn3。JPanel不能用Graphics2D?那么怎么把笔画线变粗?rnrn谢谢!!!!!rn可以加我QQ 252022390赐教!!rn多谢!
JPanel JFrame
创建了JFrame application=new JFrame();rn又创建了多个JPanel 对象画出不同的图,怎样将这多个JPanel对象加到application 上能显示所有图,调用application.add会覆盖,求实现方法,最好有代码,谢谢
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件