




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
JAVA用戶界面設(shè)計(jì)課程目標(biāo)Swing簡介Swing常用的控件窗體布局事件和事件處理設(shè)計(jì)窗體swing簡介Swing類Swing類是一組類,它提供比AWT標(biāo)準(zhǔn)組件更強(qiáng)大和更靈活的功能。除了我們已經(jīng)熟悉的組件如按鈕、復(fù)選框和標(biāo)簽外,Swing類還提供了許多新的組件,如選項(xiàng)卡窗格、滾動(dòng)窗格、樹、表格等。Swing類的層次結(jié)構(gòu)
java.awt.Component
-java.awt.Container
-java.awt.Window
-java.awt.Frame-javax.swing.JFrame
-javax.Dialog-javax.swing.JDialog
-javax.swing.JWindow
-java.awt.Applet-javax.swing.JApplet
-javax.swing.Box
-javax.swing.Jcomponet
JFrame與FrameJFrame是在Swing中經(jīng)常使用到的組件,大家可以把它看成是最底層的容器。這個(gè)容器里面可以裝載各種Swing的控件類(例如JLabel、JButton等等),也可以裝載其他的容器。至于如何擺放這些控件和容器,Swing的解決辦法和AWT是一樣的,都應(yīng)用了一套相同的版面管理器。JFrame類繼承了Frame類,所以JFrame的功能要比Frame的功能多得多。常用控件組件類名稱功能JButton按鈕用來進(jìn)行點(diǎn)擊觸發(fā)事件,實(shí)現(xiàn)具體操作JLabel標(biāo)簽放置提示性的圖片或文字JTextField文本域支持單行文本輸入JTextArea文本區(qū)支持多行文本輸入JRadioButton單選框支持單項(xiàng)選擇JCheckbox復(fù)選框支持多項(xiàng)選擇JList列表框列出所有的選項(xiàng)進(jìn)行選擇JComboBox選擇框列出所有的選項(xiàng)進(jìn)行選擇,并且支持自定義選項(xiàng)按鈕(JButton)按鈕在窗體界面程序設(shè)計(jì)中是最常用的控件,Swing中提供以下的構(gòu)造函數(shù)來建立一個(gè)按鈕對象: JButton() 建立一個(gè)按鈕JButton(Iconicon) 建立一個(gè)有圖像的按鈕JButton(Stringtext) 建立一個(gè)有文字標(biāo)簽的按鈕JButton(Stringtext,Iconicon) 建立一個(gè)有圖像和文字的按鈕
JButton常用的方法如下: addActionListener(ActionListenerI) 在按鈕上添加事件監(jiān)聽器 grabFocus() 請求焦點(diǎn) setEnable(booleanb) 設(shè)置按鈕是否可用 setVisible(booleanb) 設(shè)置按鈕是否可見示例
importjava.awt.*; importjavax.swing.*; publicclassJButtonAppextendsJFrame{ Containercon=this.getContentPane(); JButtonbutton1=newJButton("按鈕一"); JButtonbutton2=newJButton("按鈕二"); JButtonbutton3=newJButton("按鈕三"); publicJButtonApp(){ super("JButton示例"); con.setLayout(newFlowLayout()); button1.setEnabled(false); button2.setVisible(false); con.add(button1); con.add(button2); con.add(button3); this.pack(); this.show(); } publicstaticvoidmain(String[]args){ newJButtonApp(); } }標(biāo)簽(JLabel)這個(gè)組件主要用來放置提示性的文本或圖形。以下是JLabel類的構(gòu)造函數(shù)和常用方法。構(gòu)造函數(shù):
JLabel() 建立一個(gè)空白的標(biāo)簽組件。 JLabel(Iconimage)
建立一個(gè)含有圖標(biāo)的標(biāo)簽組件,默認(rèn)排列方式為CENTER。 JLabel(Iconimage,inthorizontalAlignment)
建立一個(gè)含有圖標(biāo)的標(biāo)簽組件,并指定其排列方式。 JLabel(Stringtext)
建立一個(gè)含有文字的標(biāo)簽組件,默認(rèn)排列方式為LEFT。 JLabel(Stringtext,inthorizontalAlignment)
建立一個(gè)含有文字的標(biāo)簽組件,并指定其排列方式。 JLabel(Stringtext,Iconicon,inthorizontalAlignment)
建立一個(gè)含有文字和圖標(biāo)的標(biāo)簽組件,并指定其排列方式。Jlabel的常用方法setHorizontalAlignment(intalignment)
設(shè)置標(biāo)簽內(nèi)文字或圖像的水平位置。setHorizontalTextPosition(inttextPosition)
設(shè)置標(biāo)簽內(nèi)文字相對于圖像的水平位置。setIcon(Iconicon)
設(shè)置標(biāo)簽內(nèi)的圖像。setIconTextGap(inticonTextGap)
設(shè)置標(biāo)簽內(nèi)文字與圖像的間距。setText(Stringtext)
設(shè)置標(biāo)簽內(nèi)的文字。setVerticalAlignment(intalignment)
設(shè)置標(biāo)簽內(nèi)文字或圖像的垂直位置。setVerticalTextPosition(inttextPosition)
設(shè)置標(biāo)簽內(nèi)文字相對于圖像的垂直位置。示例 importjava.awt.*; importjavax.swing.*; publicclassJLabelAppextendsJFrame{ Containercon=this.getContentPane(); JLabellabel1=newJLabel("第一個(gè)標(biāo)簽"); JLabellabel2=newJLabel("第二個(gè)標(biāo)簽"); JLabellabel3=newJLabel("第三個(gè)標(biāo)簽");
publicJLabelApp(){ super("JLabel示例");
con.setLayout(newGridLayout(1,3));
label1.setHorizontalAlignment(JLabel.RIGHT);
label2.setVerticalAlignment(JLabel.BOTTOM);
con.add(label1);
con.add(label2);
con.add(label3);
this.setSize(300,200);
this.show();
}
publicstaticvoidmain(String[]args){
newJLabelApp();
}
}文本域(JTextField)JTextField是一種單行文本輸入組件。構(gòu)造函數(shù):JTextField()
建立一個(gè)文本域。JTextField(Documentdoc,Stringtext,intcolumns)
使用指定的文件存儲模式建立一個(gè)文本域,并且設(shè)置其 初始字符串和字段長度。JTextField(intcolumns)
建立一個(gè)文本域,并設(shè)置其初始字段長度。JTextField(Stringtext)
建立一個(gè)文本域,并設(shè)置其初始字符串。JTextField(Stringtext,intcolumns)
建立一個(gè)文本域,并設(shè)置其初始字符串和字段長度。JTextField的常用方法setColumns(intcolumns) 設(shè)置文本域的字段長度setEditable(booleanb) 設(shè)置文本域是否可編輯setFont(Fontfont) 設(shè)置文本域內(nèi)文本字體setText(Stringtext) 設(shè)置文本域的字符串JTextField示例
importjava.awt.*; importjavax.swing.*; publicclassJTextFieldAppextendsJFrame{ Containercon=this.getContentPane(); JTextFieldtextField1=newJTextField(); JTextFieldtextField2=newJTextField("第二個(gè)文本框"); JTextFieldtextField3=newJTextField("第三個(gè)文本框",10); publicJTextFieldApp(){ super("JTextField示例"); con.setLayout(newFlowLayout()); textField1.setColumns(10); textField2.setEditable(false); con.add(textField1); con.add(textField2); con.add(textField3); this.pack(); this.show(); } publicstaticvoidmain(String[]args){ newJTextFieldApp(); } }選擇框(JComboBox)JComboBox組件一般被稱為下拉式列表框,它可以讓用戶瀏覽一系列的選項(xiàng)并選出或自己輸入想要的值。JComboBox的構(gòu)造方法和常用的使用方法如下:構(gòu)造方法:
JComboBox()
建立一個(gè)新的JComboBox組件 JComboBox(ComboBoxModelaModel)
利用ComboBoxModel建立一個(gè)新的JComboBox組件 JComboBox(Object[]items)
利用Array數(shù)組對象建立一個(gè)新的JComboBox組件 JComboBox(Vectoritems)
利用Vector矢量集對象建立一個(gè)新的JComboBox組件JComboBox常用的方法:
voidaddItem(Objectobj)
將對象obj添加到下拉列表框顯示的項(xiàng)目中。intgetItemCount()
返回下拉列表框的項(xiàng)目的總數(shù)。ObjectgetSelectedItem()
返回當(dāng)前選中的項(xiàng)目。voidremoveAllItems()
移除下拉列表框中所有的項(xiàng)目。voidremoveItemAt(intindex)
移除項(xiàng)目索引值為index的項(xiàng)目。voidsetEditable(booleanb)
設(shè)置下拉列表框是否可編輯。voidsetSelectedIndex(intindex)
設(shè)置索引值為index的項(xiàng)目的狀態(tài)為已選中。示例
importjava.awt.*; importjavax.swing.*; publicclassJComboBoxAppextendsJFrame{ JComboBoxyearBox1=newJComboBox(); JComboBoxyearBox2=newJComboBox(); JComboBoxmonthBox1=newJComboBox(); JComboBoxmonthBox2=newJComboBox(); JPanelpanel=newJPanel(); JLabelstartDate=newJLabel("開始日期"); JLabelendDate=newJLabel("終止日期");
publicJComboBoxApp(){ super("JComboBox示例"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel.add(startDate); for(inti=2000;i<=2008;i++) yearBox1.addItem(i+""); for(inti=1;i<31;i++) monthBox1.addItem(i+""); panel.add(yearBox1); panel.add(monthBox1); panel.add(endDate); for(inti=2000;i<=2008;i++) yearBox2.addItem(i+""); for(inti=1;i<31;i++) monthBox2.addItem(i+""); panel.add(yearBox2); panel.add(monthBox2); this.setSize(180,110); this.setContentPane(panel); this.show(); } publicstaticvoidmain(Stringargs[]){ newJComboBoxApp(); } }小結(jié)1.JTextField創(chuàng)建及常用方法2.JLabel創(chuàng)建及常用方法3.JComboBox創(chuàng)建及常用方法4.什么是容器窗體布局為什么要使用布局管理不同的平臺對圖形界面的管理也是不盡相同的,所以如果我們采用絕對定位的方法管理JAVA圖形界面的布局,那么當(dāng)程序運(yùn)行在不同的設(shè)備上的時(shí)候(比如分辨率變化了、現(xiàn)實(shí)設(shè)備不同了),窗體外觀就會(huì)變形。最長常見的變形是:窗口超出了屏幕邊緣,跑到外邊了;控件位置亂了,甚至相互重疊在一起;窗口特別小,看不清(往往是分辨率極高的情況下)等超出顯示區(qū)域無法滿屏顯示三種常用的布局FlowLayout布局GridLayout布局BorderLayout布局流水布局網(wǎng)格布局邊框布局布局FlowLayout布局FlowLayout布局是一個(gè)相當(dāng)簡單的排列方法,形如其名FlowLayout就如同流水一般,將加入其中的組件一個(gè)接著一個(gè)從左往右依次排列下去構(gòu)造方法:FlowLayout()
建立一個(gè)新的FlowLayout,此FlowLayout默認(rèn)為居中對齊,而且組件彼此之間有5單位的水平與垂直間距。FlowLayout(intalign)
建立一個(gè)新的FlowLayout,此FlowLayout可設(shè)置排列方式,而且組件彼此之間有5單位的水平與垂直間距。FlowLayout(intalign,inthgap,intvgap)
建立一個(gè)新的FlowLayout,此FlowLayout可設(shè)置排列方式與組件間距。FlowLayout類的后兩個(gè)構(gòu)造方法均有參數(shù),其中參數(shù)align可以設(shè)定FlowLayout布局中的組件靠什么方向排列。FlowLayout共有五種排列方式CENTER(默認(rèn)值)LEFTRIGHTLEADINGTRAILING示例
importjava.awt.*; publicclassFlowLayoutAppextendsFrame{ ButtonbuttonLeft=newButton("左按鈕"); ButtonbuttonCenter=newButton("中間按鈕"); ButtonbuttonRight=newButton("右按鈕"); publicFlowLayoutApp(){ super("FlowLayout示例"); this.setLayout(newFlowLayout()); this.add(buttonLeft); this.add(buttonCenter); this.add(buttonRight); this.setSize(200,120); this.show(); } publicstaticvoidmain(Stringargs[]){ newFlowLayoutApp(); } }GridLayout布局GridLayout比FlowLayout多了行和列的設(shè)置,也就是說你要先設(shè)置GridLayout共有幾行幾列,就如同一個(gè)二維平面一般,然后添加GridLayout布局中的組件會(huì)填充第一行的格子,然后再從第二行開始填。依此類推,就像是填充一個(gè)個(gè)格子一般,而且GridLayout布局管理器會(huì)將填進(jìn)去的組件設(shè)置為一樣大。構(gòu)造方法:
GridLayout() 建立一個(gè)新的GridLayout布局,默認(rèn)值為一行一列 GridLayout(introws,intcols)建立一個(gè)指定了幾行幾列的GridLayout布局 GridLayout(introws,intcols,inthgap,intvgap) 建立一個(gè)指定了幾行幾列GridLayout 布局,并設(shè)置組件的垂直和水平間距示例
importjava.awt.*; publicclassGridLayoutAppextendsFrame{ Buttonbutton11=newButton("第一行第一列"); Buttonbutton12=newButton("第一行第二列"); Buttonbutton21=newButton("第二行第一列"); Buttonbutton22=newButton("第二行第二列"); publicGridLayoutApp(){ super("GridLayout示例"); this.setLayout(newGridLayout(2,2)); this.add(button11); this.add(button12); this.add(button21); this.add(button22); setSize(180,160); show(); } publicstaticvoidmain(Stringargs[]){ newGridLayoutApp(); } }BorderLayout布局BorderLayout將版面劃分成東、西、南、北、中五個(gè)區(qū)域,大家可以將組件放在這五個(gè)區(qū)域中的某個(gè)區(qū)域里。要使用BorderLayout,只要在容器中設(shè)置使用BorderLayout這種版面管理即可。構(gòu)造方法:
BorderLayout()建立一個(gè)組件間沒有間距的BorderLayout布局
BorderLayout(inthgap,intvgap)建立一個(gè)組件間有間距的BorderLayout布局。示例
importjava.awt.*; publicclassBorderLayoutAppextendsFrame{ ButtonbuttonNorth=newButton("北邊"); ButtonbuttonWest=newButton("西邊"); ButtonbuttonSouth=newButton("南邊"); ButtonbuttonEast=newButton("東邊"); ButtonbuttonCenter=newButton("中間"); publicBorderLayoutApp(){ super("BorderLayout示例"); this.setLayout(newBorderLayout()); this.add(buttonNorth,BorderLayout.NORTH); this.add(buttonWest,BorderLayout.WEST); this.add(buttonSouth,BorderLayout.SOUTH); this.add(buttonEast,BorderLayout.EAST); this.add(buttonCenter,BorderLayout.CENTER); setSize(180,160); show(); } publicstaticvoidmain(Stringargs[]) { newBorderLayoutApp(); }其它布局方式另外還有兩種布局CardLayout布局和GridBagLayout布局。
CardLayout布局的功能就如同你將很多張卡片疊在一起,你一次只能看到其中一張卡片,但是你可以任意抽出其中一張卡片來看。
GridBagLayout布局是使用網(wǎng)格單元,指定組件的相對布置,即在一個(gè)網(wǎng)格的單元中指定它們的位置,每個(gè)組件的網(wǎng)格單元的大小可以不同,每個(gè)網(wǎng)格的每一行可以有不同的列數(shù)。對話框在Windows平臺下用MessageBox來實(shí)現(xiàn)和用戶的交互功能,在JAVA中也有同樣的類來實(shí)現(xiàn)這樣的功能,利用Swing中提供的JOptionPane類。四個(gè)標(biāo)準(zhǔn)對話框如下:MessageDialog(消息對話框) 用來顯示信息給用戶。ConfirmDialog(確認(rèn)對話框) 提出問題,然后由用戶自己來 確認(rèn)(按"Yes"或"No"按鈕)InputDialog(輸入對話框) 提示輸入文本。OptionDialog(選項(xiàng)對話框) 組合其它三個(gè)對話框類型。消息對話框消息對話框是一個(gè)簡單的顯示消息的窗口,只是給用戶提供提示信息。如圖所示消息對話框:消息對話框可以通過調(diào)用JOptionPane類的showMessageDialog(Compont,Object)方法來創(chuàng)建,參數(shù)是父組件和字符串(或者組件、顯示的圖標(biāo))。如以下語句創(chuàng)建一個(gè)顯示簡單字符的消息對話框:
JOptionPane.showMessagDialog(null,”WelcomeToQinghuaIT…”);還可以使用showMessageDialog(Component,Object,String,int)方法來創(chuàng)建一個(gè)顯示警告消息的對話框,可以自己設(shè)置想要顯示的消息對話框的標(biāo)題。用法同showInputDialog()方法,參數(shù)相同但無返回值。如以下語句創(chuàng)建一個(gè)消息輸入對話框:
JOptionPane.showMessagDialog(null,”文件被刪除”,”刪除警告”,JOptionPane.WARNING_MESSAGE);確認(rèn)對話框創(chuàng)建確認(rèn)對話框的最簡單方法就是調(diào)用showConfirmDialog(Component,Object)方法,參數(shù)意義同消息對話框中的參數(shù)相同。 不同的是該方法返回一個(gè)整數(shù),JOptionPane的三個(gè)屬性:YES_OPTIONNO_OPTIONCANCEL_OPTION示例
importjava.awt.*; importjavax.swing.*; importjava.awt.event.*; importjava.util.EventListener; publicclassMessageDialogAppextendsJFrameimplementsActionListener{ JButtonbutton1=newJButton("顯示消息對話框一");
JButtonbutton2=newJButton("顯示消息對話框二");
publicMessageDialogApp(){
super("MessageDialog示例");
this.setLayout(newFlowLayout());
button1.addActionListener(this);
button2.addActionListener(this);
this.add(button1);
this.add(button2);
this.setSize(180,160);
this.show();
}
publicstaticvoidmain(Stringargs[]){
newMessageDialogApp();
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==button1){
JOptionPane.showMessageDialog(null,"WelcomeToQinghuaIT...");
}
if(e.getSource()==button2){
JOptionPane.showMessageDialog(null,"出現(xiàn)錯(cuò)誤",
"錯(cuò)誤警告",JOptionPane.WARNING_MESSAGE);
}
}
}輸入對話框輸入對話框提出一個(gè)問題,并使用文本域來存儲響應(yīng)。創(chuàng)建輸入對話框的最簡單方法就是調(diào)用showInoutDialog(ComponertObject)方法,參數(shù)和消息對話框中的參數(shù)相同。調(diào)用輸入對話框方法返回一個(gè)表示用戶響應(yīng)的字符串。如以下語句創(chuàng)建了一個(gè)簡單的輸入對話框:
StringinputText=IOptionPane.showInputDialog(null,“請輸入你的姓名:”);示例
importjava.awt.*; importjavax.swing.*; importjava.awt.event.*; importjava.awt.event.ActionListener; importjava.util.EventListener; publicclassInputDialogAppextendsJFrameimplementsActionListener{ JButtonbutton1=newJButton("輸入你的姓名"); JLabellabel=newJLabel("你的姓名是:"); publicInputDialogApp(){ super("InputDialog示例"); this.setLayout(newFlowLayout()); button1.addActionListener(this); this.add(button1); this.add(label); this.setSize(200,120); this.show(); } publicstaticvoidmain(Stringargs[]){ newInputDialogApp(); } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==button1){ StringinputText=JOptionPane.showInputDialog(this,"你的姓名是:"); this.label.setText("你的姓名是:"+inputText); } } }小結(jié)1.對話框的種類(消息、警告、確認(rèn)、輸入對話框) 2.如何打開各種對話框事件用戶對程序進(jìn)行控制的過程,實(shí)際上是通過激發(fā)系統(tǒng)的一些事件而通知程序的程序根據(jù)事件不同,進(jìn)行不同的處理,比如:鍵盤輸入鼠標(biāo)點(diǎn)擊手寫輸入U(xiǎn)盤插入常用事件對于java開發(fā)來說,能夠接受事件信息并處理的類主要是AWT和后續(xù)講解的swing圖形界面類中絕大多數(shù)界面設(shè)計(jì)元素都支持事件處理,而常用的是:鼠標(biāo)和鍵盤操作當(dāng)程序收到用戶的操作,則執(zhí)行相應(yīng)事件代碼,并進(jìn)行必要處理發(fā)生事件AWT中的事件JAVA事件的處理機(jī)制大家可能已經(jīng)注意到了上面的程序中,按下按鈕后不會(huì)觸發(fā)任何事件。如果想在按下按鈕時(shí),實(shí)現(xiàn)一定的功能,就必須進(jìn)入程序內(nèi)部,編寫用于決定要發(fā)生什么事情的代碼。在這里就用到了JAVA的事件處理機(jī)制。在事件的處理過程中,主要涉及三個(gè)對象:Event-事件EventSource-事件源Eventhandler-事件處理者用戶對界面操作在JAVA語言上的描述,以類的形式出現(xiàn),例如鍵盤操作對應(yīng)的事件類是KeyEvent事件發(fā)生的場所,通常就是各個(gè)組件,例如按鈕Button接收事件并對其進(jìn)行處理的對象事件按鈕事件importjava.awt.*; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; publicclassButtonEventAppextendsJFrame{
JButtonmyButton=newJButton("測試按鈕"); publicButtonEventApp(){ super
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025基礎(chǔ)設(shè)施建設(shè)版合同
- 2025【合同范本】簡化版鋼材運(yùn)輸合同
- 環(huán)保行業(yè)智能化廢物分類與處理方案
- 銀行業(yè)務(wù)與風(fēng)險(xiǎn)管理練習(xí)題
- 歷史古代文明演變練習(xí)題
- 廣西南寧市賓陽縣桂鼎高級中學(xué)2024-2025學(xué)年高一下學(xué)期3月月考生物試題(原卷版+解析版)
- 2025屆四川省遂寧市射洪中學(xué)校高三二模語文試題(原卷版+解析版)
- 滴灌 噴灌施工方案
- 2025年成人高考《語文》語言邏輯解題技巧訓(xùn)練題庫
- 2025年茶藝師高級技能考核試卷(茶藝師職業(yè)技能認(rèn)證機(jī)構(gòu))
- 2024專利代理人考試真題及答案
- 重慶旅游課件教學(xué)課件
- 《機(jī)動(dòng)車駕駛?cè)丝荚噲龅夭季忠?guī)劃指南》編制說明
- 《大數(shù)據(jù)財(cái)務(wù)分析》教學(xué)大綱
- 狀語從句(練習(xí))-2025年高考英語一輪復(fù)習(xí)(新教材新高考)
- DB11∕T 584-2022 薄抹灰外墻外保溫工程技術(shù)規(guī)程
- JJF 2156-2024材料熱膨脹儀校準(zhǔn)規(guī)范
- 中國老年骨質(zhì)疏松癥診療指南(2023)解讀課件
- 精 《校園的早晨》同步課件
- 醫(yī)學(xué)教材 鼻竇病變的CT和MRI診斷思路解析
- 2024年河南省機(jī)關(guān)單位工勤技能人員培訓(xùn)考核高級工技師《職業(yè)道德》題庫
評論
0/150
提交評論