标签: repaint

Java重绘不能正常工作

我使用java重绘方法,它重新绘制,但只有当我点击画布或调整面板大小时才会看到更新.我怎样才能解决这个问题 ?是什么导致的?

java canvas paint panel repaint

5
推荐指数
1
解决办法
6366
查看次数

如何在JScrollPane上禁用轮滚动事件的默认绘制行为

我最近购买了Filthy Rich Clients这本书,我发现它非常有用和有趣.在本书的一个例子的基础上,我尝试实现一个自定义ScrollPane,它在要显示的组件的视图底部显示一个"阴影".我最终得到了下面的代码.它工作但不完美.特别是当我通过拖动滚动条滚动窗格时,一切正常,绘画非常流畅.但是当我用鼠标滚动滚动时,阴影闪烁,我不明白为什么.谁能帮我?

编辑:滚动窗格中的任何组件都会发生同样的事情.编辑代码以显示两个帧以查看问题.

编辑2:我已将问题与滚动窗格处理鼠标滚轮事件的方式隔离开来.滚动滚动窗格时,根据滚动的方向稍微向上或向下复制视口的内容,然后绘制进入视图的区域.我的代码使整个组件"脏"但是在组件移动了内容之后.所以你会立刻看到"影子"渐变不合适,直到发出重画.有关如何禁用此功能的任何想法?

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Container;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.RepaintManager;

