可参考线上文件Java类别库Swing分类的元件_第1页
可参考线上文件Java类别库Swing分类的元件_第2页
可参考线上文件Java类别库Swing分类的元件_第3页
可参考线上文件Java类别库Swing分类的元件_第4页
可参考线上文件Java类别库Swing分类的元件_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

圖形介面元件2概述圖形化程式所用到的輸入可為對話盒(dialog)、滑鼠輸入、視覺化元件如:按鈕、捲軸、功能表、文字欄、文字區域、標記元件等本單元講授java.swing套件裡的一些元件Frame與Panel版面配置管理確認盒元件(JCheckBox)圓形按鈕選擇元件(JRadioButton)下拉式選項元件(JComboBox)功能表類別庫文件探究Swing應用程式結構Swing應用程式的結構猶如在一個大盒子裡放入多個不同尺寸的小盒子先把Swing套件的各種GUI元件,如JButton和JLabel等,新增到中間層容器JPanel元件後,再將JPanel新增到最上層容器類別JFrameJFrame是擁有標題列的視窗元件Java視窗程式是繼承JFrame類別的物件,藉由實作或覆寫(override)相關方法而成例:計算BMI的程式可輸入身高和體重來計算和顯示BMI值。計算公式為

BMI=體重/(身高*身高)

//體重單位是公斤、身高單位是公尺第18章說明建立相同功能的AndroidApp3步驟一:啟動IntelliJIDEA建立Java專案IntelliJIDEA供应Swing元件的圖形化GUI編輯工具,從啟動IntelliJIDE建立Java專案開始,然後运用GUI設計工具建立圖形运用介面,如下圖所示:运用IntelliJIDEA建立Swing應用程式(1/9)步驟二:建立GUIForm表單IntelliJIDEA供应GUI設計工具來建立运用介面新增GUIForm表單,開啟左邊「Project」專案窗格,如下所示:运用IntelliJIDEA建立Swing應用程式(2/9)步驟三:在GUI表單新增JPanel和JLabel元件IntelliJIDEA的GUI設計工具是一種「視覺化程式開發工具」,只需在「Palette」工具箱窗格選取GUI元件,就可以在GUI表單新增和編排运用介面:运用IntelliJIDEA建立Swing應用程式(3/9)步驟四:設定JPanel和JLabel元件的屬性在表單新增JLabel和JPanel元件後,即可在「Property」屬性窗格設定元件屬性,例如:更改JLabel元件顯示的文字內容為“身高(cm)”,如下所示:运用IntelliJIDEA建立Swing應用程式(4/9)步驟五:新增JTextField和JButton元件接著重複步驟三和四新增JTextField和JButton元件,然後設定相關屬性後,就可以完成BMI計算機的运用介面,如下所示:运用IntelliJIDEA建立Swing應用程式(5/9)步驟六:自動產生載入GUI表單的主程式在完成表單运用介面的建立後,即可準備自動產生載入GUI表單的主程式main(),如下所示:运用IntelliJIDEA建立Swing應用程式(6/9)步驟七:測試編譯與執行Swing應用程式在自動產生載入GUI表單的主程式後,即能馬上測試編譯與執行專案的Java程式檔案,可以看到建立的GUI运用介面,如下所示:运用IntelliJIDEA建立Swing應用程式(7/9)步驟八:新增JButton元件的事务處理程式碼新增JButton元件的事务處理程式碼,如下所示:运用IntelliJIDEA建立Swing應用程式(8/9)步驟九:編譯與執行Swing應用程式在新增JButton元件的事务處理程式碼後,就完成Swing應用程式的建立,我們可以再次編譯與執行專案的Java程式檔案,這一次不只顯示运用介面,還可以輸入和計算BMI值,如下所示:运用IntelliJIDEA建立Swing應用程式(9/9)Swing套件的GUI元件13元件名稱類別名稱視窗JFrame面板JPanel標籤JLabel按鈕JButton核取方塊JCheckBox選項按鈕JRadioButton下拉式清單JComboBox清單方塊JList捲動軸JScrollBar滑動軸JSlider文字方塊JTextField密碼欄位JPasswordField多行文字方塊JTextArea元件名稱類別名稱彈出式選單JPopupMenu下拉式選單工具列JMenuBar下拉式選單JMenu選單項目JMenuItem選單核取方塊項目JCheckBoxMenuItem選單選項按鈕項目JRadioButtonMenuItem工具列JToolBar對話方塊JDialog14平盤的繼承與运用:可先在JPanel上繪圖运用Graphics類別繪圖的程式並不適用於框架(frame)不能干脆在框架的面板上繪圖;框架是針對按鈕、功能表、捲軸等元件而設計的若想在框架上繪圖,可先在JPanel平盤上繪圖,完成後再將平盤加入框架平盤原先是空白的,可在上面随意製圖在平盤上製圖與在Javaapplet上製圖是有稍許不同平盤的內定大小為寬度0像點,高度0像點,因此應該透過設定最適大小的方法setPreferredSize()設定其大小15平盤的繼承與运用:可先在JPanel上繪圖範例

