标签: repaint

渲染时不显示SVG元素的onload事件中绘制的点

我正在使用Javascript绘制SVG网格.我已设法绘制轴,以及我的象限标签.但是我遇到了一个添加动态点的问题.

我正在尝试在SVG元素的onload事件中绘制点.使用Firebug时,我已经能够确认代表我的点的圆形元素被添加到SVG DOM中,并为位置,画笔描边等设置了正确的属性.

不幸的是,我的浏览器(Firefox 3)渲染的实际图像没有更新,以反映我添加了这些新DOM元素的事实!

以下是我用于将元素添加到正确DOM节点的代码:

function drawPoints()
  {
    var points = pointCollection.points;
    var grid = SVGDoc.getElementById("gridGroup");

    for(var i = 0 in points)
    {
        var x = points[i].x;
        var y = points[i].y;
        var label = points[i].event;

        //<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/>

        var dot = SVGDoc.createElement("circle");
        dot.setAttribute("cx", x);
        dot.setAttribute("cy", y);
        dot.setAttribute("r", 15);
        dot.setAttribute("stroke", "red");
        dot.setAttribute("stroke-width", "2");
        dot.setAttribute("fill", "black");

        grid.appendChild(dot);
    }
  }
Run Code Online (Sandbox Code Playgroud)

之后的Firefox的Firebug调试扩展所示的SVG结构是:

<svg width="800" height="800" version="1.1" xmlns="http://www.w3.org/2000/svg" onload="init(evt); drawAxis(); drawPoints()">
  <g id="gridGroup" stroke="green">
    <line id="xAxis" x1="0" x2="800" y1="400" y2="400" …
Run Code Online (Sandbox Code Playgroud)

javascript svg repaint

4
推荐指数
1
解决办法
5736
查看次数

平滑滚动.net表格

嗨我在.net中使用表单,我在运行时动态添加大量链接标签,我将这些链接标签添加到面板并将该面板添加到winform.当链接标签的数量增加时,表单会弹出一个自动滚动条(垂直)...现在当我使用该自动滚动向下滚动时,表单不会更新其视图,因为我滚动,只有当我停止滚动时,表单才会刷新...此外,当它刷新它看起来太糟糕..我可以看到它如何绘制缓慢....

有谁曾经处理过这个问题?

我在scroll事件处理程序中尝试了form.refresh(),但这似乎没有帮助..

有线索吗?

.net c# repaint winforms

4
推荐指数
3
解决办法
6546
查看次数

动态更改自定义图形的颜色

问题:在运行方法之前,图形不会重新绘制.

单击按钮时会调用两个方法.每个方法内部都是代码,用于更改与此方法关联的图形的颜色(在UI中); 当方法开始时,图形从黑色变为绿色; 当方法完成时,颜色从绿色变为红色.然后调用下一个方法,其图形应变为绿色(方法正在运行),当方法完成时,其图形应填充红色(方法完成).

我创建了一个简单的状态圆图形(带有填充颜色的30像素圆圈),有3种颜色状态:黑色表示准备好; 绿色的跑步; 红色完成.

我认为这个问题与repaint()单独的线程有关并且计划在能够运行时运行?我尝试将更新图形的代码放在自己的thread-runnable中,然后使用线程.join()确保代码已经完成运行但是没有用.

编辑

编辑:删除我用于演示的代码,并根据注释替换单个可运行的代码示例.如果运行代码,您将看到的是在单击每个方法启动和停止时图形不更新的按钮后,它会等待两个方法都运行然后重新绘制图形.

    package graphicsUpdateDemo;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.beans.Transient;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 * Application entry
 */
