我有一个CRichEditCtrl,一个算法在其内容上就地工作,迭代内容并进行更改.这似乎导致它每次重新绘制,这会导致闪烁和明显的时间来完成操作,特别是如果控件开始滚动.我想知道是否有一种巧妙的方法可以阻止它重新粉刷一段时间.它实际上是一个使用CRichEditCtrl的自定义子类,所以我想的是:
void MyCustomEditCtrl::DoAlgorithm()
{
enableRepaint(false);
...
//to the actual work
...
enableRepaint(true);
}
Run Code Online (Sandbox Code Playgroud)
什么是最好的方法?一个自定义的on-paint处理程序,在进行操作时什么都不做?或者重新粉刷实际上是禁用?
我试图用gdi创建球动画,但我不能让它工作.我用它创造了一个球
Graphics graphics(hdc);
Run Code Online (Sandbox Code Playgroud)
钢笔(颜色(255,0,0,255)); graphics.DrawEllipse(&pen,sf,0,10,10); 我有while循环,循环并添加1到sf值基本上像这个sf ++; 比我尝试重新绘制窗口(它不起作用)所以生病最终有一个以上的圈; /这里是循环(循环是int WM_PAINT)
while(sd==1)//sd equals 1
{
sf++;
onPaint(hdc);
InvalidateRect (hWnd, NULL, TRUE);// this should repaint the window but it doesn't
UpdateWindow(hWnd);
}
Run Code Online (Sandbox Code Playgroud)
提前谢谢拉米
我有一个显示文本的面板.我希望面板更改其文本,然后在其他任何事情发生之前暂停应用程序.我正在使用Thread.sleep(1000).但是,出于某种原因,应用程序在调用Thread.sleep之前没有完成绘制面板(文本没有被更改).我也试过这个:
board.invalidate();
board.setLeftMessage("Not");
board.setRightMessage("Here");
board.revalidate();
Date current = new Date();
long timeNow = current.getTime();
Date newDate = new Date(timeNow + 1000);
while (current.before(newDate))
current = new Date();
Run Code Online (Sandbox Code Playgroud)
但也没有运气.有人有建议吗?非常感谢.
我和我的朋友决定开展一个在3个屏幕之间循环的纸牌游戏(Player1HandScreen,Player2HandScreen和FightScreen).
一旦Player1从中选择了他们的卡Player1HandScreen,就会Player1HandScreen导致Player2HandScreenPlayer2做同样的事情.然后Player2HandScreen导致FightScreen比较两张牌并且一名玩家被宣布为该轮的赢家.
我们遇到的问题是,一旦轮次结束我们想要清除Player1HandScreen以及Player2HandScreen一旦刷新我们的参数,我们就无法成功更新GUI.
我们已经尝试过使用removeAll(),但我们无法将其用于repaint()或validate().
我们也进行了调查super.paintComponents(g),updateUI()但两者都给我们带来了希望和梦想.
我有一个很长的重绘操作,我想限速,即确保它最多每N毫秒调用一次.
我目前的解决方案有点令人不满意:我使用Timer持续时间较短的Swing ,restart()每当我收到一个事件时我都会这样做.这样可确保在N毫秒窗口内发生事件时不会触发重绘(即重绘将在事件发生并且N毫秒"安静"时间段过去后发生).
我想要的是确保在第一个事件后最多N毫秒调用重绘,并且重绘时间最多为N.任何想法?(没有记录调用start已启动的效果Timer).
我有一个middlePanel,显示panel1,里面有6个按钮.单击按钮时,其他组件将显示在mainPanel中,最后返回到panel1.
我面临的问题是:组件不会立即显示 - 我开始移动光标使其可见.我用来设置面板的代码是:
public void SetMainPanel(JPanel panel) {
middlePanel.removeAll();
this.middlePanel = panel;
panel.setVisible(true);
this.middlePanel.setVisible(true);
mainPanel.add(middlePanel, BorderLayout.CENTER);
middlePanel.revalidate();
middlePanel.repaint();
mainPanel.revalidate();
mainPanel.repaint();
}
Run Code Online (Sandbox Code Playgroud)
请参阅已设置的传递面板可见,以及添加它的中间面板.updateui&validate包含middlePanel的middlePanel和mainPanel.但为什么会出现这个问题.
任何人都可以帮助我知道为什么这个问题以及如何解决它.我觉得他们是解决这个问题的一种方法但却无法回想起来.
我遇到了一个问题,我希望你们中的一个好思想家能够克服......
出于某种原因,一旦我加载了我的Windows窗体,如果用户按下该Alt键,表单将重绘,从而导致闪存.
这只会在第一次发生,因此任何后续Alt按键都不会发生任何事情.
我没有处理按键的任何菜单条或事件,所以我只能假设它是我没有设置的设置,或者是我在不知不觉中设置的设置.
仅供参考,表单在构造函数中执行以下操作
DoubleBuffered = true;
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint, true);
Run Code Online (Sandbox Code Playgroud)
这是因为我有许多面板和标签也是如此,以实现透明度.
手指交叉,其中一个你会知道为什么;)
我试图调用panel1 paint方法用橙色线重新绘制面板(它用蓝线启动).
我已经尝试过invalidate(),update()和refresh(),但似乎没有任何东西可以调用panel1的paint事件......
paint事件处理程序已添加到panel1:
this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 testForm = new Form1();
Application.Run(testForm);
testForm.drawNewLine();
}
}
Run Code Online (Sandbox Code Playgroud)
public partial class Form1 : Form
{
bool blueLine = true;
bool orangeLine = false;
public Form1()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
if (blueLine == true)
{
Pen bluePen …Run Code Online (Sandbox Code Playgroud) 我正在研究这个小型赛马模拟器并且坚持使用它.我希望用户首先选择比赛中的马匹数量(2-6),然后单击"开始"按钮.然后,我想绘制/绘制赛道和马(由圆圈表示).出于某种原因,当代码到达创建Horse实例的点时,它永远不会被绘制到框架中.下面是代码.我错过了什么?
Main.java:
import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
RaceTrack myRace = new RaceTrack();
myRace.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
RaceTrack.java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.Border;
public class RaceTrack extends JFrame implements Runnable {
public RaceTrack() {
initUI();
}
public static int selectedRaceSize = 2;
private void initUI() {
final Container …Run Code Online (Sandbox Code Playgroud) 我正在尝试按下按钮时显示一个字符串,但它不起作用.我不知道问题是什么.我没有错误,但这并没有打扰我.我想,我遗漏了一些基本的东西.请帮忙!!
//I'm trying to draw a string in the frame when a button is pressed, but it won't work..
//Can't figure out what the problem is.
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class AppletTwo extends JFrame implements ActionListener
{
JFrame frameOne;
JButton btnOne;
AppletTwo()
{
frameOne = new JFrame("frameOne");
frameOne.setSize(320,240);
frameOne.setLayout(new FlowLayout(FlowLayout.LEFT));
frameOne.setVisible(true);
frameOne.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btnOne = new JButton("Print");
btnOne.addActionListener(this);
frameOne.add(btnOne);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == btnOne)
{
repaint();
}
}
public void paint(Graphics g)
{
g.drawString("Never Works",150,150); …Run Code Online (Sandbox Code Playgroud)