根据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) 综述:
请参阅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) 基本上我编辑属性private string status="OK"中UserObject()的一个DefaultTreeNode().
我有其中CustomRenderer implements DefaultCellRenderer,其通过渲染的"OK"属性设置图标UserObject的TreeNode.
最初,当我选择一个节点时,图标会发生变化.我正在使用Tree.revalidate()&Tree.repaint(),并且正在反映这一变化.
但是,我不确定这是否非常有效.这样做的正确方法是什么?我尝试过,TreeModel.nodesChanged(new DefaultMutableTreeNode(myUserObject))但TreeNodeChanged event不会开火.
因此,每次更改TreeNode的用户工作以查看图形更新时,我是否坚持使用重新绘制整个树?
我是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) 我有一个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)? …
我想刷新(重绘)一个jframe,如果其他类中的事件发生,我使用下面的代码,但有些事情,这段代码不起作用:
static Container container;
public FrameConstractor()
{
...
container = getContentPane();
...
}
public static void refreshMethod()
{
container.repaint();
}
Run Code Online (Sandbox Code Playgroud)
我发生事件时调用刷新方法; 但是这段代码为我重新画了一些框架,有些时候没有做任何事情!
对不起,请问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) 下面写在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) 为什么这不起作用?它向我展示了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) 嗨我的计数器事件发生时我的数据表没有重新绘制有困难.我正在检查我正在制作的游戏中的玩家连接性.当玩家连接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)