【Java Swing探索之路系列】之二:Java Swing布局面板组件
来源:互联网 发布:怎样在淘宝应聘客服 编辑:程序博客网 时间:2024/04/29 13:57
作者:郭嘉
邮箱:allenwells@163.com
博客:http://blog.csdn.net/allenwells
github:https://github.com/AllenWell
面板指的是容器,即中间容器类,可以将基本组件放置在其中,组成丰富多彩的用户界面。
一 JPanel
在JPanel的使用中,有一个双缓冲的概念,这个技术旨在改进频繁变化的组件显示效果。可以在JPanel初始化的时候进行定义如下所示:
举例
展示如何使用JPanel中间容器类。
import javax.swing.*;import java.awt.*;import java.awt.event.*;public class JPanelDemo{ //WIDTH是指整个顶层框架的宽度。 //HEIGHT是指整个顶层框架的长度。 static final int WIDTH=300; static final int HEIGHT=150; public static void main(String[] args) { JFrame jf=new JFrame("测试程序"); jf.setLayout(new BorderLayout()); jf.setSize(WIDTH,HEIGHT); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); JPanel contentPane=new JPanel();//创建六个中间容器,并且将contentPane放到顶层容器内 JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); JPanel p4=new JPanel(); JPanel p5=new JPanel(); jf.setContentPane(contentPane); JButton b1=new JButton("小赵");//创建九个普通按钮组件,将p1到p5五个面板设置为流布局。 JButton b2=new JButton("小李"); JButton b3=new JButton("小王"); JButton b4=new JButton("小孙"); JButton b5=new JButton("小钱"); JButton b6=new JButton("小周"); JButton b7=new JButton("小政"); JButton b8=new JButton("小武"); JButton b9=new JButton("姓"); p1.setLayout(new FlowLayout()); p2.setLayout(new FlowLayout()); p3.setLayout(new FlowLayout()); p4.setLayout(new FlowLayout()); p5.setLayout(new FlowLayout()); p1.add(b1); //将b1、b2加到p1中,将b3、b4加到p2中,将b5、b6加到p3中,将b7、b8加到p4中,将b9加到p5中 p1.add(b2); p2.add(b3); p2.add(b4); p3.add(b5); p3.add(b6); p4.add(b7); p4.add(b8); p5.add(b9); contentPane.add(p1,"North");//将p1到p5五个面板按照BorderLayout布局方式放置到contentPane面板中 contentPane.add(p2,"South"); contentPane.add(p3,"East"); contentPane.add(p4,"West"); contentPane.add(p5,"Center");}}
运行效果如下所示:
二 JScrollPane
JScrollPane是一个带滚动条的容器类,它可以用来显示一些文本、表格内容,当内容超过JScrollPane面板大小时,JScrollPane会自动添加滚动条。
可以通过滚动策略来控制滚动条的显示,如下所示:
确定重直
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED 需要时出现垂直滚动条
ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER 从不出现垂直滚动条
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS 总是出现垂直滚动条
确定水平
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED 需要时出现水平滚动条
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER 从不出现水平滚动条
ScrollPaneConstants.HORIZONTA_SCROLLBAR_ALWAYS 总是出现水平滚动条
举例
展示自动水平和垂直方向都会出现滚动条。
import javax.swing.*;public class JScrollPaneDemo{ static final int WIDTH=300; static final int HEIGHT=150; public static void main(String[] args) { JFrame jf=new JFrame("测试程序"); jf.setSize(WIDTH,HEIGHT); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); JTextArea ta=new JTextArea("我们是某某软件公司的骨干开发人员,我们会竭诚为您服务!!!");//创建一个文本域组件和一个滚动条面板,并且将滚动条面板添加到顶层容器内 JScrollPane sp=new JScrollPane(ta,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS ); jf.setContentPane(sp); } }
运行效果如下所示:
三 JSplitPane
举例
将顶层窗口分成两个部分,每一个部分添加一个带流布局的内容面板,再在内容面板中添加普通按钮组件。
import javax.swing.*;import java.awt.*;public class JSplitPaneDemo{ public static void main (String[] args) {///创建四个普通按钮组件 JButton b1=new JButton ("确定"); JButton b2=new JButton ("取消"); JButton b3=new JButton("优秀"); JButton b4=new JButton("良好");///创建两个中间容器,并且被设置为流布局的布局方式 JPanel p1=new JPanel(); JPanel p2=new JPanel(); p1.setLayout(new FlowLayout()); p2.setLayout(new FlowLayout());///将b1和b2放到p1中,将b3和b4放到p2中。 p1.add(b1); p1.add(b2); p2.add(b3); p2.add(b4); JSplitPane splitPane = new JSplitPane (); splitPane.setOneTouchExpandable (true); splitPane.setContinuousLayout (true); splitPane.setPreferredSize (new Dimension (50,100)); splitPane.setOrientation (JSplitPane.HORIZONTAL_SPLIT);splitPane.setLeftComponent (p1); splitPane.setRightComponent (p2); splitPane.setDividerSize (3); splitPane.setDividerLocation(50); JFrame frame = new JFrame ("测试窗口"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.setVisible (true); frame.setContentPane (splitPane); frame.pack (); }}
运行效果如下所示:
四 JTabbedPane
举例
创建选项卡面板,并在每个标签选项卡中添加基本组件。
import javax.swing.*;import java.awt.*;public class JTabbedPaneDemo{ public static void main(String[] args) { try{//显示外观风格UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch(Exception e){} JFrame frame = new JFrame ("资金状况"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.setVisible (true);//默认为false JTabbedPane tp=new JTabbedPane();//创建一个选项卡容器,将之添加到顶层容器内 frame.setContentPane(tp); JPanel panel1 = new JPanel (); JPanel panel2 = new JPanel (); JPanel panel3 = new JPanel (); JPanel panel4 = new JPanel (); JPanel panel5 = new JPanel (); tp.addTab("panel1", panel1); //添加选项卡容器,并且设置其中每个选项卡的标签以及其是否可启用 tp.setEnabledAt(0,true); tp.setTitleAt(0,"个人收入状况"); tp.addTab ("panel2", panel2); tp.setEnabledAt (1, true); tp.setTitleAt (1,"工资"); tp.addTab ("panel3", panel3); tp.setEnabledAt (2, true); tp.setTitleAt (2,"奖金"); tp.addTab ("panel4", panel4); tp.setEnabledAt(0,true); tp.setTitleAt(3,"津贴"); tp.addTab ("panel5", panel5); tp.setEnabledAt(4,true); tp.setTitleAt(4,"社保");///设置其大小以及其选项卡的位置方向 tp.setPreferredSize (new Dimension (500,200)); tp.setTabPlacement (JTabbedPane.TOP);///设置选项卡在容器内的显示形式 tp.setTabLayoutPolicy (JTabbedPane.SCROLL_TAB_LAYOUT); frame.pack();//创建八个标签组件,将五个中间容器设置为流布局,并且将标签组件分别放入到其中 JLabel l1=new JLabel("工资状况"); JLabel l2=new JLabel("3000元/月"); JLabel l3=new JLabel("奖金状况"); JLabel l4=new JLabel("1500元/月"); JLabel l5=new JLabel("津贴状况"); JLabel l6=new JLabel("500元/月"); JLabel l7=new JLabel("社保状况"); JLabel l8=new JLabel("200元/月"); panel2.setLayout(new FlowLayout()); panel3.setLayout(new FlowLayout()); panel4.setLayout(new FlowLayout()); panel5.setLayout(new FlowLayout()); panel2.add(l1); panel2.add(l2); panel3.add(l3); panel3.add(l4); panel4.add(l5); panel4.add(l6); panel5.add(l7); panel5.add(l8); frame.pack(); }}
运行效果如下所示:
五 JInternalFrame
举例
创建两个JInternalFrame窗口,将这两个JInternalFrame窗口放到一个顶层容器的内容面板中。
import javax.swing.*;import java.awt.*;public class JInternalFrameDemo{ static final int WIDTH=300; static final int HEIGHT=150; public static void main(String[] args) { JFrame jf=new JFrame("测试程序"); jf.setSize(WIDTH,HEIGHT); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); JPanel contentPane=new JPanel();//创建一个中间容器,并且将之添加到顶层容器内,将之设置为流布局。 jf.setContentPane(contentPane); contentPane.setLayout(new FlowLayout()); JDesktopPane dp=new JDesktopPane();//创建一个虚拟桌面容器,将dp添加到以上创建的中间容器中 dp.setLayout(new FlowLayout()); contentPane.add(dp); JInternalFrame jif=new JInternalFrame("第一个窗口",true,true,true); //创建两个JIntenaFrame容器,并且创建六个标签组件,分别将它们添加到两个JInternaFrame容器内 JInternalFrame jif1=new JInternalFrame("第二个窗口",true,true,true); JLabel l1=new JLabel("这是我第一个窗口"); JLabel l2=new JLabel("这也是你第一个窗口"); JLabel l3=new JLabel("这同时是他第一个窗口"); JLabel l4=new JLabel("这是我第二个窗口"); JLabel l5=new JLabel("这也是你第二个窗口"); JLabel l6=new JLabel("这同时是他第二个窗口"); jif.setLayout(new FlowLayout()); jif1.setLayout(new FlowLayout()); jif.add(l1); jif.add(l2); jif.add(l3); jif1.add(l4); jif1.add(l5); jif1.add(l6); dp.add(jif); dp.add(jif1); jif.setVisible(true); jif1.setVisible(true); }}
运行效果如下所示:
六 JLayeredPane
举例
将两个普通按钮组件,放置到JLayeredPane容器中,再为这两个按钮组件分成两个不同的层次,这样的话,就当单击下面一个层的按钮组件,它就会被显示到上面一个层上来。
import javax.swing.*;import java.awt.*;import java.awt.event.*;public class JLayeredPaneDemo extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; static final int WIDTH=300; static final int HEIGHT=150; JLayeredPane lp=new JLayeredPane(); static JButton b1=new JButton("确定"); static JButton b2=new JButton("取消"); public test10() {///设置顶层容器的标题 super("测试窗口"); ///将新建的JLayeredPane放到顶层容器内 super.setContentPane(lp); b1.addActionListener(this); // 按钮事件 b2.addActionListener(this); lp.add(b1, new Integer(200)); lp.add(b2, new Integer(300)); b1.setBounds(new Rectangle(100, 100, 100, 100)); b1.setVisible(true); b2.setBounds(new Rectangle(50, 50, 100, 100)); b2.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(360, 260); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("确定")) { // 判断是哪个按钮的动作 lp.setLayer(b1, 300); // 重新设置组件层数 lp.setLayer(b2, 200); } else if (e.getActionCommand().equals("取消")) { lp.setLayer(b1, 200); lp.setLayer(b2, 300); } } public static void main(String args[]) { new JLayeredPaneDemo(); }}
运行效果如下所示:
- 【Java Swing探索之路系列】之二:Java Swing布局面板组件
- 【Java Swing探索之路系列】之三:Java Swing布局管理器组件
- 【Java Swing探索之路系列】之四:Java Swing用户界面组件(一)
- 【Java Swing探索之路系列】之一:Java Swing开篇
- java swing 之绝对布局
- Java swing 之边界布局
- java Swing布局管理器之FlowLayout布局
- java Swing布局管理器之BorderLayout布局
- java Swing布局管理之GridLayout布局
- java Swing布局管理器之CardLayout布局
- java Swing布局管理之GridBagLayout布局
- java Swing布局管理之BoxLayout布局
- Java Swing组件布局简介
- java swing 编程之网格布局
- java Swing组件之JSplitPane使用
- java swing 之 JScrollPane(滚动面板)的使用
- java swing 之 JScrollPane(滚动面板)的使用
- java swing 之 JScrollPane(滚动面板)的使用
- iOS开发拓展篇—应用之间的跳转和数据传递
- KMP算法
- svn常用命令
- mysql第三天 事务
- 词典查询
- 【Java Swing探索之路系列】之二:Java Swing布局面板组件
- iOS开发拓展篇-XMPP简单介绍
- tcl学习---windows下安装及运行环境(转&补充)
- UIApplication
- Android Intent.FLAG_NEW_TASK详解
- swt动态图表实例
- Rotate Array -- leetcode
- SVN设置pre-commit和pre-revprop-change钩子
- 测试团队的管理(一)