是在EventDispatchThread类中:
public void run() {
try {
pumpEvents(new Conditional() {
public boolean evaluate() {
return true;
}
});
} finally {
/*
* This synchronized block is to secure that the event dispatch
* thread won't die in the middle of posting a new event to the
* associated event queue. It is important because we notify
* that the event dispatch thread is busy after posting a new event
* to its queue, so the EventQueue.dispatchThread reference must
* be valid at that point.
*/
synchronized (theQueue) {
if (theQueue.getDispatchThread() == this) {
theQueue.detachDispatchThread();
}
/*
* Event dispatch thread dies in case of an uncaught exception.
* A new event dispatch thread for this queue will be started
* only if a new event is posted to it. In case if no more
* events are posted after this thread died all events that
* currently are in the queue will never be dispatched.
*/
/*
* Fix for 4648733. Check both the associated java event
* queue and the PostEventQueue.
*/
if (theQueue.peekEvent() != null ||
!SunToolkit.isPostEventQueueEmpty()) {
theQueue.initDispatchThread();
}
AWTAutoShutdown.getInstance().notifyThreadFree(this);
}
}
}
假设给这样一个测试类:
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
class HelloWorldPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("Not a hello,World program", X, Y);
}
public static final int X = 75;
public static final int Y = 100;
}
class HelloWorldFrame extends JFrame {
public HelloWorldFrame() {
setTitle("HelloWorld");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
HelloWorldPanel panel = new HelloWorldPanel();
getContentPane().add(panel);
}
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 300;
}
public class TestHelloWorld {
public static void main(String args[]) {
HelloWorldFrame frame = new HelloWorldFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
分享到:
相关推荐
InitializeComponent(); this.DoubleBuffered = true; } private void ClockForm_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; // 绘制时钟盘面... // 计算并绘制指针... } ...
3. **事件处理**:MX Component支持事件驱动的编程模式,手册会详细解释如何注册事件监听器、触发和处理事件,以便在应用中实现响应式交互。 4. **数据绑定**:手册将介绍如何通过数据绑定将组件的属性与应用的数据...
- `repaint()`方法请求组件重新绘制,通常在组件需要更新时调用,实际上会触发`update`方法。 - `update(Graphics g)`首先清除组件为背景颜色,然后调用`paint`方法并传递`g`参数,对于创建动态效果和动画非常有用...
添加一个Canvas用于绘制点和凸包,一个Button用于触发凸包计算,以及可能的Label或TextBlock用于显示相关信息。 XAML代码示例: ```xml xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ...
6. **案例研究**:为了更好地理解和应用理论知识,书中可能包含了一些实际组件开发的案例,如创建数据库连接组件、图形绘制组件等,让读者能够在实践中学习。 7. **跨平台开发**:随着FireMonkey框架的引入,Delphi...
InitializeComponent(); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); DrawCurve(e.Graphics); } private void DrawCurve(Graphics g) { // 在这里编写绘制曲线的代码 } }...
InitializeComponent(); this.rectangle = new Rectangle(50, 50, 100, 100); this.timer = new Timer(); this.timer.Interval = 100; // 每100毫秒更新一次 this.timer.Tick += Timer_Tick; } private void...
"fire font"标签进一步确认了这个描述是关于创建火焰效果的文字。 在文件列表中,“FireFX”可能是实现这种火焰效果的一个特定库、类或者示例项目。它可能包含了实现火焰效果的代码片段、图形资源,或者是预设的...
当窗体需要重绘时(例如,当正方形移动时),此事件会被触发。可以使用Graphics对象的DrawRectangle方法来绘制正方形,需要提供四个参数:左上角的x和y坐标,以及正方形的宽度和高度。 ```csharp private void Form...
// 触发重新绘制 } // 绘制指针 private void DrawHands(Graphics g, int centerX, int centerY, int radius) { // ... } ``` 在DrawHands方法中,计算每个指针的角度和位置,然后使用Graphics的DrawLine方法...
为了绘制正弦曲线,我们需要创建一个`JFrame`实例,并在其内容面板上添加一个自定义的`Component`。 这个自定义的`Component`通常会继承`javax.swing.JComponent`或`java.awt.Component`,然后重写`paintComponent...
本文旨在深入探讨Swing框架中Component的定制方法,特别是GUI的绘制机制以及Swing的线程处理机制。 #### 1. Swing组件的基本概念 在Swing中,所有可视化的组件都是`Component`类的子类或孙类。Swing的核心类`...
1. **设计时服务**:Component Designer能够提供各种设计时服务,例如`IComponentChangeService`用于在属性更改时触发通知,`ISelectionService`用于获取当前选中的组件,`ITypeDescriptorContext`提供了上下文信息...
Timer的Elapsed事件会在指定间隔触发,我们在这个事件处理器中更新时间,并调用窗体的Invalidate方法,强制重绘窗体,这样时钟就会实时更新了。 代码示例: ```csharp public partial class MyClock : Form { ...
首先,了解Delphi的VCL(Visual Component Library)框架是必要的。VCL提供了大量的控件和组件,如TCanvas和TPaintBox,它们可以用于绘制图形。在这个源码实例中,开发者可能使用了TPaintBox控件来承载波形图的绘制...
在`Java源码软件开发`中,我们通常会将这些代码封装成一个自定义的`JPanel`或`Component`子类,并覆盖`paintComponent`方法进行绘制。这样,我们可以在应用程序中方便地添加和管理这个组件。 总的来说,实现"Java...
关于“变形窗体”,这可能是指窗体的形状可以根据用户的交互或其他条件动态改变。在C#中,我们可以利用Region属性来实现这个功能。Region属性决定了窗体的可见区域,我们可以将其设置为我们自定义的形状,比如八边形...
它提供了各种方法,如`drawRect()`, `drawLine()`, `fillPolygon()`等,用于在Component上绘制图形。在本示例中,开发者可能使用了Graphics对象的`drawImage()`方法来绘制火焰图片。 3. **Image类**: `java.awt....
在每次触发时,我们更新行星的位置,然后调用`repaint()`方法来重新绘制组件。 太阳系中的每个行星可以被抽象为一个类,包含其位置、速度和大小等属性。这些行星类可以继承`java.awt.Shape`接口,这样就能利用Java...
接下来,我们要添加一个Paint事件处理程序,这将在窗口加载时触发,用于绘制图形。在窗体类(通常名为Form1.cs)中,找到`Load`事件的处理函数,例如: ```csharp private void Form1_Load(object sender, ...