//******************MyPanel.java*****************importjavax.swing.*;importjava.awt.*;publicclassMyPanelextendsJPanel{publicMyPanel(){setPreferredSize(newDimension(400,300));}publicvoidpaint(Graphicsg){g.drawRect(200,100,30,40);g.drawLine(200,100,230,140);g.drawLine(200,140,230,100);}}在paint()方法裡透過Graphics類別的物件g,呼叫drawRect()方法,在座標(200,100)位置繪製一個寬30像點、高40像點的長方形,接著透過g的drawLine()方法繪製兩條對角線16平盤的繼承與运用:測試MyPanel的範例程式

//******************MyPanelFrame.java****************importjavax.swing.*;importjava.awt.*;publicclassMyPanelFrameextendsJFrame{privateMyPanelmyPanel;publicMyPanelFrame(){myPanel=newMyPanel();JFrameframe=newJFrame();frame.setContentPane(myPanel);frame.setTitle("MyPanelFrame.java加入繪圖平盤");frame.pack();frame.setVisible(true);}}設計一MyPanelFrame類別測試MyPanel是否正確17版面配置管理平盤將元件從左向右依序加入,但有些版面须要由上而下配置,或作其他的支配平盤或其他的容器都有自己的版面配置管理員(layoutmanager)JPanel平盤內定採用流水式版面配置管理(flowlayout),只單純地將元件從左向右依序加入平盤容器裡頭Applet容器內定為邊界版面配置(borderlayout),可將平盤原內定為流水式版面配置改為邊界版面配置,程式碼如下:

JPanelpanel=newJPanel();

panel.setLayout(newBorderLayout());將版面分為北NORTH、東EAST、南SOUTH、西WEST、中CENTER五個區。加入元件時需指定加入哪一區18版面配置管理:範例程式(1/2)//******************MyPanel.java******************importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassMyPanelextendsJPanel{privateJLabellabel;privateJTextFieldfield;privateJTextAreaarea;publicMyPanel(){setPreferredSize(newDimension(400,150));JPanelpanel=newJPanel();label=newJLabel("請輸入一個數:");panel.add(label);field=newJTextField(10);panel.add(field);area=newJTextArea(3,30);JScrollPanescrollPane=newJScrollPane(area);

//未完19版面配置管理:範例程式(2/2)

//接上頁setLayout(newBorderLayout());add(panel,BorderLayout.NORTH);add(scrollPane,BorderLayout.CENTER);classMyListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){doublex

=

Double.parseDouble(field.getText());doubler=Math.sqrt(x);area.append(x+"的平方根="+r+"\n");}}

field.addActionListener(newMyListener());}}20版面配置管理:測試MyPanel的範例程式//******************RootGuiFrame.java****************importjavax.swing.*;importjava.awt.*;publicclassRootGuiFrameextendsJFrame{privateMyPanelmyPanel;publicRootGuiFrame(){myPanel=newMyPanel();JFrameframe=newJFrame();frame.setContentPane(myPanel);frame.setTitle("RootGuiFrame.java加入GUI平盤");frame.pack();frame.setVisible(true);}}或可繼承JFrame類別製作一個視窗,然後將已製作完畢的MyPanel平盤加入視窗,並檢視執行結果21版面配置管理:BlueJ執行RootGuiFrame22版面配置管理:執行RootGuiFrame結果23版面配置管理:GridLayout吾人常用格子版面配置(gridlayout)用以配置固定列數及固定行數的版面,每個元件均配置固定的大小下列程式运用三列二行的格子版面配置 第0行第1行 label[0]field[0]//第0列 label[1]field[1]//第1列 label[2]field[2]//第2列上面程式碼中,label是JLabel元件,為三個元素的陣列,其元素分別為label[0]、label[1]、label[2]。而field是JTextField元件,為三個元素的陣列,其元素分別為field[0]、field[1]、field[2]setLayout(newGridLayout(3,2,10,20));設定為三列二行的格子版面配置,水平格子的間距為10個像點,垂直格子的間距為20個像點24版面配置管理:範例程式//*********************TimePanel.java****************importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassTimePanelextendsJPanel{privateJLabel[]label=newJLabel[3];privateJTextField[]field=newJTextField[3];publicTimePanel(){setPreferredSize(newDimension(400,150));