public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame("Table");
        JFrame f1 = new JFrame("Text Area");
        Object[] names = new Object[] { "Title", "Artist", "Album" };
        String[][] data = new String[][] {
                { "Los Angeles", "Sugarcult", "Lights Out" },
                { …
Run Code Online (Sandbox Code Playgroud)

java swing java-2d repaint

5
推荐指数
1
解决办法
1558
查看次数

在WinForms中加速缓慢的CPU密集型滚动

如何在WinForms应用程序中加快UserControls的滚动速度.

我的主窗体在慢速机器上快速滚动很麻烦 - 每个小滚动增量的绘画都是CPU密集型的.

我的表单大约有五十个UserControls(有多个字段)一个位于另一个之下.我试图拦截OnScroll和UserPaint为了消除一些不必要的重新油漆的非常小的滚动事件,但潜在的油漆被称为反正.

如何在较慢的机器上简化滚动?

c# performance rendering repaint winforms

5
推荐指数
1
解决办法
2536
查看次数

.setVisible(true)立即重绘

在一个简短的方法中,我使用setVisible(false)隐藏JFrame.然后我截取屏幕截图并使用setVisible(true)恢复JFrame.

在再次显示之后,窗口应该显示与之前不同的图片(假设拍摄截图的一部分).

问题是在调用setVisible(true)之后,在调用paintComponent并绘制更新状态之前,窗口会使用旧内容闪烁一瞬间.

我可能会以一种丑陋的方式解决这个问题,但我想知道是否有更好的解决方案.

在此先感谢您的帮助

编辑:在准备一个例子的时候,我注意到,当我不在程序中使用透明度时几乎看不到效果.应该提到这一点.这是我想出的:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JPanel;

import com.sun.awt.AWTUtilities;
public class Test {

    static boolean flag = false;
    static Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();

    public static void main(String[] args) throws InterruptedException {
        JFrame frame = new JFrame();
        frame.setUndecorated(true);
        AWTUtilities.setWindowOpaque(frame, false);  //draw on a transparent window
        frame.setSize(scrSize.width, scrSize.height);
        frame.setContentPane(new JPanel() {
            protected void paintComponent(Graphics g) 
            {
                if (Test.flag) {
                    g.setColor(Color.RED);
                    g.drawRect(50, 50, scrSize.width - 100, scrSize.height - 100);
                }
                else { …
Run Code Online (Sandbox Code Playgroud)

java swing transparency visibility repaint

5
推荐指数
1
解决办法
7058
查看次数

JLayeredPane和绘画

我正在编写一个应用程序,它有一个JLayeredPane(称之为图层),包含两个不同层的JPanel.我覆盖了底部JPanel的paintComponent方法(称之为grid_panel),因此它绘制了一个网格,并在顶部绘制了一个paintComponent方法(称之为circuit_panel),因此它绘制了一个电路.

以下是结构摘要:

layers -
       |-circuit_panel (on top)
       |-grid_panel (at bottom)
Run Code Online (Sandbox Code Playgroud)

我希望grid_panel保持静态,即不进行任何重绘(除了初始的重绘),因为它不会改变.

麻烦的是,每当我调用circuit_panel.repaint()时,grid_panel也会被重新绘制! 这绝对不是有效的.

我认为这是由于JLayeredPane的热切绘画行为.有没有办法在JLayeredPane中禁用此功能?

如果你有兴趣看到上述效果,我写了一个小的演示程序:

public class Test2 extends JFrame {

    public Test2() {
        JLayeredPane layers = new JLayeredPane();
        layers.setPreferredSize(new Dimension(600, 400));

        MyPanel1 myPanel1 = new MyPanel1();
        MyPanel2 myPanel2 = new MyPanel2();
        myPanel1.setSize(600, 400);
        myPanel2.setSize(600, 400);
        myPanel1.setOpaque(false);
        myPanel2.setOpaque(false);
        myPanel2.addMouseListener(new MyMouseListener(myPanel2));

        layers.add(myPanel1, new Integer(100)); // At bottom
        layers.add(myPanel2, new Integer(101)); // On top

        this.getContentPane().add(layers, BorderLayout.CENTER);
        this.setSize(600, 400);
    }

    class MyPanel1 extends JPanel {

        Color getRandomColor() {
            int r = (int) …
Run Code Online (Sandbox Code Playgroud)

java swing paint repaint jlayeredpane

5
推荐指数
1
解决办法
5269
查看次数

Java中的repaint()方法

我正在玩Java图形类,我只是想知道 - 何时需要调用该方法repaint()?我试着将它评论出来,但它似乎并没有影响我的输出GUI.我已经看到它在我阅读过的Java GUI代码中使用了很多.有人会介意何时使用它以及何时不使用它?

java awt repaint

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

程序不访问扩展JPanel类的方法paintComponent()

这是 JFrame

package client.connection;

import java.awt.Dimension;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JFrame;


class DrawFrameRemoteControl extends JFrame
{
    private DrawPanelRemoteControl imagePanel;
    private ClientRemoteControlConnection clientRemoteControlConnection;
    private ObjectInputStream clientInputStream;
    private ObjectOutputStream clientOutputStream;
    private Dimension imageDimension;
    private Dimension serverDimension;

    public DrawFrameRemoteControl(Dimension imageDimension,ClientRemoteControlConnection clientRemoteControlConnection,ObjectInputStream clientInputStream,ObjectOutputStream clientOutputStream,Dimension serverDimension)
    {
        super("Remote Desktop Control");

        this.clientRemoteControlConnection=clientRemoteControlConnection;
        this.clientInputStream=clientInputStream;
        this.clientOutputStream=clientOutputStream;
        this.imageDimension=imageDimension;
        this.serverDimension=serverDimension;

        imagePanel=new DrawPanelRemoteControl(imageDimension);
        add(imagePanel);


        setSize(imageDimension.width,imageDimension.height);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        setLocationRelativeTo(null);
    }

    void drawNewImageGrayscale(byte[] array)
    {
        imagePanel.setNewImageGrayscale(array);
        imagePanel.repaint();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是扩展的JPanel类 -

package client.connection;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit; …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel jframe repaint

5
推荐指数
1
解决办法
1972
查看次数

Swing刷新周期

我试图了解何时使用revalidate/repaint/pack.

令人惊讶的是,我没有找到更详细的引擎盖文档(随意链接).

到目前为止,我已经明白这是RepaintManager的全部责任.

  • 油漆/重绘指的是看起来脏/干净的东西
  • pack/validate/revalidate指的是什么是有效的

这篇关于Oracle的文章解释说,调用重绘会在Event Dispatcher Thread上排队一个作业,该作业将在组件上调用paintImmediately()(这会重绘组件).

此跟踪表示要生效或不生效与LayoutManager相关联.而这完全取决于组件的大小而不是内容.

  1. 是否应该在移动/调整组件大小时调用revalidate,并在更改组件内容时重新显示?
  2. pack()方法真的是一个你不应该打电话的弃用的东西吗?
  3. 以上任何一项索赔都有错吗?

java swing refresh repaint

5
推荐指数
1
解决办法
638
查看次数

IE10重绘/重绘问题

你可以在这里看到这个工作/打破:http://new.campchampions.com/parents

这个问题只出现在IE10中.在用户滚动了一些方法之后,导航变得固定(一类fixed添加到body其中的效果hgroup.primary(我知道,我知道hgroup不再是'东西'了.不要判断我.)).如果你回到页面顶部,它会解锁,恢复正常.

在IE10中,当您返回到页面顶部时,导航元素将消失,直到鼠标向上移动到黄色条的任何部分.这让我疯了.

我尝试过让JS在滚动顶部/取消固定导航的各种元素中附加/更改内容.

我有一个简短的YouTube视频,显示了这个问题:http://youtu.be/-itTC_j-9YE

有什么想法或想法吗?那简直太好了.谢谢!

html css repaint redraw internet-explorer-10

5
推荐指数
1
解决办法
3092
查看次数

在乐谱软件中将图形添加到 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
查看次数