|
癥狀一:調(diào)用jframe的repaint()方法時(shí)為什么不會(huì)自動(dòng)引發(fā)paintcomponent()方法?(不過會(huì)引發(fā)paint()方法)
癥狀二:引發(fā)paint()方法后,我用drawstring()方法在jframe中畫字符串,不能顯示,不過改變jframe的大小時(shí)會(huì)正確顯示。 其實(shí)repaint()方法,好像是這樣的,如果有paint()方法則調(diào)用paint()方法,沒有paint()方法
而有paintcomponent()方法則調(diào)用paintcomponent()方法,下面代碼就是為了測(cè)試。你可以測(cè)試有paint()方法,和注釋掉 paint()方法兩種情況。 import javax.swing.*; import java.awt.*; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.graphics2d; public class testpanel extends jframe { ttt panel = new ttt(); jpanel pnlctl = new jpanel(); jbutton button = new jbutton("draw line"); jbutton button2 = new jbutton("clear all"); public testpanel() { container cp = this.getcontentpane(); cp.add(panel,borderlayout.center); button.addmouselistener(new mouseadapter(){ public void mouseclicked(mouseevent me) { graphics2d g2 = (graphics2d) panel.getgraphics(); g2.drawrect(20,20,100,300); panel.repaint(); } }); button2.addmouselistener(new mouseadapter(){ public void mouseclicked(mouseevent me) { panel.getgraphics().clearrect(0,0,700,400); } }); pnlctl.add(button); pnlctl.add(button2); cp.add(pnlctl,borderlayout.north); setsize(800,600); this.setdefaultcloseoperation(jframe.exit_on_close); this.show(); } public static void main(string[] args) { testpanel testpanel = new testpanel(); } } class ttt extends jpanel { public ttt() { super(); } public void paintcomponent(graphics g) { joptionpane.showconfirmdialog(null,"paintcomponent() called"); graphics2d g2 = (graphics2d) g; g2.drawline(10,10,300,300); } //如果要試驗(yàn)沒有paint()的情況注釋掉下面的方法 public void paint(graphics g) { joptionpane.showconfirmdialog(null,"paint() called"); graphics2d g2 = (graphics2d) g; g2.drawrect(20,20,300,300); } } |
|
|