setLayout(newGridLayout(3,2,10,20));label[0]=newJLabel("請輸入時數hh(0-23):");label[1]=newJLabel("請輸入分數mm(0-59):");label[2]=newJLabel("總共分數(hh*60+mm):");field[0]=newJTextField(10);field[1]=newJTextField(10);field[2]=newJTextField(10);add(label[0]);

add(field[0]);add(label[1]);

add(field[1]);add(label[2]);

add(field[2]);classMyListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){doublemm=Double.parseDouble(field[1].getText());doublehh=Double.parseDouble(field[0].getText());doubletotal=hh*60+mm;field[2].setText(""+total);}}

field[0].addActionListener(newMyListener());field[1].addActionListener(newMyListener());}}25版面配置管理:測試TimePanel的範例程式//************TimeGuiApplet.java**********importjava.applet.Applet;importjava.awt.*;publicclassTimeGuiAppletextendsApplet{privateTimePaneltimePanel;publicTimeGuiApplet(){timePanel=newTimePanel();add(timePanel,BorderLayout.CENTER);}}欲測試TimePanel是否正確,可繼承Applet類別製作一個視窗,然後將已製作完畢的TimePanel平盤加入視窗,並檢視執行結果26版面配置管理:測試TimePanel的範例程式//******************TimeGuiFrame.java****************importjavax.swing.*;importjava.awt.*;publicclassTimeGuiFrameextendsJFrame{privateTimePaneltimePanel;publicTimeGuiFrame(){timePanel=newTimePanel();JFrameframe=newJFrame();frame.setContentPane(timePanel);frame.setTitle("TimeGuiFrame.java加入GUI平盤");frame.pack();frame.setVisible(true);}}或可繼承JFrame類別製作一個視窗,然後將已製作完畢的MyPanel平盤加入視窗,並檢視執行結果27選擇式元件Java供应的選擇式元件,包括確認盒元件(JCheckBox)圓形按鈕選擇元件(JRadioButton)下拉式選項元件(JComboBox)…28選擇式元件:範例程式//**********************ChoicePanel.java****************importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.border.*;publicclassChoicePanelextendsJPanel{privateJLabelsampleField;privateJCheckBoxitalicCheckBox;privateJCheckBoxboldCheckBox;privateJRadioButtonsmallButton;privateJRadioButtonmediumButton;privateJRadioButtonlargeButton;privateJComboBoxfacenameCombo;privateActionListenerlistener;publicChoicePanel(){setPreferredSize(newDimension(400,400));setLayout(newBorderLayout());sampleField=newJLabel("JavaFont");add(sampleField,BorderLayout.CENTER);classChoiceListenerimplementsActionListener{

publicvoidactionPerformed(ActionEventevent)

{setSampleFont();}}listener=newChoiceListener();createControlPanel();setSampleFont();}

//未完29選擇式元件:範例程式//接上頁publicvoidcreateControlPanel(){JPanelfacenamePanel=createComboBox();JPanelsizeGroupPanel=createCheckBoxes();JPanelstyleGroupPanel=createRadioButtons();JPanelcontrolPanel=newJPanel();controlPanel.setLayout(newGridLayout(3,1));controlPanel.add(facenamePanel);controlPanel.add(sizeGroupPanel);controlPanel.add(styleGroupPanel);add(controlPanel,BorderLayout.SOUTH);}publicJPanelcreateComboBox(){facenameCombo=newJComboBox();facenameCombo.addItem("Serif");facenameCombo.addItem("SansSerif");facenameCombo.addItem("Monospaced");facenameCombo.addItem("細明體");facenameCombo.setEditable(true);facenameCombo.addActionListener(listener);JPanelpanel=newJPanel();panel.add(facenameCombo);returnpanel;}

