Graphic 的問題 |
尚未結案
|
SuperLowB
初階會員 發表:96 回覆:77 積分:34 註冊:2003-06-11 發送簡訊給我 |
請問我以下的code 是run到的,說明如下:
1. 有一個JFrame,JFrame 上有一個JPanel(plCont)
2. JPanel(plCont) 上有兩個components: 一個是JPanel(plDraw),另一個是
JButton(btnDoDraw)
3. 當按上btnDoDraw 時,左面的plDraw會畫上一個長方形 問題:
當這個JFrame被其他window蓋過後,再focus在這個JFrame 後就不能看見這個長方形,怎可以把它看見呢?
import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; class frmPainting extends JFrame implements ActionListener { private JPanel plCont=new JPanel(); private JPanel plDraw=new JPanel(); private JButton btnDoDraw=new JButton("Draw"); public frmPainting(String pTitle) { super(pTitle); setSize(550,80); setDefaultCloseOperation(EXIT_ON_CLOSE); btnDoDraw.addActionListener(this); plCont.setLayout(new GridLayout()); plCont.add(plDraw); plCont.add(btnDoDraw); setContentPane(plCont); } public static void main(String[] args) { frmPainting lfrm=new frmPainting("Test"); lfrm.show(); } public void actionPerformed(ActionEvent evt) { Object lsrc=evt.getSource(); if (lsrc==btnDoDraw) btnDoDrawActionPerformed(evt); } private void btnDoDrawActionPerformed(ActionEvent evt) { Graphics2D lGrp=(Graphics2D)plDraw.getGraphics(); lGrp.setPaint(Color.green); lGrp.fill(new Rectangle2D.Float(10,10,10,30)); } } |
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
個人的經驗,也許不是最好的,希望有這方面的solution的朋友提供一下更好的建議.
我的solution跟斯斯一樣,有兩種,分成治標及治本兩類.
治標的方法,把你的code改一下.
=================================================
: private JPanel plDraw=new JPanel(); private JButton btnDoDraw=new JButton("Draw"); boolean isBtnClicked=false;//flag to mark if fill rectangle is done : : private void btnDoDrawActionPerformed(ActionEvent evt) { Graphics2D lGrp=(Graphics2D)plDraw.getGraphics(); lGrp.setPaint(Color.green); lGrp.fill(new Rectangle2D.Float(10,10,10,30)); isBtnClicked=true;//set the flag } //over write paint methold,force to draw rectangle while painting //repainting is invoked if app window is re-on top public void paint(Graphics g){ super.paint(g); if(isBtnClicked)btnDoDrawActionPerformed(null); }====================================================================== 治本的方法: 把繪成的graphic物件,存成image,再以label.setIcon(imageIcon)的方式放入Jlabel物件,再把此jlabel放入JPanel. 如果是要以元件的角度去設計的話,可以定義某些shape類別,ex: class ShapStar extends javas.swing.JComponent{ ...some attribute. public paint(Grpahics g){ ....do some painting task ,depends on it's status. } }日後你的AP只要負責如何產生/設定這些shape物件,paint的事,交給他們自己了 發表人 - neoart 於 2003/11/03 07:58:49 |
SuperLowB
初階會員 發表:96 回覆:77 積分:34 註冊:2003-06-11 發送簡訊給我 |
多謝neoart 的指敎,問題我已用了我的方法解決了
我是這樣做的
import javax.swing.*; import java.awt.*; public class frm extends JFrame { public frm() { MyPanel pl=new MyPanel(); getContentPane().add(MyPanel); pack(); } public static void main(String arg[]) { new frm().show(); } } class MyPanel extends JPanel { public void paintComponent(Graphics g) { Graphics2D lg2D=(Graphics2D)g; lg2D.fill(new Rectangle2D.Float(10,10,10,10)); } }發表人 - superlowb 於 2003/11/03 12:13:19 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |