标签: repaint

为什么立刻重绘(长)重绘?

根据Javadoc,JComponent.repaint(long)应该在将来的某个时间安排一个repaint().当我尝试使用它时,它总是触发立即重绘.我究竟做错了什么?

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Repaint
{
  public static final boolean works = false;

      private static class CustomComponent extends JPanel
  {
    private float alpha = 0;

    @Override
    protected void paintComponent(Graphics g)
    {
      super.paintComponent(g);
      Graphics2D g2d = (Graphics2D) g;
      g2d.setComposite(
        AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
      g2d.setPaint(Color.BLACK);
      g2d.fillRect(0, 0, getWidth(), getHeight());
      alpha += 0.1;
      if (alpha > 1)
        alpha = 1;
      System.out.println("alpha=" + alpha);
      if (!works)
        repaint(1000); …
Run Code Online (Sandbox Code Playgroud)

java swing repaint

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

当MDIChild本身包含带有对齐的TPanel等容器时,如何重新绘制MDIChild表单:= alClient和ParentBackground:= False

综述:

请参阅Andreas的知识渊博的评论!

==========================================

如下面的代码所示,TForm7是MDIForm形式,TForm8是MDIChild形式.TForm8包含一个alClient对齐的面板,它还包含一个TPaintBox.如果TForm8的面板的ParentBackground设置为False,我无法从TForm7触发TForm8的paintbox的绘制事件.我想知道为什么会发生这种情况,如何在不明确引用它的情况下触发TForm8的paintbox绘制事件.任何建议表示赞赏!

注意:如果我调用Self.Repaintwithint TForm8,例如在其Click事件中,可以触发TForm8的paintbox的paint事件.只有当我form8.repaint在TForm8外面打电话时才能触发它.我想知道为什么会这样?

可能相关的SO页面:
如何在模态表单处于活动状态时重新绘制父表单?

包含MDIForm表单的单元.

    unit Unit7;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;

    type
      TForm7 = class(TForm)
        procedure FormShow(Sender: TObject);
        procedure FormClick(Sender: TObject);

      end;

    var
      Form7: TForm7;

    implementation

    {$R *.dfm}

    uses
      Unit8;

    procedure TForm7.FormShow(Sender: TObject);
    begin
      TForm8.Create(Self);
    end;

    procedure TForm7.FormClick(Sender: TObject);
    begin
      TForm8(ActiveMDIChild).Repaint;
    end;

    end.
Run Code Online (Sandbox Code Playgroud)

上述单位的Dfm.

    object Form7: TForm7
      Left = 0
      Top = 0
      Caption = 'Form7'
      ClientHeight = 379
      ClientWidth = 750
      Color = clBtnFace …
Run Code Online (Sandbox Code Playgroud)

delphi mdichild repaint

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

在不重新绘制树的情况下更新JTree中的ImageIcon?

基本上我编辑属性private string status="OK"UserObject()的一个DefaultTreeNode().

我有其中CustomRenderer implements DefaultCellRenderer,其通过渲染的"OK"属性设置图标UserObjectTreeNode.

最初,当我选择一个节点时,图标会发生变化.我正在使用Tree.revalidate()&Tree.repaint(),并且正在反映这一变化.

但是,我不确定这是否非常有效.这样做的正确方法是什么?我尝试过,TreeModel.nodesChanged(new DefaultMutableTreeNode(myUserObject))TreeNodeChanged event不会开火.

因此,每次更改TreeNode的用户工作以查看图形更新时,我是否坚持使用重新绘制整个树?

java swing jtree repaint treemodel

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

Java,我的图像不会更新/移动

我是Java的新手,但是......在网上阅读了很多内容之后,我一直在努力开发这个游戏并开始使用,我正在使用一些图像.我相信,我正在努力更新他们的立场以证明当然的运动KeyListener.不幸的是,图像仍然在同一个地方并且拒绝移动D:

我确定我的一些代码过于复杂,但这里是:\

public class Game extends javax.swing.JPanel implements ActionListener, KeyListener{

    private Vladimir vlad;
    private Timer timer;

    public Game() {
        addKeyListener(this);
        setPreferredSize(new Dimension(1024,768));
        setDoubleBuffered(true);

        vlad = new Vladimir();
        timer = new Timer(15,this);
        timer.start();
    }

    public void actionPerformed (ActionEvent e){
        repaint();
    }

    private void toggleKey(int keyCode, boolean pressed){
        if (keyCode == 87){ // W
             vlad.move("UP", pressed);
        }

        if (keyCode == 83){ // S
            vlad.move("DOWN", pressed);
        }

        if (keyCode == 65) // A
        {
            vlad.move("LEFT", pressed);
        }

        if (keyCode == 68) …
Run Code Online (Sandbox Code Playgroud)

java swing image keylistener repaint

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

如何使用新信息更新JDialog?

我有一个Gui,它允许用户单击一个按钮并查看文本文件的内容.问题是文件可能相当大(100,000多行数据),并且在表中读取和显示可能需要15秒以上.

文本文件格式的示例:

*/
    Account ID     : 8 digit number
    Money Charged  : Integer < $10
    Values separated by \t 

/*


Account Id    Money Charged
----------    --------------
731298        3
359412        5
624937        1
Run Code Online (Sandbox Code Playgroud)

因此,当单击该按钮时,它会读取每一行并将每个ID放入一个地图中并增加帐户的费用.

完成后,它会将一个JTable放在一个带有信息的JDialog中.但是,只要单击该按钮,用户可能会对程序正在执行的操作感到困惑,因为在JDialog和JTable出现之前我已经经历了超过10-15秒的延迟.

那么有没有办法让JDialog显示一个字符串,让用户知道它正在创建表?(我认为它会使用的方法的JDialog如一个完成repaint()validate但这些似乎并没有这样的伎俩.

这是我认为应该完成的顺序:

//Psuedo-code
actionPerformed {
    create frame
    display label that lets user know its creating table
    read text file
    create map and place values
    remove label
    update dialog with table // unsure what to do to update it properly
}
Run Code Online (Sandbox Code Playgroud)

所以我的整体问题很简单: 是否可以告知用户它当前正在计算数据(通过JDialog中的JLabel),一旦读取数据,就显示JTable(通过更新JDialog)? …

java swing jdialog repaint

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

从另一个类刷新jframe

我想刷新(重绘)一个jframe,如果其他类中的事件发生,我使用下面的代码,但有些事情,这段代码不起作用:

static Container container;
public FrameConstractor()
{
    ...
    container = getContentPane();
    ...
}

public static void refreshMethod()
{
    container.repaint();
}
Run Code Online (Sandbox Code Playgroud)

我发生事件时调用刷新方法; 但是这段代码为我重新画了一些框架,有些时候没有做任何事情!

java swing refresh jframe repaint

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

我可以问一下如何反复重绘()吗?

对不起,请问java重复重复的问题,我遇到麻烦,我反复使用起草来表达Pacman Open&Close嘴巴动作.但是这个程序只有一次不会动......有人可以帮我解决这个问题......非常非常感谢!:D

我的代码如下:

package Strive;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

class CDrawF extends JFrame {
    CDrawF (){
        setTitle("??????");                       //JFrame interface
        setBounds(50, 50, 490, 260);        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        for(int i = 0; i<= 360; i++){              //repeatly 360 times
        repaint();
        g2.setColor(new Color(1.0f, 0.0f, 1.0f));               
        g2.fill(new Arc2D.Double(100, 100, 80, 80, 30, 300, Arc2D.PIE)); 
        //PacMan close mouth
        repaint();
        try{            //Delay setions
                Thread.sleep(1000);
             }catch(InterruptedException ex){}
        g2.fill(new Arc2D.Double(100, 100, 80, 80, 10, 340, Arc2D.PIE)); 
        //PacMan …
Run Code Online (Sandbox Code Playgroud)

java swing paint repaint paintcomponent

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

当鼠标释放时,线条在绘图程序中消失

下面写在BasicLinePix类中我尝试创建一个程序,允许用户通过按住shift键同时按住鼠标按钮并将其拖动到端点来绘制线条.问题是,当鼠标被释放时,该行消失.我试图让线条显示在面板中,以及显示以相同方式绘制的多条线条.

我的代码看起来像:

    // this method overrides the paint method defined in JFrame
    public void paint(Graphics g) {
        super.paint(g);


    }


    // Inner class - instances of this class handle action events
    private class EventHandler implements ActionListener, MouseListener,
            MouseMotionListener {

        private Point startPoint = null; // line's start point
        private Point endPoint = null; // line's most recent end point

        public void actionPerformed(ActionEvent arg0) {
            if (arg0.getActionCommand().equals("Exit")) {
                statusLabel.setText("Exiting program...");
                System.exit(0);
            }

        }

        @Override
        public void mouseClicked(MouseEvent arg0) {
            // TODO Auto-generated …
Run Code Online (Sandbox Code Playgroud)

java swing paint line repaint

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

Swing中的绘画不起作用

为什么这不起作用?它向我展示了GUI但不是画面.我如何将其更改为两个类?

import java.awt.Graphics;
import javax.swing.JFrame;

public class runpaintgui extends JFrame{    

    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setSize(5000,2000);
        frame.setResizable(false);
        frame.setTitle("game");
        frame.setVisible(true);    
    }

    public void paint(Graphics g){
        super.paint(g);
        g.drawString("adsf",40,45);
        g.draw3DRect(50, 30, 600, 700, true);   

        repaint();
    }    
}
Run Code Online (Sandbox Code Playgroud)

java swing paint jframe repaint

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

重新调用时JTable不重绘

嗨我的计数器事件发生时我的数据表没有重新绘制有困难.我正在检查我正在制作的游戏中的玩家连接性.当玩家连接JTable时应改变以显示玩家已连接; 但是,即使填充表的变量正在发生变化,表也不会发生变化.

我的GUI代码链接在下面,基本上当播放器连接时,GUI代码中的字符串变量发生变化,然后我的计时器应该每秒重绘一次表并注意到更改并使用正确的信息重绘.变量正在改变,我可以在控制台中看到输出,但表格不会相应更新.

谢谢你的期待.

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

@SuppressWarnings("serial")
public class DPServerGUI extends JFrame implements ActionListener
{
  private DPServerTest mainServer;

  private JPanel serverPanel;
  private JButton startButton;
  private JButton loadServerButton;
  private JLabel serverLabel;
  String[] header = {"Players", "Connected To Server"};
  private JTable connectedClientsList;
  private DefaultTableModel tableModel;
  private JScrollPane scrollPane;
  private static Dimension dim;
  private Timer timer;
  public static String player1Connected = "No";
  public static String player2Connected = "No";
  public static String player3Connected = …
Run Code Online (Sandbox Code Playgroud)

java swing jtable repaint

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