//未完30選擇式元件:範例程式//接上頁

publicJPanelcreateCheckBoxes(){italicCheckBox=newJCheckBox("斜體");italicCheckBox.addActionListener(listener);boldCheckBox=newJCheckBox("粗體");boldCheckBox.addActionListener(listener);JPanelpanel=newJPanel();panel.add(italicCheckBox);panel.add(boldCheckBox);panel.setBorder(newTitledBorder(new

EtchedBorder(),"字體"));returnpanel;}publicJPanelcreateRadioButtons(){smallButton=newJRadioButton("小字");smallButton.addActionListener(listener);mediumButton=newJRadioButton("中字");mediumButton.addActionListener(listener);largeButton=newJRadioButton("大字");largeButton.addActionListener(listener);largeButton.setSelected(true);ButtonGroupgroup=newButtonGroup();group.add(smallButton);

group.add(mediumButton);group.add(largeButton);JPanelpanel=newJPanel();panel.add(smallButton);

panel.add(mediumButton);panel.add(largeButton);panel.setBorder(newTitledBorder(newEtchedBorder(),"大小"));returnpanel;}//未完蝕刻31選擇式元件:範例程式//接上頁

publicvoidsetSampleFont(){Stringfacename=(String)facenameCombo.getSelectedItem();intstyle=0;if(italicCheckBox.isSelected())style=style+Font.ITALIC;if(boldCheckBox.isSelected())style=style+Font.BOLD;intsize=0;finalintSMALL_SIZE=24;finalintMEDIUM_SIZE=48;finalintLARGE_SIZE=72;if(smallButton.isSelected())size=SMALL_SIZE;elseif(mediumButton.isSelected())size=MEDIUM_SIZE;elseif(largeButton.isSelected())size=LARGE_SIZE;sampleField.setFont(newFont(facename,style,size));sampleField.repaint();}}32補充:關於EtchedBorder的运用方式Dbuttonhasa2-pixelsolidlineborder,and

Quithasa4-pixelEmptyBorderandanEtchedBorder33功能表:下拉式功能表//*****************RectanglePanel.java**************importjava.awt.*;importjavax.swing.*;classRectanglePanelextendsJPanel{privateRectanglebox;privateintwidth=30;privateintheight=20;publicRectanglePanel(){setPreferredSize(newDimension(300,300));box=newRectangle(0,0,width,height);}publicvoidpaintComponent(Graphicsg){super.paintComponent(g);Graphics2Dg2=(Graphics2D)g;g2.draw(box);}publicvoidreset(){box.setLocation(0,0);repaint();}publicvoidmoveRectangle(intdx,intdy){box.translate(dx*width,dy*height);//平移repaint();}}34功能表:功能表框架(MenuFrame)頂層功能表項(top-levelmenuitem)的容器稱為功能表棒(menubar),首先須在指定的框架(frame)裡建立一個功能表棒

