java在路上基础篇.doc_第1页
java在路上基础篇.doc_第2页
java在路上基础篇.doc_第3页
java在路上基础篇.doc_第4页
java在路上基础篇.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java 在路上基础篇(二) 关于Swing程序设计基础一个较为复杂的程序,需要有一个个小的部件来构成:一般而言按照这样的顺序由小及大的操作,即首先创建好按钮组件,然后将按钮组件放置在面板上面,之后将面板插在容器中,最后将容器添加到窗体上面。1、JFrame窗体窗体就是一个组件容器,所有的组件都是必须要有窗体去承载他们。Jframe就是一个窗体类,可以通过继承java.swing.Jframe类来创建一个窗体。一个窗体包括一个容器类,这个容器作为Jframe类的一个封装属性,需要通过调用getContentPane()方法来获取它。它有带参数和不带参数两种构造方法,窗体创建好之后程序默认是不可见的,需要调用show()方法,但是这中方法逐渐被setVisible(true)取代中。2、布局管理器(绝对布局,流布局,边界布局、网格布局)绝对布局就是说硬性的指定组件在容器中的大小和位置。使用绝对布局管理的步骤如下:(1)使用Container.setLayout(null)方式取消布局管理(2)使用Component.setBounds()方法来设置每个组件的大小和位置。 流布局就是在本行之中先居中,然后根据本行满了之后到下一行还是居中,如此递归下去。构造方法有三个。 边界布局组件的位置是分布在容器的东西南北中五个位置。这个是默认的布局方式。 网格布局管理器,就是划分网格的,构造方法有两个,可以实现对网格的行列操作,对网格的间距设置。常用的面板(Jpanel面板、JscrollPane面板)面板也是一种容器因为其也是继承java.awt.Container的,Jpanel除了可以添加组件之外还是可以设置布局管理的。JscrollPane面板是带滚动条的面板,这个的实现视为了可以再较小的容器之中看到较多的内容4、标签(JLable)其包含有四个构造方法,就是设置带图标和带文本的作用。扩展的可以使用javax.swing.ImageIcon来创建图标5按钮组件(Jbutton普通按钮、JradioButton单选、JcheckBox复选框)Jbutton创建普通的样式按钮,如“确定,取消”等,有四个构造方法。JradioButton有选中与未选中两种状态,五个构造方法,图标文本出事状态设置。单选按钮的组合使用ButtonGroup来讲按钮分组,改类使用默认构造方法创建,通过add()方法将按钮添加到期中,组合起来的按钮添加到按钮组以后,同一时间只能有一个单选的按钮时被选中的。JcheckBox也有两种状态,它不需要设置按钮组。6、文本组件(JtextField 、JpasswordField 、 JTextArea )文本框组件单行的,文本域则是多行的区域可以使用setEditable(true/false)来设置是否可编辑。密码框和文本的唯一区别就是在于密码的可见性。7、列表组件(JcomboBox 下拉式Jlist 列表框)和 进度条创建进度条的构造方法有四个,默认情况下进度条是不显示同时信息的,但是可以通过调用setStringPainted(boolean b)设置是否显示提示信息。如果将指示确定进度的进度条设置为显示提示信息,默认显示当前完成任务的百分比参考下面的一个创建进度条实例。package text; import java.awt.BorderLayout; import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JProgressBar;import javax.swing.WindowConstants; public class Progress extends JFrame private static JProgressBar progressBar; public Progress() setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);/设置默认的关闭方式 progressBar = new JProgressBar();/创建进度条 progressBar.setStringPainted(true);/显示进度文本 getContentPane().add(progressBar,BorderLayout.CENTER);/添加到面板,并设置位置 setBounds(100,100,300,78); final JLabel label = new JLabel(); getContentPane().add(label,BorderLayout.NORTH); label.setText(产品正在升级); setVisible(true); public static void main(String args) new Progress();/创建窗体 progressBar.setIndeterminate(true);/设置进度条为不确定的样式 for(int i = 0; i = 100; i+)/通过进度提哦啊更新任务完成百分比 try Thread.sleep(100);/令当前的线程休眠0.1秒 catch (InterruptedException e) e.printStackTrace(); progressBar.setValue(i);/设置进度条数值 progressBar.setIndeterminate(false);/设置采用确定进度条 progressBar.setString(升级成功!); 8、Swing的一个小的实战练习。下面是一个只有程序界面但是没有程序的实际操作的代码:package text; import java.awt.BorderLayout;import java.awt.GridLayout; import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.SwingConstants;/* * * author fuweiwei *version 2012-05-07 */public class Calculator extends JFrame public static void main(String args) Calculator frame = new Calculator();/创建窗体 /* * 初始化界面的构造方法 */ public Calculator() super(); setTitle(计算器);/设这标题 setBounds(100,100,221,242);/设置位置,宽度高度 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/设置默认的关闭操作 final JPanel viewPanel = new JPanel();/创建输入框面板 getContentPane().add(viewPanel,BorderLayout.NORTH);/将面板添加到窗体中 JTextField textFiled = new JTextField();/创建输入框 textFiled.setText(0);/设置输入框的默认值 textFiled.setColumns(18);/设置输入框的列数 textFiled.setEditable(false);/设置文本编辑不可用 textFiled.setHorizontalAlignment(SwingConstants.RIGHT); viewPanel.add(textFiled);/将文本框添加到面板中 getContentPane().add(viewPanel,BorderLayout.NORTH);/将输入框添加到窗体的顶部 final JPanel buttonsPanel = new JPanel();/创建输入按钮面板 final GridLayout girdLayout = new GridLayout(4,0,5,5);/创建网格布局管理器 buttonsPanel.setLayout(girdLayout);/输入按钮面板使用网格布局 getContentPane().add(buttonsPanel,BorderLayout.SOUTH);/将输入按钮添加到面板的南部 String inputButtonNames = 1,2,3,+, 4,5,6,-,7,8,9,*, .,0,=,/;/定义输入按钮名称数组 for(int row = 0; rowinputButtonNames.length;row+) for(int col = 0; colinputButtonNames.length;col+) final JButton button = new JButton(inputButtonNamesrowcol); /创建输入按钮 button.setName(row+col);/设置输入按钮的名称,由其所在行和列的索引来组成 buttonsPanel.add(button);/将按钮添加到按钮面板中 final JPanel clearButtonPanel = new JPanel();/创建清除面板 getContentPane().add(clearButtonPanel,BorderLayout.CENTER);/将面板添加到窗体的中间 String clearButtonNames = CE , C , = ;/定义清除按钮面板 for(int i = 0;iclearButtonNames.length; i+) final JButton button = new JButton(clearButtonNamesi); /创建清除按钮 clearButtonPanel.add(button);/将清除按钮添加到清除按钮面板中 setVisible(true);/显示窗体 高级Swing学习一.列表1.1 JList构件JList显示对象列表并且允许用户选择一个或多个项的组件。单独的模型 ListModel 维护列表的内容。String word = 1,2,3;JList list = new JList(word);一般JList 都是滚动的,但是java有滚动面板,普通组件不能自动滚动JScollPane scollPane = new JScollPane(list );然后把滚动面板插入都外围面板上。默认JList能显示8个选项,但是可以setVisibleRowCount(8)设置显示。JList.VERTICAL-垂直排放所有选项JList.VERTICAL_WRAP-如果选项超过可视列,开始新的一列JList.HORIZONTAL_WRAP- 如果选项超过可视行,开始新的一行public void setSelectionMode(int selectionMode) -对选择模式进行设置如果允许多选,列表返回的值Object o = list.getSelectedValues();如果不允许多选,返回的值String s = (String)list.getSelectedValue();Java代码 1.package swing.JList; 2.3.import java.awt.BorderLayout; 4.import java.awt.event.ActionEvent; 5.import java.awt.event.ActionListener; 6.7.import javax.swing.ButtonGroup; 8.import javax.swing.JFrame; 9.import javax.swing.JLabel; 10.import javax.swing.JList; 11.import javax.swing.JPanel; 12.import javax.swing.JRadioButton; 13.import javax.swing.JScrollPane; 14.import javax.swing.event.ListSelectionEvent; 15.import javax.swing.event.ListSelectionListener; 16.17.public class ListFrame extends JFrame 18.19.private static final int DEFAULT_WIDTH = 400; 20.private static final int DEFAULT_HEIGHT = 300; 21.private JPanel listPanel; 22.private JList wordList; 23.private JLabel label; 24.private JPanel buttonPanel; 25.private ButtonGroup group; 26.private String prefix = The ; 27.private String suffix = fox jumps over the lazy dog.; 28.29.public ListFrame() 30.setTitle(ListTest); 31.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 32.33.String words=1,2,123,36,72,46,67,15,54,34,23,ds,22,12; 34.wordList = new JList(words); 35.wordList.setVisibleRowCount(4); 36.JScrollPane scrollPane = new JScrollPane(wordList); 37.38.listPanel = new JPanel(); 39.listPanel.add(scrollPane); 40.41.wordList.addListSelectionListener(new ListSelectionListener() 42.43.Override 44.public void valueChanged(ListSelectionEvent e) 45./ TODO Auto-generated method stub 46.Object values = wordList.getSelectedValues(); 47.48.StringBuilder text = new StringBuilder(prefix); 49.for(int i=0;ivalues.length;i+) 50.String word = (String)valuesi; 51.text.append(word); 52.text.append( ); 53. 54.text.append(suffix); 55.label.setText(text.toString(); 56. 57.); 58.59.buttonPanel = new JPanel(); 60.group = new ButtonGroup(); 61.makeButton(Vertical, JList.VERTICAL); 62.makeButton(Vertical Wrap, JList.VERTICAL_WRAP); 63.makeButton(Horizontial Wrap, JList.HORIZONTAL_WRAP); 64.add(listPanel,BorderLayout.NORTH); 65.label = new JLabel(prefix+suffix); 66.add(label,BorderLayout.CENTER); 67.add(buttonPanel,BorderLayout.SOUTH); 68. 69.70.private void makeButton(String label, final int o) 71.JRadioButton button = new JRadioButton(label); 72.buttonPanel.add(button); 73.if(group.getButtonCount()=0) 74.button.setSelected(true); 75. 76.group.add(button); 77.button.addActionListener(new ActionListener() 78.79.Override 80.public void actionPerformed(ActionEvent e) 81./ TODO Auto-generated method stub 82.wordList.setLayoutOrientation(o); 83.listPanel.revalidate(); 84. 85.); 86. 87. package swing.JList;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ButtonGroup;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;public class ListFrame extends JFrame private static final int DEFAULT_WIDTH = 400;private static final int DEFAULT_HEIGHT = 300;private JPanel listPanel;private JList wordList;private JLabel label;private JPanel buttonPanel;private ButtonGroup group;private String prefix = The ;private String suffix = fox jumps over the lazy dog.;public ListFrame()setTitle(ListTest);setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);String words=1,2,123,36,72,46,67,15,54,34,23,ds,22,12;wordList = new JList(words);wordList.setVisibleRowCount(4);JScrollPane scrollPane = new JScrollPane(wordList);listPanel = new JPanel();listPanel.add(scrollPane);wordList.addListSelectionListener(new ListSelectionListener() Overridepublic void valueChanged(ListSelectionEvent e) / TODO Auto-generated method stubObject values = wordList.getSelectedValues();StringBuilder text = new StringBuilder(prefix);for(int i=0;ivalues.length;i+)String word = (String)valuesi;text.append(word);text.append( );text.append(suffix);label.setText(text.toString(););buttonPanel = new JPanel();group = new ButtonGroup();makeButton(Vertical, JList.VERTICAL);makeButton(Vertical Wrap, JList.VERTICAL_WRAP);makeButton(Horizontial Wrap, JList.HORIZONTAL_WRAP);add(listPanel,BorderLayout.NORTH);label = new JLabel(prefix+suffix);add(label,BorderLayout.CENTER);add(buttonPanel,BorderLayout.SOUTH);private void makeButton(String label, final int o)JRadioButton button = new JRadioButton(label);buttonPanel.add(button);if(group.getButtonCount()=0)button.setSelected(true);group.add(button);button.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stubwordList.setLayoutOrientation(o);listPanel.revalidate(););1.2 列表模式JList显示的列表是固定不变的,但是现实生活中式可变的,但是JList并没有对列表增删的操作,这是因为JList只是负责数据的可视化外观,而是用列表模型来获取数据的。public interface ListModelint getSize();Object getElementAt(int index);addListDataListener(ListDataListener l); /增加元素时,通知JListremoveListDataListener(ListDataListener l); /删除元素时,通知JList这个接口并没有指定数据时怎么样存储的,而且它也没有强制要求这些对象被存储,无论何时getElementAt(),它都会重新计算获得,这样的好处是如果一个数组很大,那样这样的设计是很有用的。1.3 值的插入和移除不能直接编辑列表集合,必须先获得列表模型ListModel model = list.getModel();1.4 值的绘制JList不仅仅现实字符串列表,也可以显示icon对象填充的数组或者向量,只需要在JList安装一个自定义的列表单元格绘制器。Java代码 1./*/ 2.JList fontList = new JList(fonts.toArray(); 3.fontList.setVisibleRowCount(4); 4.fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 5.fontList.setCellRenderer(new FontCellRenderer(); 6./*/ /*/JList fontList = new JList(fonts.toArray(); fontList.setVisibleRowCount(4); fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); fontList.setCellRenderer(new FontCellRenderer();/*/Java代码 1.class FontCellRenderer extends JPanel implements ListCellRenderer 2. 3.public Component getListCellRendererComponent(JList list, Object value, int index, 4.boolean isSelected, boolean cellHasFocus) 5. 6.font = (Font) value; 7.background = isSelected ? list.getSelectionBackground() : list.getBackground(); 8.foreground = isSelected ? list.getSelectionForeground() : list.getForeground(); 9.return this; 10. 11.12.public void paintComponent(Graphics g) 13. 14.String text = font.getFamily(); 15.FontMetrics fm = g.getFontMetrics(font); 16.g.setColor(background); 17.g.fillRect(0, 0, getWidth(), getHeight(); 18.g.setColor(foreground); 19.g.setFont(font); 20.g.drawString(text, 0, fm.getAscent(); 21. 22.23.public Dimension getPreferredSize() 24. 25.String text = font.getFamily(); 26.Graphics g = getGraphics(); 27.FontMetrics fm = g.getFontMetrics(font); 28.return new Dimension(fm.stringWidth(text), fm.getHeight(); 29. 30.31.private Font font; 32.private Color background; 33.private Color foreground; 34. class FontCellRenderer extends JPanel implements ListCellRenderer public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) font = (Font) value; background = isSelected ? list.getSelectionBackground() : list.getBackground(); foreground = isSelected ? list.getSelectionForeground() : list.getForeground(); return this; public void paintComponent(Graphics g) String text = font.getFamily(); FontMetrics fm = g.getFontMetrics(font); g.setColor(background); g.fillRect(0, 0, getWidth(), getHeight(); g.setColor(foreground); g.setFont(font); g.drawString(text, 0, fm.getAscent(); public Dimension getPreferredSize() String text = font.getFamily(); Graphics g = getGraphics(); FontMetrics fm = g.getFontMetrics(font); return new Dimension(fm.stringWidth(text), fm.getHeight(); private Font font; private Color background; private Color foreground;Component getListCellRendererComponent(JList list, /正在绘制的列表Object value, /由 list.getModel().getElementAt(index) 返回的值。int index, /单元格索引boolean isSelected,boolean cellHasFocus /如果指定的单元格拥有焦点,则为 true)二.树一棵树是由一些节点(node)组成,每个节点要么是叶节点或者是孩子节点除了根节点(root node),每个节点都有唯一父节点,一棵树有且唯一个根节点,有时每棵树都有自己的根节点,那么它是森林2.1 简单的树JTree遵循模型视图控制器模式,构造一个JTree组件,需要提供一个树模型JTree tree= new JTree(new TreeModel();然而树模型是由节点组成的TreeNode.TreeModel接口的默认实现类是DefaultTreeModel,TreeNode的默认实现类是DefaultMutableTreeNode.TreeNode root=.;DefaultTreeModel defaultTreeModel = new defaultTreeModel(root);DefaultMutableTreeNode root= new DefaultMutableTreeNode(root);DefaultMutableTreeNode child1= new DefaultMutableTreeNode(child1);root.add(child1);从上面不难看出,树模型就是由根节点构成的模型,然后将所有节点贯穿起来,最后形成树模型。Java代码 1.package swing.simple; 2.3.import javax.swing.JFrame; 4.import javax.swing.JPanel; 5.import javax.swing.JScrollPane; 6.import javax.swing.JTree; 7.import javax.swing.tree.DefaultMutableTreeNode; 8.import javax.swing.tree.DefaultTreeModel; 9.import javax.swing.tree.TreeModel; 10.11.public class SimpleTree extends JFrame 12.13.public SimpleTree() 14.setTitle(Simple Tree); 15.setSize(400, 400); 16./ TreeModel model = new DefaultTreeModel(): 17.DefaultMutableTreeNode root = new DefaultMutableTreeNode(中国); 18.DefaultMutableTreeNode city1 = new DefaultMutableTreeNode(北京); 19.20.DefaultMutableTreeNode city2 = new DefaultMutableTreeNode(安徽); 21.22.DefaultMutableTreeNode city3 = new DefaultMutableTreeNode(上海); 23.24.DefaultMutableTreeNode city11 = new DefaultMutableTreeNode(海淀); 25.26.DefaultMutableTreeNode city12 = new DefaultMutableTreeNode(朝阳); 27.28.DefaultMutableTreeNode city21 = new DefaultMutableTreeNode(安庆); 29.30.DefaultMutableTreeNode city22 = new DefaultMutableTreeNode(合肥); 31.32.root.add(city1); 33.root.add(city2); 34.root.add(city3); 35.city1.add(city11); 36.city1.add(city12); 37.city2.add(city21); 38.city2.add(city22); 39.40.TreeModel model = new DefaultTreeModel(root); 41.42.JTree tree = new JTree(model); 43.44.add(new JScrollPane(tree); 45. 46.47. package swing.simple;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreeModel;public class SimpleTree extends JFrame public SimpleTree() setTitle(Simple Tree);setSize(400, 400);/ TreeModel model = new DefaultTreeModel():DefaultMutableTreeNode root = new DefaultMutableTreeNode(中国);DefaultMutableTreeNode city1 = new DefaultMutableTreeNode(北京);DefaultMutableTreeNode city2 = new DefaultMutableTreeNode(安徽);DefaultMutableTreeNode city3 = new DefaultMutableTreeNode(上海);DefaultMutableTreeNode city11 = new DefaultMutableTreeNode(海淀);DefaultMutableTreeNode city12 = new DefaultMutableTreeNode(朝阳);DefaultMutableTreeNode city21 = new DefaultMutableTreeNode(安庆);DefaultMutableTreeNode city22 = new DefaultMutableTreeNode(合肥);root.add(city1);root.add(city2);root.add(city3);city1.add(city11);city1.add(city12);city2.add(city21);city2.add(city22);TreeModel model = new DefaultTreeModel(root);JTree tree = new JTree(model);add(new JScrollPane(tree);要显示这些树,结点绘制器需要绘制三个图标,一个是叶子结点图标,一个闭合的文件图标,还有一个开启的文件夹图标。有时候我们添加一个结点时,根本不知道它是否还有子节点。这时,你可以设置node.setAllowsChildren(true);然后绘制图标时,告诉模型需要子节点,mode.setAskssetAllowsChildren(true);编辑树和树的路径JTree能处理的实际上不是树的结点,而是树的路径。TreePath管理树路径情况。TreePath path = tree.getSelectionPath();DefaultMutableTreeNode node = (DefaultMutableTreeNode )path.getLastPathComponent();现在你拥有了当前结点,那么如果使用node.add(newNode)来编辑结点,是行不通的,因为它只是更新了模型,而视图还没有被更新,所以需要通知视图也要更新。不过有更简单的方法。public void model.insertNodeInto(MutableTreeNode newChild, /新结点MutableTreeNode pare

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论