public class App{
    public static void main(String[] args) {        
        SwingUtilities.invokeLater(new Runnable() {         
            @Override
            public void run() {
                new MainFrame();                
            }
        }); …
Run Code Online (Sandbox Code Playgroud)

java graphics swing jpanel repaint

4
推荐指数
1
解决办法
1314
查看次数

如何在不使用新JFrame的情况下更改JPanel中的图像(Repaint()不起作用!)

互联网的人!

我一直在为学校做一个饮酒游戏计划.

//不是相关的信息,只是为了lulz://学校建议游戏,我没有;)这是游戏// http://sotallytober.com/games/verbal/mexican/

无论如何,我使用以下代码在JPanel中绘制了一个图像(它是一个扩展JPanel的类)

public class iconPanel extends JPanel {

ImageIcon image;
Image pic;
public iconPanel(String startScreenImage) {
      image = new ImageIcon(startScreenImage);
      pic = image.getImage();
      this.setBackground(new Color(0, true));
}

@Override

public void paintComponent(Graphics g) {
    //Paint background first
    g.drawImage (pic, 0, 0, getWidth (), getHeight (), this);
}
Run Code Online (Sandbox Code Playgroud)

现在在我的另一个类中,我有布局和所有组件,我在我的JPanels上声明如下:

private JPanel pnDrinkPlayerBW;
Run Code Online (Sandbox Code Playgroud)

然后在名为MakeComponents的同一个类中的一个方法中,我将JPanel设置为:

pnDrinkPlayerBW = new iconPanel("img/glass.jpg");
pnDrinkPlayerBW.setPreferredSize(new Dimension(183,61));
Run Code Online (Sandbox Code Playgroud)

然后我将它添加到面板中,它必须来,并将该面板添加到方法makeLayout()中的框架上(我不认为它是有用的代码,所以如果你想看到它,请问我)

然后,如果按下按钮,我想将glass.jpg图像更改为另一个图像,例如beerGlass0.png,所以在另一个方法actionEvents()的actionlistener中我这样做:

pnDrinkPlayerBW = new iconPanel("img/beerGlass.png");
pnDrinkPlayerBW.setPreferredSize(new Dimension(183,61));
pnDrinkPlayerBW.repaint();
Run Code Online (Sandbox Code Playgroud)

我会把这个类的构造函数放在这里,就像人们需要它一样:

public SpelScreen(){
    makeComponents();
    makeLayout();
    actionEvents();
} // note : this …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel jframe repaint

4
推荐指数
1
解决办法
5279
查看次数

如果在JFrame代码中调用repaint(),则JPanel不会重新绘制

我有一个类ForestCellularJPanel,延伸JPanel和显示Forest.我写了一个原始的代码来创建JFrame,Forest,CellularJPanel并添加CellularJPanelJFrame.接下来是一个无限循环,它进行Forest更新和CellularJPanel重绘.

    JFrame jFrame = new JFrame();          

    Forest forest = new Forest();
    CellularJPanel forestJPanel = new CellularJPanel(forest);

    jFrame.add(forestJPanel);

    jFrame.pack();
    //jFrame.setResizable(false);
    jFrame.setLocationRelativeTo(null);
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jFrame.setVisible(true);

    while (true)
    {
        try
        {
            forestJPanel.repaint();
            forest.update();
            forest.sleep(); // calls Thread.sleep(...)
        }   
        catch (InterruptedException e)
        {

        }
    }
Run Code Online (Sandbox Code Playgroud)

这是CellularJPanel该类的代码:

public class CellularJPanel extends JPanel
{
    private CellularAutomata cellularAutomata;

    public CellularJPanel(CellularAutomata cellularAutomata)
    {
        super();
        this.cellularAutomata …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel repaint

4
推荐指数
1
解决办法
388
查看次数

在乐谱软件中将图形添加到 JPanel 的正确方法

我一直在开发一种乐谱软件,我想用它来训练我的音乐学生视奏。

我想知道我是否采取了正确的方法,或者是否有更好的方法。

我已经设法使用支持乐谱的 unicodes 和字体使用如下代码制作谱号、音符和谱表对象:

public static void spaceStaff(Graphics g){
    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    Font font = new Font("Bravura", Font.PLAIN, 32);
    g2.setFont(font);
    g2.drawString("\uD834\uDD1A", note.spacing-2, staffDistance);
    note.spacing = note.spacing + 16;
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个名为 Surface 的类,它将笔记绘制到 JPanel 上:

public class Surface extends JPanel {
@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    staff.spaceStaff(g);
    clef.drawGclef(g);//not given in example code above
    note.drawCrotchet(g, note.B1);//not given in example code above
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码启动应用程序并显示音乐笔记:

public class SightreadHelper extends JFrame {

public SightreadHelper(){
    initUI();
}

private void …
Run Code Online (Sandbox Code Playgroud)

java swing repaint

4
推荐指数
1
解决办法
330
查看次数

调整大小时重绘框架?

如何在帧repaint()最大化或调整大小后立即强制使用Frame ?

在发生特定操作时,我找不到调用哪种方法.我有一堆用Paint中的Graphic对象编写的图形,它们的方向取决于来自的实时反馈getWidth(),getHeight()但是当我最大化时不会调用paint,只有当那些像素不幸地改变时.

java awt frame repaint maximize

3
推荐指数
1
解决办法
1万
查看次数

仅在窗口调整大小完成后重新绘制JPanel

我有一个JPanel,我在上面画了四个矩形.随机选择这些矩形中的每一个的颜色.仅当用户单击特定矩形时,颜色才会更改.

问题是,当用户调整窗口大小时,JPanel上的所有内容都会重复"重新绘制".这导致矩形快速改变颜色.

理想情况下,在调整大小时,我需要矩形的颜色保持不变.否则,我还可以使用一个解决方案,在完成调整大小后,JPanel只重画一次.

您对我如何实现这一点有什么一般性的想法吗?如果ComponentListener中有onStartResize和onFinishResize回调方法,我觉得这样会容易得多.

谢谢!

java swing resize jpanel repaint

3
推荐指数
2
解决办法
6549
查看次数

如何使用jpanel与油漆(或重绘)

我是油漆/图形的新手,并想知道如何将JPanel添加到我的代码中,使得整个图形将在JPanel上,而不是在JFrame上.

换句话说,我正在尝试创建一个允许我这样做的GUI:在右侧显示左侧JPanel 上线条的良好移动,添加一个将显示的JTextArea(在JPanel上)图形的协调.

  • 这是一个更大问题的简化,但我想这里的代码更容易理解.

谢谢!!!

(下图,移动线或只是运行代码)

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import javax.swing.JFrame;

public class Test extends JFrame implements Runnable  
{
    private Line2D line;

public Test()
{
    super("testing");
    this.setBounds( 500, 500, 500, 500 );
    this.setVisible( true );
}

public void paint( Graphics g ) 
{
    Graphics2D g2 = (Graphics2D) g;
    g2.draw(line); 
}

@Override
public void run()
{
    int x=50;
    while (true)
    {
        try
        {
            Thread.sleep( 50 );

            line = new Line2D.Float(100+x, 100+x, 250-x, 260+x%2);
            x++;
            repaint(); …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel jframe repaint

3
推荐指数
1
解决办法
3776
查看次数

Repaint()没有在Java中调用paint()

让我先说我知道我在这个凌乱的代码中违反了一些基本的Java原则,但是我很想在周二之前完成一个社交科学实验的程序,我不懂Java,所以我'我现在基本上只是摸索它.

有了这个免责声明,我有一个单独的程序工作,其中一个圆圈在屏幕上移动,用户必须点击它.它在它自己独立的类文件中工作正常,但是当我将代码添加到我的主程序时,它不再有效.我甚至不明白为什么repaint()调用我的paint()函数 - 就我而言,它是神奇的,但我注意到repaint()在我的测试程序中调用paint(),但不是更复杂的实际程序,我认为这就是为什么圆圈不再在我的程序上绘画.

整个代码如下:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.io.FileReader;
import java.io.IOException;
import java.util.Calendar;

public class Reflexology1 extends JFrame{

private static final long serialVersionUID = -1295261024563143679L;
private Ellipse2D ball = new Ellipse2D.Double(0, 0, 25, 25);
private Timer moveBallTimer;
int _ballXpos, _ballYpos;
JButton button1, button2;
JButton movingButton;
JTextArea textArea1;
int buttonAClicked, buttonDClicked;
private long _openTime = 0;
private long _closeTime = 0;
JPanel thePanel = new JPanel();
JPanel thePlacebo = …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel repaint graphics2d

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

repaint ×10

java ×8

swing ×7

jpanel ×6

jframe ×2

.net ×1

awt ×1

c# ×1

frame ×1

graphics ×1

graphics2d ×1

javascript ×1

maximize ×1

resize ×1

svg ×1

winforms ×1