Java中的事件处理程序(使用net beans、Swing)与C#中的画图相似吗?在恢复窗体、调整窗体大小时应激发的事件...等
public void paint(Graphics g2){
g2 = pnlDrawing.getGraphics();
g2.clearRect(0, 0, size, size);
g2.setColor(Color.BLACK);
g2.fillRect(size/2-1, 0, 2, size); // draw y axis
g2.fillRect(0, size/2-1, size, 2); // draw x axis
//set the font
g2.setFont(new Font("Arial", 2, 12));
// write the values on the X axis
for(int i=0; i<=10; i++){
if(i == 0)
continue;
int pos1 = (size/2-1)-i*30;
int pos2 = (size/2-1)+i*30;
g2.draw3DRect(pos1, size/2-3, 1, 5, true);
g2.drawString(String.valueOf(-i),pos1-10,size/2-3+20);
g2.draw3DRect(pos2, size/2-3, 1, 5, true);
g2.drawString(String.valueOf(i),pos2-5,size/2-3+20);
}
for(int i=0; i<=10; i++){
if(i == 0)
continue;
int pos1 = (size/2-1)-i*30;
int pos2 = (size/2-1)+i*30;
g2.draw3DRect(size/2-3, pos1, 5, 1, true);
g2.drawString(String.valueOf(i),size/2-3+10,pos1+5);
g2.draw3DRect(size/2-3, pos2, 5, 1, true);
g2.drawString(String.valueOf(-i),size/2-3+10,pos2+5);
}
pnlDrawing.invalidate();
}发布于 2010-03-13 18:44:14
方法:
public void paint(Graphics g)在java.awt.Component类(它是所有Swing组件的超类)中是用于绘制的回调方法。因此,任何需要重新绘制的组件最终都将调用此方法,因此如果您希望执行自己的绘制,则可以覆盖该方法。
==更新==
你需要子类化一个组件来获取绘制回调,例如
public class MyPanel extends JPanel {
public void paint(Graphics g) {
// do your painting here
}
}或者,如果您不想创建一个全新的类,可以使用匿名内部类,例如
pnlDrawing = new JPanel() {
public void paint(Graphics g) {
// Your painting code
}
}发布于 2010-03-13 23:39:21
你应该重写paintComponent方法,因为paint还负责绘制子组件、边框和其他一些事情。
发布于 2010-03-14 01:12:13
该事件应在窗体恢复、调整大小时激发...等
我不太明白你的问题。Swing将自动确保已为您完成绘制,并且没有您可以监听的“绘制事件”。如果你想了解更多关于绘画的知识,你可以在Painting in AWT and Swing上阅读。
如果您想知道窗体执行以下操作时触发的是什么事件:
a)调整大小-使用ComponentListener
b)已恢复-使用WindowListener
在上述情况下,请阅读Swing Tuturial中的相应部分。您还可以找到关于自定义绘制的一节,它解释了为什么应该在paintComponent()方法中进行绘制。
https://stackoverflow.com/questions/2437995
复制相似问题