相关疑难解决方法(0)

JTextFields在JPanel上的活动绘图之上,线程化问题

有没有人曾尝试使用Swing构建一个合适的多缓冲渲染环境,在此环境中可以添加Swing用户界面元素

在这种情况下,我有一个动画红色矩形绘制在背景上.背景不需要每帧更新,因此我将其渲染到BufferedImage上,并仅重绘清除矩形的先前位置所需的部分.请参见下面的完整代码,这扩展了以前的线程通过@trashgod给出的例子,在这里.

到现在为止还挺好; 流畅的动画,低CPU使用率,无闪烁.

然后我将JTextField添加到Jpanel(通过单击屏幕上的任何位置),并通过在文本框内单击来关注它.现在,清除矩形的先前位置会在每个光标闪烁时失败,请参见下图.

我很好奇是否有人知道为什么会发生这种情况(Swing不是线程安全的?图像是异步绘制的?)以及寻找可能解决方案的方向.

这是在Mac OS 10.5,Java 1.6上

JPanel重绘失败了http://www.arttech.nl/javaredrawerror.png

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Transparency;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.Timer;

public class NewTest extends JPanel implements 
    MouseListener, 
    ActionListener, 
    ComponentListener, 
    Runnable 
{

JFrame f;
Insets insets;
private Timer t = new Timer(20, …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading rendering buffering

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

Swing HTML drawString

我正在尝试为特定目的创建一些特殊组件,在该组件上我需要绘制一个HTML字符串,这是一个示例代码:

 public class MyComponent extends JComponent{
     public MyComponent(){
        super();
     }

     protected void paintComponent(Graphics g){
        //some drawing operations...
        g.drawString("<html><u>text to render</u></html>",10,10);
     }
 }
Run Code Online (Sandbox Code Playgroud)

不幸的是,drawString方法似乎没有识别HTML格式,它愚蠢地绘制字符串就像它一样.

有没有办法让这项工作?

html java swing jcomponent graphics2d

10
推荐指数
6
解决办法
8619
查看次数

在Swing里面的BufferedImage中绘画

我正在研究用java编写的绘图应用程序并遇到一些(更多)问题.我有一个gui和一个工作程序(有点),我唯一的问题是用户绘制的线条和图形没有保存(在绘制下一个之后消失).

从过去的问题我了解到我将需要使用BufferedImage来存储绘图然后在我的绘画类中绘制它.

我的问题是,任何人都可以提供如何使用bufferedimage来存储和绘制绘图的基本解释/示例,如果需要,我将如何将绘制线的颜色和粗细传递到存储的数组中.

那就是全班同学.

package javapaint;

import java.awt.*;
import javax.swing.*;

public class JavaPaintUI extends javax.swing.JFrame {

/** Creates new form JavaPaintUI */
public JavaPaintUI() {
    initComponents();
}

// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    buttonGroup1 = new javax.swing.ButtonGroup();
    buttonGroup2 = new javax.swing.ButtonGroup();
    jPanel4 = new javax.swing.JPanel();
    jRadioButton9 = new javax.swing.JRadioButton();
    jRadioButton10 = new javax.swing.JRadioButton();
    jSlider2 = new javax.swing.JSlider();
    jLabel1 = new javax.swing.JLabel();
    jPanel2 = new Panel2();
    jPanel3 = new javax.swing.JPanel();
    jRadioButton3 = new javax.swing.JRadioButton();
    jRadioButton4 = new javax.swing.JRadioButton(); …
Run Code Online (Sandbox Code Playgroud)

java swing bufferedimage graphics2d paintcomponent

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