Java语言程序设计 第8章 图形用户界面 -容器、组件
//例8.1 窗口容器 /* *本例介绍的应用程序创建一个可以移动、改变大小、最大化、可变成图标且可以关闭的窗口 *运行程序可以弹出窗口对象,结果如图所示 */ import javax.swing.*; import java.awt.*; public class JF0 extends JFrame { public JF0(String s) { super(s); //调用父类JFrame的构造方法,给窗口命名 setBounds(200,200,500,400); //设置窗口位置,窗口大小 setVisible(true); //设置窗口是否可见 try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) {} setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗口关闭动作 } public static void main(String[] args) { JF0 d=new JF0("主窗口"); } }
//例8.2 对话框容器 //创建对话框例子,程序运行结果如图所示 import javax.swing.*; public class JD extends JDialog { public JD(JFrame f,String s) { super(f,s); //调用父类JDialog的构造方法,给对话框窗口命名 setBounds(300,300,200,200); //设置对话框窗口大小位置 setVisible(true); //设置对话框窗口是否可见 setModal(false); //设置对话框窗口模式,此为无模式 setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); } public static void main(String[] args) { JF0 f=new JF0("主窗口"); //创建一个主窗口对象,f是实例化JF0类创建的 JD d=new JD(f,"这是一个对话框窗口");//创建一个对话框窗口对象 } }
//例8.3 面板容器 //创建含有面包窗口的例子,程序运行结果如图所示 import javax.swing.*; import java.awt.*; import java.awt.Color; public class JP1 extends JFrame { public JP1(JFrame f,int x,int y,int w,int h) { Container c=getContentPane(); //调用getContentPane()方法创建Container内容面板对象c c.setLayout(null); //设置不采用任何布局方式 c.setBackground(Color.yellow); //设置面包的被解释为黄色 f.add(c); //将内容面板c加入窗口对象f中 JPanel p=new JPanel(); //创建面板对象p p.setBounds(x,y,w,h); //设置面板p的位置,大小 p.setBackground(Color.blue);//设置面板的背景色为蓝色 c.add(p); //将面板p加入到窗口的内容面板c中 } public static void main(String[] args) { //创建一个JP1类的对象f1,它是一个具有内容面板对象c、 //普通面板p的窗口对象 JP1 f1=new JP1(new JF0("添加面板的窗口"),100,50,200,200); } }
//例 8.4 标签组件 //本例应用程序用来创建添加有不同标签的窗口,程序运行结果如图 import javax.swing.*; import java.awt.*; public class JL1 extends JFrame { private JLabel label; public JL1(JFrame f,JPanel p) { f.add(p); //将面板p加入窗口f中 label=new JLabel("显示文字的标签");//使用文本创建一个标签对象 label.setFont(new Font("Serif",Font.PLAIN,20)); //设置标签字体 label.setToolTipText("这是标签对象"); //设置标签的工具提示 p.add(label); //将标签对象添加到面板对象p上 } public static void main(String[] args) { JL1 f1=new JL1(new JF0("添加标签的窗口"),new JPanel()); } }
//例8.5 按钮组件 //本例应用程序用来创建添加有不同按钮的窗口,程序运行结果如图 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class JB extends JFrame { private JButton button1,button2; public JB(JFrame f,JPanel p) { f.add(p); //将面板p加入到窗口f中 button1=new JButton("按钮1"); //创建按钮对象 button1.setFont(new Font("Serif",Font.PLAIN,20)); ImageIcon img1=new ImageIcon("F:/1.jpg"); ImageIcon img2=new ImageIcon("F:/2.gif"); button2=new JButton("按钮2",img2); button2.setRolloverIcon(img1); button2.setFont(new Font("Serif",Font.PLAIN,10)); //为组件注册监听器 BHandler h=new BHandler(); button1.addActionListener(h); button2.addActionListener(h); //将各种组件添加到内容面板 p.add(button1); p.add(button2); } public static void main(String[] args) { JB f1=new JB(new JF0("添加按钮的窗口"),new JPanel()); } private class BHandler implements ActionListener { public void actionPerformed(ActionEvent event) { JOptionPane.showMessageDialog(JB.this,"你按了: "+event.getActionCommand()); } } }
//例8.6 文本框组件 //本例应用程序用来创建添加有不同文本框的窗口,程序运行结果如图 import javax.swing.*; import java.awt.*; public class JT extends JFrame { private JTextField t1,t2,t3; private JPasswordField k1; public JT(JFrame f,JPanel p) { f.add(p); //将面板p加入到窗口f中 p.setLayout(new FlowLayout()); p.setBackground(Color.YELLOW); t1=new JTextField(10); //创建文本框对象,宽度为10 t2=new JTextField("请输入文本");//创建带有初始文本的文本框对象 t2.setFont(new Font("Serif",Font.PLAIN,12)); //设置字体 t3=new JTextField("不可编辑的文本框",20); //创建带有初始文本的文本框,宽度为20 t3.setFont(new Font("Serif",Font.PLAIN,12)); t3.setEditable(false); //设置该文本框为不可编辑状态 k1=new JPasswordField("口令",10); //创建密码框 p.add(t1); p.add(t2); p.add(t3); p.add(k1); } public static void main(String[] args) { JT d=new JT(new JF0("添加文本框的窗口"),new JPanel()); } }
//例8.7 文本区的组件 //本例应用程序用来创建添加有两个文本区组件的窗口,程序运行结果如图 import java.awt.*; import javax.swing.*; public class JTA extends JFrame { private JTextArea ta1,ta2,ta3,ta4; public JTA(JFrame f,JPanel p) { f.add(p); p.setLayout(new GridLayout(4,1,5,5)); ta1=new JTextArea(); //利用不同的构造方法创建文本区对象 ta2=new JTextArea(2,8); ta3=new JTextArea("3"); ta4=new JTextArea("4",5,10); ta1.setFont(new Font("Serif",Font.PLAIN,12)); ta2.setFont(new Font("Serif",Font.PLAIN,12)); ta3.setFont(new Font("Serif",Font.PLAIN,12)); ta4.setFont(new Font("Serif",Font.PLAIN,12)); ta1.setText("JTextArea1"); //setText()方法会将原来的内容清除 ta2.append("JTextArea2"); //append()方法会将设置的字符串接在原来文本区文字之后 ta4.setTabSize(10); //设置[Tab]键的跳离距离方法 ta4.setLineWrap(true); //自动换行功能方法 ta4.setWrapStyleWord(true); //断行不断字功能方法 p.add(new JScrollPane(ta1)); p.add(new JScrollPane(ta2)); p.add(new JScrollPane(ta3)); p.add(new JScrollPane(ta4)); } public static void main(String[] args) { JTA d=new JTA(new JF0("添加文本区的窗口"),new JPanel()); } }
//例8.8 单选按钮组件 //本例应用程序用来创建包含3个颜色单选按钮的窗口,根据选择可以显示不同的颜色 //程序运行结果如图 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class JR extends JFrame { private JPanel p1,p2; private JRadioButton red,green,blue; private ButtonGroup buttonGroup; public JR(JFrame f) { Container c=getContentPane(); //创建内容面板对象c f.add(c); p1=new JPanel(); //创建一个用来显示颜色的面板对象 p1.setBackground(Color.RED); c.add(p1,BorderLayout.CENTER); buttonGroup=new ButtonGroup(); //创建单选按钮组 red=new JRadioButton("红色",true); green=new JRadioButton("绿色"); blue=new JRadioButton("蓝色"); red.setFont(new Font("Serif",Font.PLAIN,14)); //设置字体 green.setFont(new Font("Serif",Font.PLAIN,14)); blue.setFont(new Font("Serif",Font.PLAIN,14)); buttonGroup.add(red); buttonGroup.add(green); buttonGroup.add(blue); //添加选项按钮到组中 rHandler h=new rHandler(); //创建监听器 red.addItemListener(h); blue.addItemListener(h); green.addItemListener(h); p2=new JPanel(); //创建存放单选按钮的面板 p2.add(red); p2.add(green); p2.add(blue); c.add(p2,BorderLayout.SOUTH); } public static void main(String args[]) { JR application=new JR(new JF0("通过单选框选择颜色的窗口")); } private class rHandler implements ItemListener { public void itemStateChanged(ItemEvent event){ if(red.isSelected()) p1.setBackground(Color.red); else if(green.isSelected()) p1.setBackground(Color.GREEN); else p1.setBackground(Color.BLUE); } } }
//例8.9 复选框 //本例应用程序用来创建包含两个字体复选按钮的窗口, //根据选择可以改变窗口标签对象的字体 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Jcb extends JFrame { private JLabel label; private JCheckBox b,i; public Jcb(JFrame f) { Container c=getContentPane(); c.setLayout(new FlowLayout()); c.setBackground(Color.YELLOW); f.add(c); label=new JLabel("请注意观察字体的变化"); label.setFont(new Font("Serif",Font.PLAIN,20));//创建标签对象,并设置字体 c.add(label); b=new JCheckBox("粗体"); //创建复选框 i=new JCheckBox("斜体"); b.setFont(new Font("Serif",Font.PLAIN,16)); i.setFont(new Font("Setif",Font.PLAIN,16)); b.setBackground(Color.YELLOW); i.setBackground(Color.YELLOW); CBHandler h=new CBHandler(); //创建监听器对象 b.addItemListener(h); i.addItemListener(h); //注册监听器 c.add(b); c.add(i); } public static void main(String args[]) { Jcb d=new Jcb(new JF0("包含复选框的窗口")); } private class CBHandler implements ItemListener { private int vb=Font.PLAIN; private int vi=Font.PLAIN; public void itemStateChanged(ItemEvent e) { if(e.getSource()==b) vb=b.isSelected()?Font.BOLD:Font.PLAIN; if(e.getSource()==i) vi=i.isSelected()?Font.BOLD:Font.PLAIN; label.setFont(new Font("Serif",vb+vi,20)); } } }
//例8.10 下拉列表组件 //本例应用程序用来创建一个下拉列表组件的窗口 //根据选择下拉列表的菜单可以显示不同的文字,程序运行结果如图 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Jlb extends JFrame { private JComboBox lbk; private JLabel label; private String names[]={"北京大学","复旦大学","南京大学","武汉大学"}; public Jlb(JFrame f) { Container c=getContentPane(); c.setBackground(Color.YELLOW); f.add(c); lbk=new JComboBox(names); //创建下拉列表对象 lbk.setMaximumRowCount(4); //设置下拉列表所能显示的列表项的最大数目 lbk.setSelectedIndex(0); //设置默认的选择项 lbk.setFont(new Font("Serif",Font.PLAIN,14)); //设置字体 lbk.addItemListener(new lbHandler()); //注册监听器 label=new JLabel("你选择了:北京大学"); label.setFont(new Font("Serif",Font.PLAIN,14)); c.add(lbk,BorderLayout.NORTH); c.add(label,BorderLayout.CENTER); } public static void main(String []args) { Jlb d=new Jlb(new JF0("下拉列表窗口")); } private class lbHandler implements ItemListener { public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==e.SELECTED) { label.setText("你选择了:"+names[lbk.getSelectedIndex()]); } } } }