publicclassMyFrameextendsJFrame{publicMyFrame(){

JMenuBarmenuBar=newJMenuBar();setJMenuBar(menuBar);//略

}}35功能表:功能表項然後將功能表加入功能表棒裡頭,程式碼如下: JMenufileMenu=newJMenu("File"); menuBar.add(fileMenu);這個功能表是功能表項(menuitems)或次功能表(submenus)的集合。吾人可透過下列的方法將功能表項或次功能表加入指定的功能表裡 JMenuItemitem=newJMenuItem("New"); fileMenu.add(item);功能表項是功能表裡最小的元素,當运用者選按一個功能表項時會產生一個事务,因此須為每一個功能表項安裝一個傾聽物件: item.addActionListener(listener);只需在功能表項安裝一個傾聽物件,功能表及功能棒並不须要。當运用者選按一個功能表或功能棒時並不會產生一個事务36功能表:下拉式功能表範例(1/4)//**********************MenuFrame.java******************importjava.awt.*;importjava.awt.event.*;importjava.util.*;importjavax.swing.*;classMenuFrameextendsJFrame{privateRectanglePanelpanel;publicMenuFrame(){panel=newRectanglePanel();getContentPane().add(panel,BorderLayout.CENTER);JMenuBarmenuBar=newJMenuBar();setJMenuBar(menuBar);menuBar.add(createFileMenu());menuBar.add(createEditMenu());setTitle("MeneFrame.java功能表");pack();setVisible(true);}//未完37功能表:下拉式功能表範例(2/4)//接上頁publicJMenucreateFileMenu(){JMenumenu=newJMenu("File");menu.add(createFileNewItem());menu.add(createFileExitItem());returnmenu;}publicJMenucreateEditMenu(){JMenumenu=newJMenu("Edit");menu.add(createMoveItem("Up",0,-1));menu.add(createMoveItem("Down",0,1));menu.add(createMoveItem("Left",-1,0));menu.add(createMoveItem("Right",1,0));returnmenu;}//未完38功能表:下拉式功能表範例(3/4)//接上頁publicJMenuItemcreateFileNewItem(){JMenuItemitem=newJMenuItem("New");classMenuItemListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){panel.reset();}}ActionListenerlistener=newMenuItemListener();item.addActionListener(listener);returnitem;}publicJMenuItemcreateFileExitItem(){JMenuItemitem=newJMenuItem("Exit");classMenuItemListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){System.exit(0);}}ActionListenerlistener=newMenuItemListener();item.addActionListener(listener);returnitem;}//未完39功能表:下拉式功能表範例(4/4)//接上頁publicJMenuItemcreateMoveItem(Stringlabel,finalintdx,finalintdy){JMenuItemitem=newJMenuItem(label);classMenuItemListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){panel.moveRectangle(dx,dy);}}ActionListenerlistener=newMenuItemListener();item.addActionListener(listener);returnitem;}}40類別庫文件探究關於其他較複雜的元件,可參考線上文件Java類別庫Swing分類的元件,都被包含於javax.swing套件裡例:查詢

JSlider的

說明41類別庫文件探究:滑棒Slider現欲設計一個滑棒(slider),用以調節指定顏色的成分該找怎樣的元件呢?可查閱專門介紹全部元件的書,也可以從JDK的表演例題裡去找,當然也可以在Java線上文件類別庫Swing分類元件裡頭去找,因為Swing元件的命名都以J開頭,因此我們可很简洁找到JSlider滑棒類別我們要考慮下列幾件事情:如何建構一個JSlider類別的元件?运用者移動滑棒指標時,我們如何知道?运用者移動滑棒指標的距離,我們如何取得?若可以回答上面這三個問題,就可放心运用JSlider元件42類別庫文件探究:滑棒Slider—建構子及滑棒指標的值線上文件類別庫JSlider類別供应六種建構子,其中有兩種比較簡單,介紹如下:publicJSlider() //建立一個JSlider物件,在0與100間,初值50publicJSlider(intmin,intmax,intvalue) //建立一個JSlider物件,在min與max間,初值value运用者移動滑棒指標的值,可透過JSlider物件的getValue()取得publicintgetValue()//傳回滑棒指標的整數值43類別庫文件探究:滑棒Slider—滑棒傾聽物件如何知道运用者移動了滑棒指標?可針對滑棒物件安裝一個傾聽物件,移動滑棒指標時產生指標值不同的stateChanged事务可透過下列方法將ChangeListener傾聽物件listener加入JSlider物件裡頭 publicvoidaddChangeListener(ChangeListenerlistener)傾聽物件裡只有一個stateChanged()方法,如下: publicvoidstateChanged(ChangeEvente) { //略 }44類別庫文件探究:滑棒Slider程式(1/2)//*****************SliderPanel.java***************importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.event.*;classSliderPanelextendsJPanel{privateJPanelcolorPanel;privateJSliderredSlider;privateJSlidergreenSlider;privateJSliderblueSlider;privateJPanelsliderPanel;publicSliderPanel(){setLayout(newBorderLayout());colorPanel=newJPanel();colorPanel.setPreferredSize(newDimension(300,300));add(colorPanel,BorderLayout.CENTER);classColorListenerimplementsChangeListener{publicvoidstateChanged(ChangeEventevent){setBackgroundColor();}}//未完

