JavaSwing界面设计(所有控件及示例)----好
- 格式:ppt
- 大小:1.78 MB
- 文档页数:133
JavaSwing组件⼤全实例演⽰⼀抛砖引⽟ 本⽂指在利⽤⼀个⼩”Swing 组件⼤全”来引导⼤家学习这门语⾔,熟悉Java Swing的各个组件。
并在学习过程中参考作者这⼀程序的⽅法和思想,最终形成⾃⼰的思维⽅式和学习⽅式。
你能举⼀返三是作者最开⼼的事情。
⼩程序演⽰了Java Swing⼤部分组件。
最后附上了全部代码及详细的注释说明。
希望本⽂能对⼤家学习Java有所帮助。
随着Java风潮席卷国内,学习Java的⽅法和路径越来越多。
⽽在⼤量的书本前,在Java庞⼤的类库前⼤⼤家都有点迷失⽅向的感觉,是学 J2EE,J2ME还是。
然⽽所有的这些都或多或少的离不开J2SE。
万丈⾼楼平地起。
J2SE是整个Java的基础,学好了这个对Java的各个⽅向都是很有利的。
⽽学习J2SE的最初点就在界⾯设计,因为界⾯编程是你来感觉最直接的⼿段,是提⾼⼤家编程兴趣的很好开始,因为你写完程序编译后可马上看到⾃⼰的成果。
⽽不像后台编程做完了都感受不到效果。
⽽好的界⾯也是你测试你其他程序的基础。
界⾯设计!不就是拖拉操作吗?如果是VB,VC等可视化的编程,的确只是⼀些拖拉操作,由于Java语⾔的设计中所有的东西都是程序代码,在 Java中如果想要设计⼀个好的界⾯,可不是简单的拖拉操作能完成的。
即使使⽤了如JBuilder这么强⼤的可视化⼯具,你也得亲⾃动⼿写⼀些界⾯设计代码才能很好的完成你的任务。
如果你能在此基础上理解Java界⾯设计的思想,对你学习这门语⾔将有莫⼤的帮助。
Java界⾯设计主要涉及Awt,Swing两⼤类库,Swing是Awt的扩展和功能加强。
下⾯我们就以Swing为基础来说说整个Java的界⾯设计。
⼆感受效果 在开始之前,让我们看看这篇⽂章要达到的效果,有了⽬标和成果才有学习的兴趣,起码我是这样认为和学习的。
如下图所⽰,这就是我们设计的界⾯,它包括了Swing中⼤部分常⽤的组件。
有些功能界⾯上反映不出来,⼤家可尝试编译源代码点南击各个部分,看看它们的响应事件。
Java图形⽤户界⾯设计(Swing)的介绍前⾔Swing是⼀个⽤于开发Java应⽤程序⽤户界⾯的开发⼯具包。
它以抽象窗⼝⼯具包(AWT)为基础使跨平台应⽤程序可以使⽤任何可插拔的外观风格。
Swing开发⼈员只⽤很少的代码就可以利⽤Swing丰富、灵活的功能和模块化组件来创建优雅的⽤户界⾯。
Swing 是⼀个为Java设计的GUI⼯具包。
Swing是JAVA基础类的⼀部分。
Swing包括了图形⽤户界⾯(GUI)器件如:⽂本框,按钮,分隔窗格和表。
Swing提供许多⽐AWT更好的屏幕显⽰元素。
它们⽤纯Java写成,所以同Java本⾝⼀样可以跨平台运⾏,这⼀点不像AWT。
它们是JFC的⼀部分。
它们⽀持可更换的⾯板和主题(各种操作系统默认的特有主题),然⽽不是真的使⽤原⽣平台提供的设备,⽽是仅仅在表⾯上模仿它们。
这意味着你可以在任意平台上使⽤JAVA⽀持的任意⾯板。
轻量级组件的缺点则是执⾏速度较慢,优点就是可以在所有平台上采⽤统⼀的⾏为。
Hello World 程序HelloWorldSwing.java ⽂件代码如下:import javax.swing.*;public class HelloWorldSwing {/**{* 创建并显⽰GUI。
出于线程安全的考虑,* 这个⽅法在事件调⽤线程中调⽤。
*/private static void createAndShowGUI() {// 确保⼀个漂亮的外观风格JFrame.setDefaultLookAndFeelDecorated(true);// 创建及设置窗⼝JFrame frame = new JFrame("HelloWorldSwing");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 添加 "Hello World" 标签JLabel label = new JLabel("Hello World");frame.getContentPane().add(label);// 显⽰窗⼝frame.pack();frame.setVisible(true);}public static void main(String[] args) {// 显⽰应⽤ GUIjavax.swing.SwingUtilities.invokeLater(new Runnable() {public void run() {createAndShowGUI();}});}}执⾏以下命令输出结果:$ javac HelloWorldSwing.java$ java HelloWorldSwing⼀个⽤户登录框实例SwingLoginExample.java ⽂件代码如下:import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;public class SwingLoginExample {public static void main(String[] args) {// 创建 JFrame 实例JFrame frame = new JFrame("Login Example");// Setting the width and height of frameframe.setSize(350, 200);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/* 创建⾯板,这个类似于 HTML 的 div 标签* 我们可以创建多个⾯板并在 JFrame 中指定位置* ⾯板中我们可以添加⽂本字段,按钮及其他组件。
java-Swing控件的用法和范例类JTableJTable用来显示和编辑规则的二维单元表。
JTable有很多用来自定义其呈现和编辑的设施,同时提供了这些功能的默认设置,从而可轻松地设置简单表。
例如,要设置一个10行10列的表:TableModel dataModel=new AbstractTableModel(){public int getColumnCount(){return10;}public int getRowCount(){return10;}public Object getValueAt(int row,int col){return new Integer(row*col);} };JTable table=new JTable(dataModel);JScrollPane scrollpane=new JScrollPane(table);注意,如果要在单独的视图中(在JScrollPane外)使用JTable并显示表标题,则可以使用getTableHeader()获取并单独显示它。
设计使用JTable的应用程序时,要严格注意用来表示表数据的数据结构。
DefaultTableModel 是一个模型实现,它使用一个Vector来存储所有单元格的值。
该Vector由包含多个Object 的Vector组成。
除了将数据从应用程序复制到DefaultTableModel中之外,还可以TableModel接口的方法来包装数据,这样可将数据直接传递到JTable,如以上示例所示。
这通常可以提高应用程序的效率,因为模型可以自由选择最适合数据的内部表示形式。
在决定使用AbstractTableModel还是使用DefaultTableModel方面有一个好的实践经验,即在创建子类时使用AbstractTableModel作为基类,在不需要创建子类时则使用DefaultTableModel。
java swing 代码例子Java Swing是Java语言中用于构建图形用户界面(GUI)的一个开发工具包。
它提供了一组丰富的组件和容器,可以用于创建各种界面元素,如按钮、文本框、标签等。
下面是一些使用Java Swing的代码示例。
1. 创建一个简单的窗口```javaimport javax.swing.JFrame;public class SimpleWindow {public static void main(String[] args) {JFrame frame = new JFrame("简单窗口");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);frame.setVisible(true);}}```这段代码创建了一个简单的窗口,并设置了窗口的标题、关闭操作、大小和可见性。
2. 添加按钮和事件监听器```javaimport javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;public class ButtonExample {public static void main(String[] args) {JFrame frame = new JFrame("按钮示例");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JButton button = new JButton("点击我");button.addActionListener(e -> {JOptionPane.showMessageDialog(frame, "你点击了按钮");});frame.add(button);frame.setSize(400, 300);frame.setVisible(true);}}```这段代码创建了一个带有一个按钮的窗口,当按钮被点击时,会弹出一个对话框显示"你点击了按钮"。
当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理。
JPanel缺省是初始化一个FlowLayout,而content pane缺省是初始化一个BorderLayout。
下面将分别介绍几种最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。
代码演示每一个布局管理器都会有一个代码演示,xxxLayoutDemo.java(见附件)。
这些文件主要有三个方法组成:addComponentsToPane()提供布局逻辑(依据不同的布局管理器和UI内容)。
Java代码1public static void addComponentsToPane(Container pane) {。
}2/**3*createAndShowGUI()实例化一个JFrame,通过它的ContentPane加载布局逻辑内容。
4*/5private static void createAndShowGUI() {6// Create and set up the window.7JFrame frame = new JFrame("FlowLayoutDemo");8frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);9// Set up the content pane.10addComponentsToPane(frame.getContentPane());11// Display the window.12frame.pack();13frame.setVisible(true);14}15//main()程序入口,单独起一个线程,实例化UI。
16public static void main(String[] args) {17javax.swing.SwingUtilities.invokeLater(new Runnable() {18public void run() {19createAndShowGUI();20}21});22}FlowLayoutFlowLayout类是最简单的布局管理器。
java swing图形用户界面实例1:(文本区,菜单)import javax.swing.*;import java.awt.*;import java.awt.event.*;public class MyFrame1 extends JFrame{JTextArea area;JMenuBar bar;JMenu menu;JMenuItem itemCopy,itemCut,itemPaste;menuListen listen =new menuListen();MyFrame1(){init();setBounds(100,100,400,400);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);}public void init(){setLayout(new FlowLayout());area=new JTextArea(5,20);add(area);bar=new JMenuBar();setJMenuBar(bar);menu=new JMenu("编辑");bar.add(menu);itemCopy=new JMenuItem("复制");itemCut=new JMenuItem("剪切");itemPaste=new JMenuItem("粘贴");menu.add(itemCopy);menu.add(itemCut);menu.add(itemPaste);itemCopy.addActionListener(listen);itemCut.addActionListener(listen);itemPaste.addActionListener(listen);listen.setItem(itemCopy, itemCut, itemPaste, area);}public static void main(String[] args) {MyFrame1 win=new MyFrame1();}}class menuListen implements ActionListener{JMenuItem itemCopy,itemCut,itemPaste;JTextArea area;public void setItem(JMenuItem itemCopy,JMenuItem itemCut,JMenuItem itemPaste,JTextArea area){this.itemCopy=itemCopy;this.itemCut=itemCut;this.itemPaste=itemPaste;this.area=area;}public void actionPerformed(ActionEvent e){ if(e.getSource()==itemCopy){area.copy();}else if(e.getSource()==itemCut){area.cut();}else if(e.getSource()==itemPaste){area.paste();}}}实例2:(单选按钮,标签,按钮)import javax.swing.*;import java.awt.*;import java.awt.event.*;public class MyFrame2 extends JFrame{JTextArea area;JMenuBar bar;JMenu menu;JMenuItem itemCopy,itemCut,itemPaste;menuListen1 listen =new menuListen1();buttonListen lis=new buttonListen();JRadioButton r1,r2;JButton button;MyFrame2(){init();setBounds(100,100,400,400);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);}public void init(){setLayout(new FlowLayout());area=new JTextArea(5,20);add(area);bar=new JMenuBar();setJMenuBar(bar);menu=new JMenu("编辑");bar.add(menu);itemCopy=new JMenuItem("复制");itemCut=new JMenuItem("剪切");itemPaste=new JMenuItem("粘贴");menu.add(itemCopy);menu.add(itemCut);menu.add(itemPaste);itemCopy.addActionListener(listen);itemCut.addActionListener(listen);itemPaste.addActionListener(listen);listen.setItem(itemCopy, itemCut, itemPaste, area);add(new Label("班级:"));r1=new JRadioButton("信息管理1班",true);r2=new JRadioButton("信息管理2班");ButtonGroup group=new ButtonGroup();group.add(r1);group.add(r2);add(r1);add(r2);button=new JButton("确定");add(button);button.addActionListener(lis);lis.setArea(area,r1,r2);}public static void main(String[] args) {MyFrame2 win=new MyFrame2();}}class menuListen1 implements ActionListener{JMenuItem itemCopy,itemCut,itemPaste;JTextArea area;public void setItem(JMenuItem itemCopy,JMenuItem itemCut,JMenuItem itemPaste,JTextArea area){this.itemCopy=itemCopy;this.itemCut=itemCut;this.itemPaste=itemPaste;this.area=area;}public void actionPerformed(ActionEvent e){if(e.getSource()==itemCopy){area.copy();}else if(e.getSource()==itemCut){area.cut();}else if(e.getSource()==itemPaste){area.paste();}}}class buttonListen implements ActionListener{ JTextArea area;JRadioButton r1,r2;public void setArea(JTextArea area,JRadioButton r1,JRadioButton r2){this.area=area;this.r1=r1;this.r2=r2;}public void actionPerformed(ActionEvent e){ if(r1.isSelected()){area.setText("班级是:"+r1.getText());}if(r2.isSelected()){area.setText("班级是:"+r2.getText());}}}实例3:(选择框)import javax.swing.*;import java.awt.*;import java.awt.event.*;public class MyFrame3 extends JFrame{JTextArea area;JMenuBar bar;JMenu menu;JMenuItem itemCopy,itemCut,itemPaste;menuListen2 listen =new menuListen2();buttonListen1 lis=new buttonListen1();JRadioButton r1,r2;JButton button;JCheckBox box1,box2,box3,box4;MyFrame3(){init();setBounds(100,100,400,400);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);}public void init(){setLayout(new FlowLayout());area=new JTextArea(5,20);add(area);bar=new JMenuBar();setJMenuBar(bar);menu=new JMenu("编辑");bar.add(menu);itemCopy=new JMenuItem("复制");itemCut=new JMenuItem("剪切");itemPaste=new JMenuItem("粘贴");menu.add(itemCopy);menu.add(itemCut);menu.add(itemPaste);itemCopy.addActionListener(listen);itemCut.addActionListener(listen);itemPaste.addActionListener(listen);listen.setItem(itemCopy, itemCut, itemPaste, area);add(new Label("班级:"));r1=new JRadioButton("信息管理1班",true);r2=new JRadioButton("信息管理2班");ButtonGroup group=new ButtonGroup();group.add(r1);group.add(r2);add(r1);add(r2);add(new Label("爱好:"));box1=new JCheckBox("唱歌");box2=new JCheckBox("跳舞");box3=new JCheckBox("玩游戏");box4=new JCheckBox("看书");add(box1);add(box2);add(box3);add(box4);button=new JButton("确定");add(button);button.addActionListener(lis);}public static void main(String[] args) {MyFrame3 win=new MyFrame3();}class buttonListen1 implements ActionListener{ public void actionPerformed(ActionEvent e){if(r1.isSelected()){area.setText("班级是:"+r1.getText());}if(r2.isSelected()){area.setText("班级是:"+r2.getText());}area.append("\n爱好:");if(box1.isSelected())area.append(box1.getText());if(box2.isSelected())area.append(box2.getText());if(box3.isSelected())area.append(box3.getText());if(box4.isSelected())area.append(box4.getText());}}}class menuListen2 implements ActionListener{ JMenuItem itemCopy,itemCut,itemPaste;JTextArea area;public void setItem(JMenuItem itemCopy,JMenuItem itemCut,JMenuItem itemPaste,JTextArea area){ this.itemCopy=itemCopy;this.itemCut=itemCut;this.itemPaste=itemPaste;this.area=area;}public void actionPerformed(ActionEvent e){ if(e.getSource()==itemCopy){area.copy();}else if(e.getSource()==itemCut){area.cut();}else if(e.getSource()==itemPaste){area.paste();}}}实例4:布局import javax.swing.*;import java.awt.*;import static java.awt.BorderLayout.*;public class MyFrame4JButton a,b,c,d,e;public MyFrame4(){init();setBounds(100,100,400,400);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);}public void init(){/* setLayout(new BorderLayout());a=new JButton("aaaaa");b=new JButton("bbbbb");c=new JButton("ccccc");d=new JButton("ddddd");e=new JButton("eeeee");add(a,"East");add(b,"West");add(c,"North");add(d,"South");add(e,"Center");*//* setLayout(new FlowLayout());a=new JButton("aaaaa");b=new JButton("bbbbb");c=new JButton("ccccc");d=new JButton("ddddd");e=new JButton("eeeee");add(a);add(b);add(c);add(d);add(e);*//* setLayout(new GridLayout(3,2));a=new JButton("aaaaa");b=new JButton("bbbbb");c=new JButton("ccccc");d=new JButton("ddddd");e=new JButton("eeeee");add(a);add(b);add(c);add(d);add(e);*/JPanel panel=new JPanel(new GridLayout(2,1));a=new JButton("aaaaa");b=new JButton("bbbbb");c=new JButton("ccccc");d=new JButton("ddddd");e=new JButton("eeeee");add(panel);panel.add(a);JPanel p1=new JPanel(new GridLayout(1,2));panel.add(p1);p1.add(b);JPanel p2=new JPanel(new GridLayout(3,1));p1.add(p2);p2.add(c);p2.add(d);p2.add(e);}public static void main(String[] args) {MyFrame4 win=new MyFrame4();}}实例5:布局import javax.swing.*;import java.awt.*;import java.awt.event.*;public class MyFrame5 extends JFrame{JTextArea area;JMenuBar bar;JMenu menu;JMenuItem itemCopy,itemCut,itemPaste;menuListen3 listen =new menuListen3();buttonListen1 lis=new buttonListen1();JRadioButton r1,r2;JButton button;JCheckBox box1,box2,box3,box4;MyFrame5(){init();setBounds(100,100,400,400);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);}public void init(){JPanel panel=new JPanel(new GridLayout(2,1));add(panel);area=new JTextArea(5,20);panel.add(area);bar=new JMenuBar();setJMenuBar(bar);menu=new JMenu("编辑");bar.add(menu);itemCopy=new JMenuItem("复制");itemCut=new JMenuItem("剪切");itemPaste=new JMenuItem("粘贴");menu.add(itemCopy);menu.add(itemCut);menu.add(itemPaste);itemCopy.addActionListener(listen);itemCut.addActionListener(listen);itemPaste.addActionListener(listen);listen.setItem(itemCopy, itemCut, itemPaste, area);JPanel pan=new JPanel(new GridLayout(3,1));panel.add(pan);JPanel p1=new JPanel(new GridLayout(1,3));pan.add(p1);p1.add(new Label("班级:"));r1=new JRadioButton("信息管理1班",true);r2=new JRadioButton("信息管理2班");ButtonGroup group=new ButtonGroup();group.add(r1);group.add(r2);p1.add(r1);p1.add(r2);JPanel p2=new JPanel(new GridLayout(1,5));pan.add(p2);box1=new JCheckBox("唱歌");box2=new JCheckBox("跳舞");box3=new JCheckBox("玩游戏");box4=new JCheckBox("看书");p2.add(new Label("爱好:"));p2.add(box1);p2.add(box2);p2.add(box3);p2.add(box4);button=new JButton("确定");button.addActionListener(lis);JPanel p3=new JPanel(new FlowLayout());p3.add(button);pan.add(p3);}public static void main(String[] args) {MyFrame5 win=new MyFrame5();}class buttonListen1 implements ActionListener{ public void actionPerformed(ActionEvent e){if(r1.isSelected()){area.setText("班级是:"+r1.getText());}if(r2.isSelected()){area.setText("班级是:"+r2.getText());}area.append("\n爱好:");if(box1.isSelected())area.append(box1.getText());if(box2.isSelected())area.append(box2.getText());if(box3.isSelected())area.append(box3.getText());if(box4.isSelected())area.append(box4.getText());}}}class menuListen3 implements ActionListener{ JMenuItem itemCopy,itemCut,itemPaste;JTextArea area;public void setItem(JMenuItem itemCopy,JMenuItem itemCut,JMenuItem itemPaste,JTextArea area){ this.itemCopy=itemCopy;this.itemCut=itemCut;this.itemPaste=itemPaste;this.area=area;}public void actionPerformed(ActionEvent e){ if(e.getSource()==itemCopy){area.copy();}else if(e.getSource()==itemCut){area.cut();}else if(e.getSource()==itemPaste){area.paste();}}}。
1.1跟我学Java Swing GUI组件技术及应用实例——Java Swing GUI组件相关技术及JFrame的应用示例1.1.1Java Swing GUI组件相关技术1、Java Swing GUI组件的技术特性Java Swing 是一个为Java语言的应用程序(Java Application)设计的一套GUI(图形用户界面)工具包,同时也是J2SDK(Java基础类库)的一部分。
应用Java Swing可以构建出Java 应用程序的图形用户界面(GUI)。
(1)是AWT的扩展,它比AWT提供了更多的组件和外观。
如下示图为一个应用Java Swing GUI系统库开发实现仿腾讯QQ软件的界面示例图。
(2)是Sun公司的新一代的图形界面的标准它基于MVC的架构设计思想实现,并提供有LookAndFeel和Layout等界面和业务分离的支持技术。
如下示图为一个应用Java Swing GUI系统库开发实现的模拟Windows 资源管理器的GUI 界面示例图。
(3)Swing组件是纯Java代码(但JFrame、JDialog、JApplet除外),因此与平台无关。
如下示图为一个应用Java Swing GUI系统库开发实现仿腾讯QQ软件的用户聊天通讯主窗口的示例图。
2、Java AWT的缺点Java AWT是Abstract Window Toolkit(抽象窗口工具包)的缩写,是SUN专门针对Java GUI 编程提供的最早的也是最初的开发工具包,用来建立和设置Java图形用户界面,这个工具包提供了一套与本地图形界面交互的接口。
但由于AWT 中的图形函数的实现是与本地操作系统所提供的图形函数之间存在有一一对应的关系(也就是AWT 中的Peers概念),因此当应用AWT 构件图形用户界面时,实际上是利用本地操作系统所提供的图形系统库。
但由于不同的操作系统图形库所提供的功能是有差异的,所以在一个操作系统平台上存在的功能在另外一个操作系统平台上则有可能不提供,从而导致Java GUI与操作系统平台紧密相关而影响了Java的跨平台特性。
y 241 yJava从入门到精通Swing元素比AWT元素具有更好的屏幕显示性能。
Swing用100%纯Java实现,所以Swing 具有Java的跨平台性。
Swing不是真正使用原生平台提供设备,而是仅仅在模仿,因此可以在任何平台上使用Swing图形用户界面组件。
Swing绝大部分组件都是轻量级组件,它不像重量级组件那样必须在它们自己本地窗口中绘制,而是在它们所在的重量级窗口中绘制。
注意:AWT组件具有平台相关性,它是系统对等类的实现;而Swing组件在不同平台具有一致性的表现,另外还可以提供本地系统不支持的一些特征,因此Swing比AWT的组件实用性更强。
Swing采用了MVC(Model-View-Controller,即模型-视图-控制)设计模式。
13.1.1 Swing的类层次结构在javax.swing包中,有两种类型的组件:顶层容器(Jframe、Japplet、JDialog和JWindow)和轻量级组件。
Swing轻量级组件都是由AWT的Container类直接或间接派生而来。
ponent+-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.JcomponetSwing包是JFC(Java Foundation Classes)的一部分,它由许多包组成,如表13-1所示。
表13-1 Swing包组成内容包 描述Com.sum.swing.plaf.motif 实现Motif界面样式代表类Com.sum.java.swing.plaf.windows 实现Windows界面样式的代表类javax.swing Swing组件和使用工具续表y 242 y第13章 Swing用户界面设计javax.swing包是Swing提供的最大包,它大约包含100个类和25个接口,并且绝大部分Swing组件都包含在swing包中(JtableHeader、JtextComponent除外,分别在swing.table 和swing.text包中)。