第一篇:Swing读书笔记
Swing读书笔记
1-1:Swing常用的package
PACHAGE|内容
-----------------|-------------------------------
javax.swing|最常用的pachage,包含了各种swing组件的类
javax.swing.border|包含与swing组件外框有关的类javax..swing.colorchooser|针对swing调色盘组件(JColorChooser)所设计的类
javax.swing.event|处理由swing组件产生的事件,有别于AWT事件
javax.swing.filechooser|包含针对swing文件选择对话框(JFileChooser)所设计的类
----------------------------------------------
javax.swing.plaf|处理swing组件外观的相关类javax.swing.plaf.basic|
javax.swing.plaf.metal|
javax.swing.plaf.multi|
----------------------------------------------
javax.swing.table|针对swing表格组件(JTable)所设计的类
----------------------------------------------
javax.swing.text|包含与swing文字组件相关的类javax.swing.text.html|
javax.swing.text.html.parser|
javax.swing.text.rtf|
----------------------------------------------
javax.swing.tree|针对swing树关元件(JTree)所设计的类
javax.swing.undo|提供swing文字组件Redo或Undo的功能
1-2:swing的版面结构
Swing中几乎所有组件都是从JComponent衍生而来,也就是说这些组件都是lightweight Component,均由纯java code所编写面成、Swing中以下几个组件不是由JComponent继承面来:
JFrame(JRoot Pane)
JDialog(JRoot Pane)
JWindow(JRoot Pane)
JApplet(JRoot Pane)
以上四个组件是heavyweight Component,必须使用到native code来画出这四个窗口组件,因为要在操作系统中显示窗口画面,必
须使用操作系统的窗口资源,而以往的AWT组件大多使用native code所构造出来,因此Swing中的JFrame便继承原有AWT中的Frame
类,面不是继承JComponent类。同样,JApplet是继承原有AWT中的JApplet类,也不是继承JComponent类。
JFrame、JDialog、JWindow及JApplet这四个组件统称为最上层组件,因为其余的swing组件都必须依附在此四组件之一上才能
显示出来。此四组件均实现(Implement)RootPaneContainer这个界面(Interface),此界面定义了各种容器取得与设置并不是真实的容器,它是由Glass Pane
与Layered Pane所组成(Layered Pane里拥有Content Pane与Menu Bar,而Menu Bar可选择使用或不使用),我们不能在JRootPane上加入任何的组件,因为它只是一个虚拟的容器,若要在最上层组件上加入组件,必须加在Layered Pane或是
Layered Pane里的Content Pane上。以JFrame为例,一般我们要在JFrame上加入其他组件(如JButton、JLabel等)必须先取得JFrame的Content Pane,然后将要加入的组件放在此Content Pane中,而不是直接就加到JFrame上。因此若要在JFrame中加入一个按钮,不
能像以前AWT时一样写成frame.add(button)的形式,而必须先取得JFrame的Content Pane,然后将按钮加入Content Pane中,如:
frame.getContentPane().add(button)
否则在编译的时候将有错误信息产生。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
注意:
1.组件必须加在容器中,而容器本身具有层次性的关系,就如同珠宝盒一般,大盒子里面可以放小盒子,小盒子里面还可以放更小的盒子,而珠宝就可以放
在某一个盒子中,这里的珠宝就代表组件,盒子就代表容器。因此若您想在JFrame加入任何组件时,必须
先取得JFrame的容器来放置这些组件,而由于JFrame、JDialog、JWindow与JApplet是显示Swing组件的源头,我们可以称它们为根
组件,也就是所谓的最上层组件。
2.RootPaneContainer它是一个interface,共有5个类实现(Implement)它,分别是JFrame、JAppleet、JWindow、JDialog、JInternalFrame,其中JInternalFrame是一个lightweight Component,它不是一个最上层组件,也就是说JInternalFrame不能单独显示出来,必须依附在最上
层组件中,我们将在下面讨论组件,而JFrame,JApplet,JWindow,JDialog均为最上层组件。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
RootPaneContainer定义了下面几种方法:
方法
ContainergetContentPane()返回contentPane
ComponentgetGlassPane()返回glassPane
JLayeredPanegetLayeredPane()返回layeredPane
JRootPanegetRootPane返回属于这个组件的JRootPane
VoidsetContentPane(Container contentpane)设置ContentPane
VoidsetGlassPane(Component glassPane)设置GlassPane
VoidsetLayeredPane(JLayeredPane layeredPane)设置LayeredPane
JFrame如何取得Content Pane的实际流程,下面是一段很简单的程序代码:
public class Simple{
Simple(){
JFrame frame=new JFrame();
Container contentPane=frame.getContentPane();
JButton button=new JButton();
contentPane.add(button);
}
}
当我们写frame.getContentPane()时,会返回此frame的Content Pane,也就是一个容器组件,有了容器之后我们才能将button组件
摆进去,此时JFrame才算拥有button组件。所以JFrame就好像是一块空地,要在这空地上信人应该先盖一栋房子(容器),然后人、家具、设备等等(组件)就能搬进此房子中。下面的层次结构说明了最上层组件都含有JRootPane组件,JRootPane本身就含有容
器组件,可让最上层组件装入其他的组件。
|Frame------JFrame(JRoot Pane)
|
Window|Dialog-----JDialog(JRoot Pane)
|
|
|-----------JWindow(JRoot Pane)
Applet-----------JApplet(JRoot Pane)
图示:
|Grass Pane
|
Root Pane|
||Content Pane
|Layered Pane|
|Menu Bar
第二篇:实验6JavaAWT及Swing应用
实验6 Java AWT及Swing应用
实验内容
(1)按钮有序排列(2)密码验证问题
(3)名片录入管理界面设计(4)文字字体设计窗体
1、按钮有序排列
实验目的:(1)了解 GUI 的概念 ;
(2)了解 java.awt 包和 javax.swing 包, 以及比较它们具有的同性质的组件的异同;(3)掌握和运用 Java 的基本GUI 组件, 了解它们的特点。
实验任务:
本实验要求定义按钮若干让它们按照从左向右的顺序依次排列, 显示5个带图标的按钮。
实验步骤:
在 Eclipse 中新建一个 Chapter11项目 , 按照下列要求完成实验。练习: 调试和运行程序 ButtonCounter.java;
要求: 在当前项目Chapter11中, 新建一个文件ButtonCounter.java, 将程序清单3-1 中的程序输入并保存。该程序可以定义按钮若干使它们按照从左向右的顺序依次排列, 显示5个带图标的按钮 , 运行结果如图1所示。阅读和分析程序ButtonCounter.java, 调试编译并运行该程序。
图1 程序清单
3-1 ButtonCounter.java //ButtonCounter.java import javax.swing.*;import java.awt.*;
public class ButtonCounter extends JFrame {
public ButtonCounter(){
super(“显示按钮窗口”);
ImageIcon Icon = new ImageIcon(“image/image.gif”);
JButton jbt1 = new JButton(“按钮”,Icon);
JButton jbt2 = new JButton(“按钮”,Icon);
JButton jbt3 = new JButton(“按钮”,Icon);
JButton jbt4 = new JButton(“按钮”,Icon);
JButton jbt5 = new JButton(“按钮”,Icon);
JPanel p1 = new JPanel();
p1.add(jbt1);
JPanel p2 = new JPanel();
p2.add(jbt2);
JPanel p3 = new JPanel();
p2.add(jbt3);
JPanel p4=new JPanel();
p4.add(jbt4);
JPanel p5=new JPanel();
p5.add(jbt5);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(p1);
getContentPane().add(p2);
getContentPane().add(p3);
getContentPane().add(p4);
getContentPane().add(p5);
}
public static void main(String[] args){
// Create a frame and set its properties
JFrame frame = new ButtonCounter();
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
} } 思考
(1)在程序的 main()方法中有语句Frame.pack(), 该方法的作用是什么 ?
该方法的作用是自动确定Frame的大小。
(2)程序中语句Frame.setDefaultCloseOperation(JFrame.EXIT-ON-CLOSE);的作用是什么 ? 去掉该语句 , 程序会出现怎样的运行结果 ?
该语句的作用是使执行程序结束。去掉该语句,关闭窗口,但是命令提示符并没有正常结束。需要按Ctrl+C才行。
(3)如果将程序中的语句 getContentPane().setLayout(new FlowLayout());去掉 , 程序的运行结果会发生变化吗 ? 如果不发生变化是什么原因 ? 如果发生变化 , 会出现什么现象 ? 请解释原因。
程序的运行结果会发生变化,只出现一个按钮。因为去掉该语句后,布局管理器被取消了,只有调用每个组件的相关方法,才能为这些组件在容器中一一定位。
(4)如果将程序中的按钮组件 jbtl 换成 java.awt 包中的 Button 组件对象 , 换过后的组件和原来的 JButton 在外观上会出现什么不同 ?
颜色不同,Button 组件颜色是灰色,同JPanel相同。
注意 : 在使用 Eclipse 时 , 如果在运行的时候希望能调用一些图片 , 可以将图片放在定义该项目 Chapterll 下的目录 image 中 , 如果没有该目录 , 需要用户自己定义一个 image 目录。在编写程序的时候 , 就可以通过相对路径 “image/xxx.gif“ 等形式装载图片。
2、密码验证问题
实验目的 :
(l)进一步了解和掌握 javax.swing 包中的常用 GUI 组件;
(2)比较 Swing 包中的 JTextField 和 JPasswordField 在使用中的异同;
(3)初步了解和运用事件处理机制和 Action 事件的处理。
实验任务:
编写一个 Java 程序 , 实现用户根据自己的密码进入界面, 如果用户输入信息正确 , 则输出 “ 欢迎×××u29992X户 ”, 否则用户还可以尝试两次 , 如果尝试阶段输入信息错误, 则输出 “ 请输入正确的信息 ”, 如果尝试失败 , 用户则退出。
实验步骤 :
打开 Eclipse, 打开一个已有项目如 Chapter3, 在该项目下完成如下练习。
练习: 密码验证
要求: 在当前项目如Chapter3下, 新建一个文件PasswordVerification.java, 将程序清单 3-2 中的程序输入并保存。要求该程序完成如下功能 : 用户根据自己的密码进入界面 , 如果用户输入信息正确 , 则输出 “ 欢迎××× ”, 否则用户还可以尝试两次 , 如果尝试阶段输入信息错误 , 则输出 “请输入正确的信息” , 如果尝试失败 , 用户则退出。调试并编译程序 PasswordVerification.java, 运行该程序 , 运行结果如图2、图 3和图 4所示 , 请将该程序中的代码1~代码7补充完整。
图2
图3 3
图4 程序清单 3-2 PasswordVerification.java //PasswordVerification.java import javax.swing.*;import java.awt.event.*;
import java.awt.*;public class PasswordVerification extends JFrame implements ActionListener{ JLabel userLabel;//定义用户标签提示
JLabel passwordLabel;//定义密码标签提示
JTextField userText;//定义用户文本框
JPasswordField passwordText;//定义密码文本框
int count=1;//统计输入信息的次数
public PasswordVerification(){ super(”请输入信息“);
Container container=getContentPane();//得到容器对象container;
container.setLayout(new FlowLayout());//设置默认布局
userLabel=new JLabel(”用户名“);//创建用户标签
passwordLabel=new JLabel(”密 码“);//创建密码标签
userText=new JTextField();//创建用户文本输入框
passwordText=new JPasswordField();//创建密码输入文本框
passwordText.addActionListener(this);//注册事件监听者;container.add(userLabel);container.add(userText);container.add(passwordLabel);container.add(passwordText);setSize(240,100);setVisible(true);
}
public void actionPerformed(ActionEvent e){//事件处理
String userName=new String(”陈三“);//假设为正确的用户名;String password=new String(”12345678“);//假设为正确的密码;
if(e.getSource()==passwordText){ count++;
char[] passwords=passwordText.getPassword();
if(userText.getText().equals(userName)&&password.equals(new String(passwords))){
JOptionPane.showMessageDialog(null, ”欢迎您:“ + userName);
System.exit(0);
}
else if(count>3)System.exit(0);else{
JOptionPane.showMessageDialog(null,userText.getText()+”请输入正确信息“);} } }
public static void main(String args[]){
PasswordVerification pv=new PasswordVerification();pv.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
} 思考
(1)程序 PasswordVerification.java 中第 3 行语句 java.awt.* 的作用是什么 ? 引入java.awt包中所有的类。
(2)程序 actionPerformed()方法中 if(e.getSource()==passwordText)的作用是什么 ? 如果去掉该条件判断 , 程序运行结果会发生什么变化 ?
该语句的作用是判断事件源是否为passwordText。去掉该条件判断,程序运行结果无变化。(3)观察程序actionperformed()方法中语句”char[]passwords =passwordText.getPassword();“的作用是什么 ?
从密码文本框获取密码,并将其存入passwords数组中。
(4)观 察 程 序 中 定 义 的 main()方 法
, 如 果 在 PasswordVerification pv=new passwordverification();语句后 , 添加语句 System.exit(0), 会出现什么问题 , 为什么 ?
程序被终止运行,因为该语句的作用是终止当前正在运行的 Java 虚拟机。
(5)从给定程序的运行结果看 , 密码输入的回显字符是 ”*“, 如果把回显字符换成”#“, 该如何处理 ?
在构造函数中添加passwordText.setEchoChar('#');语句。
(6)如果要求在信息输入错误处理中 , 一旦输入完密码信息 , 用户输入框和密码输入框可以清空 , 请将上述程序修改 , 使之实现该功能。
在最后一个else中添加以下代码:userText.setText(”“);
passwordText.setText(”“);
3、名片录入管理界面设计
实验目的 :
(l)进一步了解和运用常用的 GUI 组件;
(2)深入了解和运用 5 种常用的布局管理 :FlowLayout、BorderLayout、CardLayout、GridLayout 和 GridBagLayout, 掌握 5 种布局管理的特点 , 并掌握一些常用组件容器的默认布局管理方式 :
(3)比较常用的布局管理方式的不同和使用的条件。
实验任务 :
设计一个简单的通用名片录入界面 , 名片的信息包括姓名、称谓、工作单位、工作地 5
址、电话 1、电话 2、手机、传真、邮编等基本内容。本实验由下面两个练习组成。练习: 设计顺序排列的名片录入管理界面;实验步骤 :
打开 Eclipse, 打开一个项目如 Chapter3, 在该项目下完成如下练习。
练习
设计顺序排列的名片录入管理界面,本练习是考察用户对 FlowLayout 布局管理器的应用。
要求 : 在当前项目如 Chapter3下, 新建一个文件CardManager.java,将程序清单3-3中的程序输入并保存。通过一个CardManager.java文件 , 实现一个简单的通用名片录入界面 , 名片的信息包括姓名、称谓(可以包括总裁、总经理、经理、主任、处长、院长、校长、科长、教授、博士等)、工作单位、工作地址、电话 1、电话 2、手机、传真、邮编等基本内容 , 用户选择确定按钮 , 表示输入 , 如果选择取消按钮 , 表示关闭窗口。运行结果可以如图5所示。观察运行结果 , 阅读和分析程序 CardManager.java,请将程序中代码1~代码7处补充完整。
图5 程序清单3-3 CardManager.java
import javax.swing.*;import java.awt.*;
import java.awt.event.*;
public class CardManager extends JFrame{
JLabel nameLabel,sexLabel,titleLabel,unitLabel;
JLabel addressLabel,telLabel1,telLabel2,mobileLabel,faxLabel,emailLabel;JTextField nameTxt,unitTxt,addressTxt;JTextField telTxt1,telTxt2,mobileTxt,faxTxt,emailTxt;JRadioButton sexBtn1,sexBtn2;JComboBox titleBx;JButton okBtn,cancelBtn;public CardManager(){ super(”名片录入管理“);
Container c=getContentPane();
JPanel centerPanel=new JPanel();//输入面板
nameLabel=new JLabel(”姓名“);//定义姓名标签
nameTxt=new JTextField(10);//定义姓名文本输入框
centerPanel.add(nameLabel);centerPanel.add(nameTxt);
sexLabel=new JLabel(”性别“);//定义性别标签
sexBtn1=new JRadioButton(”男“);//定义性别单选按钮1 sexBtn2= new JRadioButton(”女“);//定义性别单选按钮2 ButtonGroup group=new ButtonGroup();group.add(sexBtn1);group.add(sexBtn2);centerPanel.add(sexLabel);centerPanel.add(sexBtn1);
centerPanel.add(sexBtn2);
titleLabel=new JLabel(”称谓“);//定义称谓标签
String title[]={”总裁“,”总经理“,”经理“,”主任“,”处长“,”院长“,”校长“,”科长“,”教授“,”讲师“};//定义称谓内容
titleBx=new JComboBox();//创建称谓文本输入框
titleBx.setMaximumRowCount(5);centerPanel.add(titleLabel);
centerPanel.add(titleBx);
unitLabel=new JLabel(”工作单位“);//定义工作单位标签
unitTxt=new JTextField(30);//定义工作单位输入框
centerPanel.add(unitLabel);centerPanel.add(unitTxt);
addressLabel=new JLabel(”工作地址“);//定义工作地址标签
addressTxt=new JTextField(30);//定义工作地址输入框
centerPanel.add(addressLabel);centerPanel.add(addressTxt);
telLabel1=new JLabel(”电话“);//定义电话1标签
telTxt1=new JTextField(15);//定义电话1输入框
centerPanel.add(telLabel1);centerPanel.add(telTxt1);
telLabel2=new JLabel(”电话“);//定义电话2标签
telTxt2=new JTextField(15);//定义电话2输入框
centerPanel.add(telLabel2);
centerPanel.add(telTxt2);
mobileLabel=new JLabel(”手机“);//定义手机标签
mobileTxt=new JTextField(15);//定义手机输入框
centerPanel.add(mobileLabel);
centerPanel.add(mobileTxt);
faxLabel=new JLabel(”传真“);//定义传真标签
faxTxt=new JTextField(15);//定义传真输入框
centerPanel.add(faxLabel);centerPanel.add(faxTxt);
emailLabel=new JLabel(”E-mail“);//定义email标签
emailTxt=new JTextField(32);//定义email输入框
centerPanel.add(emailLabel);centerPanel.add(emailTxt);
JPanel sPanel=new JPanel();//按钮面板
okBtn=new JButton(”确定“);//定义确定按钮
cancelBtn=new JButton(”取消“);//定义取消按钮
cancelBtn.addActionListener(new ActionListener(){//监视cancelBtn的动作
public void actionPerformed(ActionEvent e){
if(e.getSource()==cancelBtn){//判断事件源是否是cancelBtn;System.exit(0);} } });
sPanel.add(okBtn);
sPanel.add(cancelBtn);
c.setLayout(new BorderLayout());
c.add(centerPanel, BorderLayout.CENTER);//将centerPanel放置c中的中间位置;
c.add(sPanel, BorderLayout.SOUTH);//将sPanel 放置c中的南面的位置;
setSize(418,250);setVisible(true);
}
public static void main(String args[]){ CardManager cm=new CardManager();
cm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
} 思考
(1)观察程序 CardManager()方法中的程序段 : ButtonGroup group=newButtonGroup();
group.add(sexBtnl);group.add(sexBtn2);
组件对象 group 的作用是什么 ? 如果将 group 去掉 , 程序的运行结果会发生什么变化? 为什么 ?
group 的作用是定义单选按钮控件组。如果将 group 去掉,添加的两个性别选择按钮可以同时选定,因为此时是向JFrame类中分别添加两个单选按钮,它们之间没有影响。(2)观察运行结果 , 如果将窗口的大小改变 , 运行结果会发生什么变化? 为什么?
窗口的大小改变时,组件的位置会变化,但组件的大小不改变。因为布局管理器为BorderLayout()。
4、文字字体设计窗体
实验目的 :
(1)进一步了解 Swing 包中的高级 GUI 组件;
(2)了解项目事件的处理以及匿名对象在事件处理中的应用;(3)了解和运用 Swing 包中的外观设置。
实验任务 :
设计一个文字字体设计窗体 , 在该窗体中可以设置要显示文字的字体内容 , 包括字体名称、字体大小、粗体和斜体等字体风格。
实验步骤 :
打开 Eclipse, 选择已有的项目如 Chapter3, 然后按照下列要求完成实验。
要求 : 在当前项目如 Chapter3.jpx 下 , 新建一个文件 ArtFont.java, 将程序清单3-4中的程序输入并保存。本练习的要求是设计一个字体设计的窗体 , 使用户可以根据选择 , 将字体按照字体名称、字体大小、粗体和斜体风格进行设置。阅读和分析程序清单 3-4中的 ArtFont.java, 将程序中程序段1~程序段4补充完成 , 并回答思考题。程序的运行结果如图6所示。
图6 程序清单3-4 ArtFont.java //ArtFont.java
import javax.swing.*;import java.awt.*;import java.awt.event.*;
public class ArtFont extends JFrame implements ActionListener{
JComboBox fontType,fontSize;
JCheckBox boldBx;//粗体按钮
JCheckBox italicBx;//斜体按钮
JButton colorBtn;//颜色按钮;
String[] fontNames;//字体名称;
String[] fontSizes;//字体尺寸;
JLabel label;//输入提示标签;
JTextField inputText;//文字输入框;
JTextArea txtArea;//文字显示区;
JPanel fontPanel;//字体设置;
JPanel showPanel;//显示效果区
Font font;
int boldStyle,italicStyle,underlineStyle;
int fontSizeStyle;
String fontNameStyle;
Color colorStyle=Color.black;//设置字体的默认颜色为黑色;
public ArtFont(){
super(”字体设置“);
//设置默认字体
boldStyle=0;
italicStyle=0;
underlineStyle=0;
fontSizeStyle=10;
fontNameStyle=”宋体“;
font=new Font(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);fontPanel=new JPanel();
fontPanel.setLayout(new FlowLayout());//设置字体名字
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
fontNames=ge.getAvailableFontFamilyNames();//获得系统中所有字体的名字;
fontType=new JComboBox(fontNames);
fontType.setEditable(false);
fontType.setMaximumRowCount(10);
fontType.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){ //实现监听字体名字改变的事件
int num = new Integer(fontSize.getSelectedItem().toString()).intValue();
font = new Font(fontType.getSelectedItem().toString(), Font.PLAIN, num);
txtArea.setFont(font);
}
});
//设置字体大小
fontSizes=new String[63];
for(int i=0;i<63;i++){
fontSizes[i]=Integer.toString((i+10));
}
fontSize=new JComboBox(fontSizes);
fontSize.setEditable(false);
fontSize.setMaximumRowCount(10);
fontSize.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){ //实现监听字体大小改变的方法
int num = new Integer(fontSize.getSelectedItem().toString()).intValue();
font = new Font(fontType.getSelectedItem().toString(), Font.PLAIN, num);
txtArea.setFont(font);
}
});
//设置粗体选择按钮;
boldBx=new JCheckBox(”粗体“);
boldBx.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){ //实现监听选择粗体状态改变的方法
int num = new Integer(fontSize.getSelectedItem().toString()).intValue();
if(italicBx.isSelected()&& boldBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC + Font.BOLD, num);
txtArea.setFont(font);
} else if(boldBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.BOLD, num);
txtArea.setFont(font);
}
}
});
//设置斜体选择按钮;
italicBx=new JCheckBox(”斜体“);
italicBx.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
//实现监听选择斜体状态改变的方法
int num = new Integer(fontSize.getSelectedItem().toString()).intValue();
if(italicBx.isSelected()&& boldBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC + Font.BOLD, num);
txtArea.setFont(font);
} else if(italicBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC, num);
txtArea.setFont(font);
}
}
});
//设置颜色选择;
colorBtn=new JButton(”颜色“);
colorBtn.addActionListener(this);
//设置字体面板;
fontPanel.add(fontType);
fontPanel.add(fontSize);
fontPanel.add(boldBx);fontPanel.add(italicBx);fontPanel.add(colorBtn);//设置输入提示标签
label=new JLabel(”输入“);
//设置文本输入框;
inputText=new JTextField(30);
inputText.addActionListener(this);
//设置文本显示区;
txtArea=new JTextArea(10,80);//20行80列;
txtArea.setFont(font);
//设置文本面板;
showPanel=new JPanel();
showPanel.add(label);
showPanel.add(inputText);
showPanel.setLayout(new FlowLayout());
showPanel.add(new JScrollPane(txtArea));
//设置容器;
Container container=getContentPane();
container.setLayout(new BorderLayout());
container.add(fontPanel,BorderLayout.NORTH);
container.add(showPanel,BorderLayout.CENTER);
setSize(500,300);
setVisible(true);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==colorBtn){//改变颜色
colorStyle=JColorChooser.showDialog(this,”选择字体颜色",colorStyle);
colorBtn.setForeground(colorStyle);
txtArea.setForeground(colorStyle);
}
else if(e.getSource()==inputText){//将输入文字在文字显示区表示;
txtArea.setText(inputText.getText());
}
}
public static void main(String args[]){
ArtFont artFont=new ArtFont();
artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} }
(1)程序可以编译正常、运行正常吗? 如果不能, 是因为什么原因 ? 程序可以编译正常、运行正常。
(2)如果将程序ArtFont.java中所有的匿名监听者改为this, 那么程序主要会做什么变动? 请写出。
将程序中fontType、fontSize、boldBx、italicBx的addItemListener方法中的参数new ItemListener()改为this,并将紧随其后的方法体去掉。再加入以下代码: public void itemStateChanged(ItemEvent e){
int num = new Integer(fontSize.getSelectedItem().toString()).intValue();
if(italicBx.isSelected()&& boldBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.ITALIC + Font.BOLD, num);
txtArea.setFont(font);
} else if(boldBx.isSelected()){
font = new Font(fontType.getSelectedItem().toString(), Font.BOLD, num);
txtArea.setFont(font);
} else if(italicBx.isSelected()){
font= new Font(fontType.getSelectedItem().toString(), Font.ITALIC, num);
txtArea.setFont(font);
} else {
font= new Font(fontType.getSelectedItem().toString(), Font.PLAIN, num);
txtArea.setFont(font);
}
} 13
第三篇:java swing QQ 项目总结
项目总结
这是我的第一次做项目,也是第一次当组长,这短短的二十几天令我成长了不少,也算是对项目的经验积累有了一点点。
刚开始编写和讨论需求分析,以为项目并不是做的很大,而且功能实现有限,业务逻辑不太复杂,我们尽管花费了时间,但基本不能完善,只是有一个大概轮廓,并不能很清晰明确项目中要做的一些事情和妖攻破的难点,对于项目的总体框架把握的并不是很好,还有功能方面的设计,也不能分解的很详细,以至于组员间并不能很好的协调工作。
刚开始一起同组员写界面,当然对于界面代码的风格刚开始也没统一好,导致后来融合时,由于每个人的变量命名和代码整体规划都不同,所以到用到其他人界面时,每个人都要花费大量的时间去看懂其他所有人的代码,还有注释并不是写的很清晰。
界面写好融合后,进行数据库的设计,组员间也开展了必要的讨论,最后发现数据库的设计不能按需求分析上的数据进行设计,而界面的设计中牵涉的数据库的一些数据,因为先写的界面,也不能按需求分析上面的进行,最终只能以界面的数据为模板进行数据库设计,数据库设计组员设计好之后,也没有规范字段命名,此处又乱费了大把的时间去读懂,然后很好的运用,当然对于每个字段的类型和长度也没明确规定,所以在连接数据库操作时又发现了大量的不匹配,如账号本来定义为数字类型,而程序设计时却又定义了字符串类型,还有离线消息的字符长度太短,密码的字段与数据库中数据不匹配等问题。总结出数据库的设计,需求分析对信息的搜集一定要全面
接下来是真正的实施阶段,花费了大量的时间,也发现了很多技术难点,自己也不能很好的把所有的技术难点进行分解,然后分配给组员,只是大概的一些功能点进行分工。当然,自身原因也有很多缺陷,对基础部分的知识并不能很好的灵活运用,特别是党用到某些关键的知识点时不能马上想到,如对容器HASHMAP的使用,不能运用得很恰当,还有线程也不能很好的理解和运用,甚至发大量时间去复习前面的知识点。当用到一些新技术时,体现出了自身的更大缺陷,就是自学能力不够,而且对难点的攻克没有信心,缺乏主动,如JMF多媒体框架技术和FTP文件传输协议。在写核心代码的同时,发现对java中对象的理解严重欠缺,对方法的封装也不是很到位。即便是写好的代码,也漏洞百出,不能很好捕获和控制异常,例如客户端出现了某一处异常,就不能正常运行,或者是服务器出现一些正常或几处异常,则就会导致整个系统瘫痪等问题,并没有使用自定义异常,不知道具体用在哪些地方,所以项目中也没有使用,更加没有追求代码算法设计和服务器与客户端运行效率的考虑。当然项目演示,也觉得很失败的,并不能很好表达自己的设计思想,对项目的讲解一点都不透彻。老师说的好,做的再好,说不清楚,不能让别人理解那也是不成功的案例。不过最后还是有很大收获的,这当中包括了对基础知识的巩固,对一些业务实现转换程序的实现,还有对象的设计思想,mvc设计模式的理解都更加的深刻。
第四篇:java swing视窗 提示框学习小结
1、属于javax.swing 包。
2、功能:定制四种不同种类的标准对话框。
ConfirmDialog 确认对话框。提出问题,然后由用户自己来确认(按“Yes”或“No”按钮)
InputDialog 提示输入文本
MessageDialog 显示信息
OptionDialog 组合其它三个对话框类型。
3、这四个对话框可以采用showXXXDialog()来显示。如:
showConfirmDialog()显示确认对话框、showInputDialog()显示输入文本对话框、showMessageDialog()显示信息对话框、showOptionDialog()显示选择性的对话框。
4、参数说明。
(1)ParentComponent:指示对话框的父窗口对象,一般为当前窗口。
也可以为null即采用缺省的Frame作为父窗口,此时对话框将设置在屏幕的正中。
(2)message:指示要在对话框内显示的描述性的文字
(3)String title:标题条文字串。
(4)Component:在对话框内要显示的组件(如按钮)
(5)Icon:在对话框内要显示的图标
(6)messageType(图标):
ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE、PLAIN_MESSAGE、(7)optionType:对话框底部显示的按钮选项。
DEFAULT_OPTION、YES_NO_OPTION、YES_NO_CANCEL_OPTION、OK_CANCEL_OPTION。
5、使用实例:
(1)显示MessageDialog
JOptionPane.showMessageDialog(null , “要显示的信息内容” ,“标题” , JOptionPane.ERROR_MESSAGE);
(2)显示ConfirmDialog
JOptionPane.showConfirmDialog(null , “message” , “标题”, OptionPane.YES_NO_OPTION);
(3)显示OptionDialog:
该种对话框可以由用户自己来设置各个按钮的个数并返回用户点击各个按钮的序号(从0开始计数)
Object[] options = {“查询”,“存款”,“取款”,“退出”};
int response=JOptionPane.showOptionDialog(null, “ 选择业务类型”,“ATM 取款机”,JOptionPane.YES_OPTION ,JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
if(response == 0)
{JOptionPane.showMessageDialog(null,“您按下了查询按钮”);}
else if(response == 1)
{JOptionPane.showMessageDialog(null,“您按下了存款按钮”);}
else if(response == 2)
{JOptionPane.showMessageDialog(null,“您按下了取款按钮”);}
else if(response == 3)
{JOptionPane.showMessageDialog(null,“您按下了退出按钮”);}
(4)显示InputDialog 以便让用户进行输入
String inputValue = JOptionPane.showInputDialog(“Please input a value”);
(5)显示InputDialog 以便让用户进行选择地输入
Object[] possibleValues = { “First”, “Second”, “Third” };
//用户的选择项目
Object selectedValue = JOptionPane.showInputDialog(null,“Choose one”, “Input”, JOptionPane.INFORMATION_MESSAGE , null, possibleValues , possibleValues[0]);
setTitle(“ 您按下了 ” +(String)selectedValue+“项目”);}是
第五篇:读书笔记
饶雪漫作品读后感
很久没有读过80后90后作家的作品,近日在学生的介绍下读了80后作家饶雪漫的《斗鱼》。
《斗鱼》并不是小说,而是饶雪漫夏令营以后变成的一本小书。饶雪漫的夏令营是在2006年开始的,名字叫“坏女孩夏令营”当然每次夏令营都有自己的主题。在夏令营中饶雪漫和一些心理专家和这些从全国的读者中选中的女孩相聚在一起,这些女孩都很另类,和平常的女孩相比都是那种家中管不了,甚至早早就走向了社会,打仗骂人都是小事,盗窃,撒谎,同居,流产都有,可以说都是偏离了社会的边缘人。不过她们还小,还渴望理解渴望帮助渴望成长,渴望有人能够敞开心扉听她们的故事。这也是她们要求参加夏令营的理由。当然通过夏令营饶雪漫也和其中很多营员成为了朋友,通过和她们的接触了解,让自己能够时刻懂得现在女孩们的心,对她们进行帮助,也是帮助自己不断寻找新的素材和写作的灵感,这的确是一个多赢的好主意。
这本书是去年也就是2011年夏令营的作品,书后有很多关于这次夏令营的照片和介绍,而且也邀请她的读者继续参加她的2012年的夏令营。这本书中的八个故事,都来自夏令营中的八个女孩,八个女孩的故事各不相同,却又都很心酸,有的是因为家庭,有的是因为父母教育方式的错误,有的是因为社会,总之从她们的身上我们可以吸取很多成长中的经验和教训。
之后还看过《左耳》,还有《qq兄妹》《沙漏》上中下,我就挺关注饶雪漫,感觉这是一个专门为青春期女孩写故事的人,而且写得真不错。很懂得女孩们的心理,也懂心理学,也懂教育。虽然她的文字很花哨“你脸上的寂寞是有光彩的,它总是让我心痛和牵挂,我盼着看到你的笑,不由自主的希望自己可以温暖你„„”(感觉是教人写情书)不过谁又能保证那不会打动你呢。
我也发现了80,90后不被认可的原因:他们的文字缺乏一种“震撼人心的力量”,太多的题材是华而不实的爱情故事。对青春而言爱情是一件奢侈品,沉迷其中消磨了意志,荒废了光阴,即使是界于爱情与友情之间的“喜欢”也是让人心神不定的东西。而青春的迷惘不止是情窦初开,还有自立,人生的奋斗,追求,与社会的关系等等。他们却很少关注。饶雪漫的目的很明确,适合高中生,因为这是她的主要读者,这样的智慧怎不让人佩服。怎样对中学生进行青春期教育?禁止并非良策,默许是种失职,教学生把握成长才是良策。
有的老师认为出现这种趋势一是因为现在学生身体发育早、成熟期低龄化,还有一个原因是社会各种媒体的不健康信息对青少年的影响。中学生“早恋”多年以来一直是社会和学校探讨的一个热门话题。其实应该慎用“早恋”这个词,最好不用,学生对这个词普遍有逆反心理,应该用“中学生恋爱”这个概念。中学生已经到了喜欢异性的年龄,怎么发展,关键还是在于成年人的引导。
对学生进行青春期教育内容一定要全面,这里面包括性生理知识传授;性心理认识讲解;性道德培养和建立;性法制观念的确定和性美学的指引。而在教育方式上要讲究方式,一定要坚持尊重学生主体原则和传承体验原则。青春期教育要以学生性健康发展为主线,以学生为本,让学生民主理解,体验接受,而不是跟踪盯梢、棒打鸳鸯。教育内容偏颇、方式不对,学生自然会逆反。
要想实施青春期教育,教师首先要摆脱传统思想的束缚,以新型的思维方法引导学生走出迷宫。实践证明,学生渴望了解青春期生理心理知识,乐于在男女生混合教学中接受教育。
当然,青春期教育是一项系统工程,家长对孩子要作生活的表率,给孩子以正确的指导;教师要关心学生的校内外生活;社会也要多来关心青少年的成长,为他们营造一个良好的生活环境。