45類別庫文件探究:滑棒Slider程式(2/2)//接上頁ChangeListenerlistener=newColorListener();redSlider=newJSlider(0,100,100);redSlider.addChangeListener(listener);greenSlider=newJSlider(0,100,50);greenSlider.addChangeListener(listener);blueSlider=newJSlider(0,100,0);blueSlider.addChangeListener(listener);sliderPanel=newJPanel();sliderPanel.setLayout(newGridLayout(3,2));sliderPanel.add(newJLabel("Red(紅色0-100)"));sliderPanel.add(redSlider);sliderPanel.add(newJLabel("Green(綠色0-100)"));sliderPanel.add(greenSlider);sliderPanel.add(newJLabel("Blue(藍色0-100)"));sliderPanel.add(blueSlider);add(sliderPanel,BorderLayout.SOUTH);setBackgroundColor();}publicvoidsetBackgroundColor(){floatred=0.01F*redSlider.getValue();floatgreen=0.01F*greenSlider.getValue();floatblue=0.01F*blueSlider.getValue();colorPanel.setBackground(newColor(red,green,blue));colorPanel.repaint();}}DIY參考程式47//******************OvalPanel.java******************importjava.awt.*;importjavax.swing.*;publicclassOvalPanelextendsJPanel{privateintcount;publicOvalPanel(){setPreferredSize(newDimension(300,300));}publicvoidpaint(Graphicsg){g.clearRect(0,0,getWidth(),getHeight());for(inti=0;i<count;i++){intx=(int)(getWidth()*Math.random());inty=(int)(getHeight()*Math.random());g.drawOval(x,y,30,20);}}publicvoidsetCount(intcount){this.count=count;repaint();}}練習1(1/4)48//********************ControlPanel.java*******************importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassControlPanelextendsJPanel{privateOvalPanelpanel;privatedoublecurrentCount=100.0;publicControlPanel(){setLayout(newBorderLayout());panel=newOvalPanel();add(panel,BorderLayout.CENTER);JPanelsouthPanel=newJPanel();southPanel.add(makeButton("多些",2));southPanel.add(makeButton("少些",0.5));add(southPanel,BorderLayout.SOUTH);panel.setCount((int)currentCount);}//未完練習1(2/4)49//接上頁publicJButtonmakeButton(Stringlabel,finaldoublefactor){JButtonbutton=newJButton(label);classButtonListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){currentCount=currentCount*factor;panel.setCount((int)currentCount);}}ButtonListenerlistener=newButtonListener();button.addActionListener(listener);returnbutton;}}練習1(3/4)50練習1(4/4)欲測試ControlPanel是否正確,亦可將ControlPanel加入一個框架JFrame類別Ex1211Frame.java裡//******************Ex1211Frame.java****************importjavax.swing.*;importjava.awt.*;publicclassEx1211FrameextendsJFrame{privateControlPanelpanel;publicEx1211Frame(){panel=newControlPanel();JFrameframe=newJFrame();frame.setContentPane(panel);frame.setTitle("Ex1211Frame.java加入GUI平盤");frame.pack();frame.setVisible(true);}}51//***************PieSegment.java**************importjava.awt.Color;publicclassPieSegment{privatedoublevalue;privateColorcolor;publicPieSegment(doublevalue,Colorcolor){this.value=value;this.color=color;}publicdoublegetValue(){returnvalue;}publicColorgetColor(){returncolor;}}練習2(1/7)52//**********************PiePanel.java*********************importjava.awt.*;importjava.util.ArrayList;importjavax.swing.JPanel;publicclassPiePanelextendsJPanel{privateArrayList<PieSegment>segments;publicPiePanel(){setPreferredSize(newDimension(300,300));segments=newArrayList<PieSegment>();}publicvoidpaint(Graphicsg){g.clearRect(0,0,getWidth(),getHeight());inttotal=0;for(inti=0;i<segments.size();i++){PieSegmentp=segments.get(i);total+=p.getValue();}//未完練習2(2/7)53//接上頁if(total==0)return;intxw=getWidth()-1;intyh=getHeight()-1;intradius=Math.min(xw,yh)/2;intangle=0;for(inti=0;i<segments.size();i++){PieSegmentp=(PieSegment)segments.get(i);intextent=(int)(360*p.getValue()/total);g.setColor(p.getColor());g.fillArc(radius/2,radius/2,radius,radius,angle,extent);angle+=extent;}}publicvoidaddPieSegment(PieSegmentp){segments.add(p);repaint();}}練習2(3/7)54//***********************ControlPanel.java****************importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publiccla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论