第14章+窗口和对话框.docx
- 文档编号:26539716
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:22
- 大小:20.98KB
第14章+窗口和对话框.docx
《第14章+窗口和对话框.docx》由会员分享,可在线阅读,更多相关《第14章+窗口和对话框.docx(22页珍藏版)》请在冰豆网上搜索。
第14章+窗口和对话框
第14章窗口和对话框
Swing的窗口(window)、窗体(frame)和对话框(dialog)是分别扩展AWT的window类Frame类和Dialog类的重量组件。
当这三个组件都是窗口时,这三个组件之间的差别是不明显的,因此,有时在给定情况下要确定使用哪个组件是很困难的。
为了澄清这些差别,表14-1列出了与这三个组件有关的一些属性。
表14-1窗口、窗体和对话框属性①,②
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
属性 窗口 窗体 对话框
─────────────────────────────────
模态 否 否 否/CSG
可调整大小 否 否/SG 是/SG
标题栏 否 是 是
边框 否 是 是
标题 否 是/CSG 是/CSG
菜单栏 否 是/SG 否
焦点管理器 是 是 是
警告字符串 是/G 是/G 是/G
图标图像③ 否 是/SG 否
链接到一个窗体 是 否 是
─────────────────────────────────
①是/否指缺省的属性状态
②C=在构造时可设置,S=可使用的设置方法,G=可使用的获取方法(即get...()或is...())
③不是所有的平台都支持窗口的图标化。
窗口是这三个组件中最基本的组件,事实上,java.awt.Window是Frame和Dialog的超类。
窗口没有边框、标题栏或菜单栏,而且不能调整其大小。
如果需要在其他组件之上的无边框矩形区域中显示某些内容,则窗口是最合适的。
14.1JWindow
例14-1使用JWindow来实现一个splash窗口
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
//Thishasbeenmodifiedfromthecodeinthebook
//todisplaytheanimatedswing.gifinawindowinthecorner
//ofyourdesktop.Adoubleclickclosesthewindow.
publicclassTestextendsJFrame{
Toolkittoolkit=Toolkit.getDefaultToolkit();
JWindowwindow=newJWindow();
JLabellabel=newJLabel(newImageIcon("swing.gif"));
staticpublicvoidmain(String[]args){
JFrameframe=newTest();
}
publicTest(){
//label.setBorder(BorderFactory.createRaisedBevelBorder());
window.getContentPane().add(label,"Center");
//centerWindow();
//changelocationtosuitetaste...
window.setLocation(75,10);
window.pack();
window.show();
window.addMouseListener(newMouseAdapter(){
publicvoidmousePressed(MouseEvente){
if(e.getClickCount()==2){
window.dispose();
System.exit(0);
}
}
});
}
privatevoidcenterWindow(){
DimensionscrnSize=toolkit.getScreenSize();
DimensionlabelSize=label.getPreferredSize();
intlabelWidth=labelSize.width,
labelHeight=labelSize.height;
window.setLocation(scrnSize.width/2-(labelWidth/2),
scrnSize.height/2-(labelHeight/2));
window.pack();
}
}
例14-2一个作为应用程序窗口使用的JWindow实例
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassTestextendsJApplet{
JWindowwindow=newJWindow();
JMenuBarmenuBar=newJMenuBar();
JMenufileMenu=newJMenu("File");
JMenuItemquitItem;
publicTest(){
finalContainercontentPane=getContentPane();
JButtonbutton=newJButton("showwindow...");
contentPane.setLayout(newFlowLayout());
contentPane.add(button);
fileMenu.add("New");
fileMenu.add("Open...");
fileMenu.add("Save");
fileMenu.add("SaveAs...");
fileMenu.addSeparator();
fileMenu.add(quitItem=newJMenuItem("Quit"));
menuBar.add(fileMenu);
window.getRootPane().setJMenuBar(menuBar);
window.getRootPane().setBorder(
BorderFactory.createRaisedBevelBorder());
button.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Pointpt=contentPane.getLocation();
SwingUtilities.convertPointToScreen(
pt,contentPane);
window.setBounds(pt.x+10,pt.y+10,200,200);
window.show();
quitItem.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
window.dispose();
}
});
}
});
}
}
14.1.1JWindow属性
14.1.2JWindow类总结
14.1.3AWT兼容
14.2JDialog
例14-3运行中的JDialog
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassTestextendsJApplet{
privateConstraintsPanelcp=newConstraintsPanel();
privateJPanelbuttonsPanel=newJPanel();
privateJButtonshowButton=newJButton("showdialog..."),
okButton=newJButton("OK"),
applyButton=newJButton("Apply"),
cancelButton=newJButton("Cancel");
privateJButton[]buttons=newJButton[]{
okButton,applyButton,cancelButton,
};
privateJDialogdialog=newJDialog(null,//owner
"ConstraintsDialog",//title
true);//modal
publicTest(){
ContainercontentPane=getContentPane();
ContainerdialogContentPane=dialog.getContentPane();
contentPane.setLayout(newFlowLayout());
contentPane.add(showButton);
dialogContentPane.add(cp,BorderLayout.CENTER);
dialogContentPane.add(buttonsPanel,BorderLayout.SOUTH);
dialog.pack();
//setLocationRelativeTomustbecalledafterpack(),
//becausedialogplacementisbasedondialogsize.
//Becausetheappletisnotyetshowing,calling
//setLocationRelativeTo()herecausesthedialogtobe
//showncenteredonthescreen.
//
//IfsetLocationRelativeTo()isnotinvoked,thedialog
//willbelocatedat(0,0)inscreencoordinates.
//dialog.setLocationRelativeTo(this);
for(inti=0;i buttonsPanel.add(buttons[i]); } addButtonListeners(); } privatevoidaddButtonListeners(){ showButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ //callingsetLocationRelativeTo()herecauses //thedialogitobecenteredovertheapplet. dialog.setLocationRelativeTo(Test.this); dialog.show(); } }); okButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ showStatus("OKbuttonActivated"); dialog.dispose(); } }); applyButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ showStatus("ApplybuttonActivated"); } }); cancelButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ showStatus("CancelbuttonActivated"); dialog.dispose(); } }); } } 14.2.1JDialog属性 14.2.2JDialog类总结 14.2.3AWT兼容 14.3JOptionPane 例14-4用JOptionPane创建对话框 importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; publicclassTestextendsJApplet{ privateJButtontopButton=newJButton( "showdialogcreatedfromoptionpane"); privateJButtonbottomButton=newJButton( "showdialogcreatedwithstaticmethod"); privateStringtitle="dialogtitle"; privateStringmessage="message"; publicTest(){ ContainercontentPane=getContentPane(); contentPane.setLayout(newFlowLayout()); contentPane.add(topButton); contentPane.add(bottomButton); topButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ JOptionPaneoptionPane=newJOptionPane( message,//message JOptionPane.INFORMATION_MESSAGE);//messageType JDialogdialog=optionPane.createDialog( topButton,//parentComponent title);//title dialog.show(); } }); bottomButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ JOptionPane.showMessageDialog( bottomButton,//parentComponent message,//message title,//title JOptionPane.INFORMATION_MESSAGE);//messageType } }); } } 14.3.1内部窗体 例14-5用JOptionPane创建内部窗体 importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; publicclassTestextendsJApplet{ privateJButtonbutton=newJButton("showinternalframe"); publicTest(){ ContainercontentPane=getContentPane(); contentPane.setLayout(newFlowLayout()); contentPane.add(button); button.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ JOptionPane.showInternalMessageDialog( button,//parentComponent "BreakTime...",//message "Reminder! ",//title JOptionPane.INFORMATION_MESSAGE);//messageType } }); } } 14.3.2用JOptionPane静态方法创建对话框 14.3.3消息对话框 例14-6显示具有不同消息类型的消息对话框 importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; publicclassTestextendsJApplet{ privateJButtonbutton=newJButton("showdialog..."); privateStringtitle="dialogtitle"; privateStringmessage="information"; privateintmessageType=JOptionPane.INFORMATION_MESSAGE; privateStringmessages[]={ "information","error","warning","question","plain" }; publicTest(){ ContainercontentPane=getContentPane(); JPanelcontrolPanel=newControlPanel(this); contentPane.setLayout(newFlowLayout()); contentPane.add(controlPanel); contentPane.add(button); button.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ JOptionPane.showMessageDialog( button,//parentComponent message,//message title,//title messageType); } }); } publicvoidsetMessageType(intmessageType){ this.messageType=messageType; switch(messageType){ caseJOptionPane.INFORMATION_MESSAGE: message=messages[0]; break; caseJOptionPane.ERROR_MESSAGE: message=messages[1]; break; caseJOptionPane.WARNING_MESSAGE: message=messages[2]; break; caseJOptionPane.QUESTION_MESSAGE: message=messages[3]; break; caseJOptionPane.PLAIN_MESSAGE: message=messages[4]; break; } } } classControlPanelextendsJPanel{ privateJComboBoxmessageTypes=newJComboBox(); privateint[]typeValues={ JOptionPane.INFORMATION_MESSAGE, JOptionPane.ERROR_MESSAGE, JOptionPane.WARNING_MESSAGE, JOptionPane.QUESTION_MESSAGE, JOptionPane.PLAIN_MESSAGE, }; privateString[]typeNames={ "JOptionPane.INFORMATION_MESSAGE", "JOptionPane.ERROR_MESSAGE", "JOptionPane.WARNING_MESSAGE", "JOptionPane.QUESTION_MESSAGE", "JOptionPane.PLAIN_MESSAGE", }; publicControlPanel(finalTestapplet){ add(messageTypes); for(inti=0;i messageTypes.addItem(typeNames[i]); } messageTypes.addItemListener(newItemListener(){ publicvoiditemStateChanged(ItemEvente){ Strings=(String)messageTypes.getSelectedItem(); inttype; for(inti=0;i if(s.equals(typeNames[i])) applet.setMessageType(typeValues[i]); } } }); } } 例14-7替换消息对话框的缺省图标 importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; publicclassTestextendsJApplet{ privateJButtonbutton=newJButton("showdialog..."); privateStringtitle="Reminder! "; privateStringmessage="Dinnertime"; publicTest(){ ContainercontentPane=getContentPane(); contentPane.setLayout(newFlowLayout()); c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14 窗口 对话框