JAVA Layout
/**
* baidu :组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上?
* 实际上在JFrame上可直接添加Jbutton
*
* BorderLayout
FlowLayout
GridLayout
GridBagLayout
CardLayout
BoxLayout
*
* GridBagLayout稍复杂,主要看BoxLayout、BorderLayout
*/
package layoutmanager;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/**
*
* @author Albert Li
*/
public class LayoutManager {
JFrame mJFrame = new JFrame();
public void InitGridLayout(){
mJFrame.setTitle("GridLayout");
mJFrame.setLayout(new GridLayout(3,3,5,5));
for(int i=1; i<10; i++){
JButton mJButton = new JButton(String.valueOf(i));
mJFrame.add(mJButton);
}
mJFrame.setBounds(300, 300, 300, 300);
mJFrame.setVisible(true);
mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void InitFlowLayout(){
mJFrame.setTitle("FlowLayout");
mJFrame.setLayout(new FlowLayout(5, 10, 10));
for(int i=1; i<10; i++){
JButton mJButton = new JButton(String.valueOf(i));
mJFrame.add(mJButton);
}
mJFrame.setBounds(300, 300, 300, 300);
mJFrame.setVisible(true);
mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
Panel pnlCommandArea = new Panel();
Panel pnlDisplayArea = new Panel();
CardLayout mCardLayout = new CardLayout();
JButton mjButton = new JButton("Command");
public void InitCardLayout(){
mJFrame.setTitle("CardLayout");
mJFrame.setLayout(new BorderLayout(10,10));
pnlDisplayArea.setLayout(mCardLayout);
Panel pnlFirst = new Panel();
Panel pnlSed = new Panel();
Panel pnlThird = new Panel();
pnlFirst.add(new Label("first"));
pnlSed.add(new Label("second"));
pnlThird.add(new Label("third"));
pnlFirst.add(new JButton("button 1"));
pnlSed.add(new JButton("button 2"));
pnlThird.add(new JButton("button 3"));
pnlDisplayArea.add(pnlFirst,"Cardlayout_first");
pnlDisplayArea.add(pnlSed,"Cardlayout_sed");
pnlDisplayArea.add(pnlThird,"Cardlayout_Third");
((CardLayout)pnlDisplayArea.getLayout()).show(pnlDisplayArea,"CardLayout_first");
mjButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
// ProcessAction(e);
mCardLayout.next(pnlDisplayArea);
// ((CardLayout)pnlDisplayArea.getLayout()).show(pnlDisplayArea, "Cardlayout_sed");
}
});
pnlCommandArea.add(mjButton);
mJFrame.add(pnlCommandArea,BorderLayout.NORTH);
mJFrame.add(pnlDisplayArea,BorderLayout.CENTER);
mJFrame.setBounds(300, 300, 300, 300);
mJFrame.setVisible(true);
mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//将组件添加到Box,此时且不需要设置布局,由新建Box时设置水平还是垂直
public void InitBoxLayout(){
mJFrame.setTitle("BoxLayout");
//不需要下面这句话,错误
//mJFrame.setLayout(new BoxLayout(mJFrame,BoxLayout.X_AXIS ));
Box mBox =Box.createHorizontalBox();
for(int i=1; i<15; i++){
JButton mJButton = new JButton(String.valueOf(i));
mBox.add(mJButton);
}
mJFrame.add(mBox);
mJFrame.setBounds(300, 300, 300, 300);
mJFrame.pack();
mJFrame.setVisible(true);
mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//将组件直接添加到Panel,需先设置panel 的布局(为BoxPanel , 垂直还是水平)
//我坐在窗前,有时候还可以看到鸟飞过,面对不过空无一物的天空,底下是城市的边缘,很矮很矮的地方。
public void boxLayout(){
Panel mPanel = new Panel();
BoxLayout mBoxLayout = new BoxLayout(mPanel, BoxLayout.Y_AXIS);
mPanel.setLayout(mBoxLayout);
for(int i=1; i<15; i++){
JButton mJButton = new JButton(String.valueOf(i));
mPanel.add(mJButton);
}
mJFrame.add(mPanel);
mJFrame.setBounds(300, 300, 300, 300);
mJFrame.pack();
mJFrame.setVisible(true);
mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void BoxTopPanel() {
JPanel topPanel = new JPanel();
String[] columnName = { "姓名", "性别", "单位", "参加项目", "备注" };
String[][] rowData = { { "张三", "男", "计算机系", "100 米 ,200 米", "" },
{ "李四", "男", "化学系", "100 米,铅球", "" },
{ "李四", "男", "化学系", "100 米,铅球", "" },
{ "李四", "男", "化学系", "100 米,铅球", "" },
{ "李四", "男", "化学系", "100 米,铅球", "" },
};
// 创建表格
JTable table = new JTable(new DefaultTableModel(rowData, columnName));
// 创建包含表格的滚动窗格
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
// 定义 topPanel 的布局为 BoxLayout,BoxLayout 为垂直排列
topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.Y_AXIS));
// 先加入一个不可见的 Strut,从而使 topPanel 对顶部留出一定的空间
topPanel.add(Box.createVerticalStrut(10));
// 加入包含表格的滚动窗格
topPanel.add(scrollPane);
// 再加入一个不可见的 Strut,从而使 topPanel 和 middlePanel 之间留出一定的空间
topPanel.add(Box.createVerticalStrut(10));
mJFrame.add(topPanel);
mJFrame.setBounds(300, 300, 300, 150);
//mJFrame.pack();
mJFrame.setVisible(true);
mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void InitGridBagLayout(){
GridBagLayout mGridBagLayout = new GridBagLayout();
mJFrame.setLayout(mGridBagLayout);
GridBagConstraints mGridBagConstraints = new GridBagConstraints();
mGridBagConstraints.fill = GridBagConstraints.BOTH;
mGridBagConstraints.gridx = 0;
mGridBagConstraints.gridy = 0;
mGridBagConstraints.gridheight = 2;
mGridBagConstraints.gridwidth = 1;
mGridBagConstraints.anchor = GridBagConstraints.NORTH;
mGridBagConstraints.weightx = 0;
mGridBagConstraints.weighty = 0;
JButton btn = new JButton("button 1");
mGridBagLayout.setConstraints(btn, mGridBagConstraints);
mJFrame.add(btn);
mGridBagConstraints.fill = GridBagConstraints.BOTH;
mGridBagConstraints.gridx = 300;
mGridBagConstraints.gridy = 300;
mGridBagConstraints.gridheight = GridBagConstraints.REMAINDER;
mGridBagConstraints.gridwidth = 10;
mGridBagConstraints.anchor = GridBagConstraints.SOUTHEAST;
mGridBagConstraints.weightx = 0;
mGridBagConstraints.weighty = 0;
btn = new JButton("button 2");
mGridBagLayout.setConstraints(btn, mGridBagConstraints);
mJFrame.add(btn);
mJFrame.setBounds(300, 300, 300, 300);
// mJFrame.pack();
mJFrame.setVisible(true);
mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void ProcessAction(ActionEvent e){
if(((Button)e.getSource()).equals(mjButton)){
mCardLayout.next(pnlDisplayArea);
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
LayoutManager mLayoutManager = new LayoutManager();
// mLayoutManager.InitGridLayout();
//mLayoutManager.InitFlowLayout();
//mLayoutManager.InitCardLayout();//BorderLayout
//
// mLayoutManager.InitBoxLayout();
//mLayoutManager.InitGridBagLayout();
// mLayoutManager.boxLayout();
mLayoutManager.BoxTopPanel();
}
}
JAVA Layout的更多相关文章
- java layout 表格项增加、删除、修改
实现的内容为:点击表格某项,再点击删除钮,可实现删除点击表格某项,再点击编辑按钮,可实现内容改变点击添加按钮,可实现向表格中添加内容 总结:总的来说中间遇到了很多困难,但是都一步步的解决了. pack ...
- Java语法笔记
目录 知识点 不支持 恶心事 与C#的区别 组件 学习资料 母版页 知识点 类 静态方法,即可以在类上被调用,也可以在实例对象上被调用. Java类 先执行静态构造函数,再执行静态方法或静态字段,所以 ...
- Google Map API v2 步步为营(一) ----- 初见地图
官方文档:https://developers.google.com/maps/documentation/android/start?hl=zh-CN 先谷歌后百度.使用google的api基本上按 ...
- Android Developers:两个视图渐变
淡入淡出动画(也被称为渐隐)逐渐淡出一个UI组件,同时淡入另一个.这个动画在你想在你的应用程序中切换内容或者是视图的情况下非常有用.淡入淡出非常微妙并短,但支持从一个屏幕到下一个屏幕流畅的过渡.当你不 ...
- 【Android Developers Training】 73. 布局变化的动画
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 72. 缩放一个视图
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 70. 使用ViewPager实现屏幕滑动
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 69. 视图切换的淡入淡出效果
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Swing-GridBagLayout用法-入门
注:本文内容转自:Java Layout总结-GridBagLayout.内容根据笔者理解稍有整理. GridBagLayout布局管理器:这就是最复杂的一个布局管理器了,网格包布局.在此布局中,组件 ...
随机推荐
- ODI 系列学习--整体架构概念
ODI 系列学习--整体架构概念 ODI整体架构没有Oracle Database复杂,因为它属于程序功能的使用,更多是程序开发和配置的工作,当然ODI的优化涉及到很多数据库优化的工作,从整体架构入手 ...
- USB 3.1 Type-C
[時報記者任珮云台北報導]微軟.英特爾.蘋果今年將新款PC介面升級至USB 3.1規格,Wintel陣營今年新款PC產品亦將全面採用USB 3.1介面,里昂證出具最新的報告指出,在新趨勢帶動下,台廠的 ...
- 可以使用QT给龙芯开发软件
直接apt-get install libqt5core5a就有了,也许是一个很好的小众市场机会呢 至于系统,可以使用debian mips https://www.debian.org/devel/ ...
- 谈谈ILDasm的功能限制与解除
原文:谈谈ILDasm的功能限制与解除 首先,我在此申明,此文并不是教别人突破限制,我们只是用学习的眼光看问题 大家都知道ILDasm是.NET程序的反编译工具,它是由Microsoft提供的反编译工 ...
- docker 创建新的镜像到私有仓库
docker:/data# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd6db4127a9e centos &q ...
- Mobile Service更新和 Notification Hub 对Android的支持
本周,我们要推出一些更新,使移动服务成为移动应用程序更强大.更灵活的后端,同时推出一个与移动服务或网站结合使用的免费 20MB SQL 数据库,并且将支持通过Notification Hub中的 GC ...
- 第52周四ApplicationContext
ApplicationContext的中文意思是"应用前后关系"应用上下文即容器,它继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在国际化支持.资 ...
- linux ssh 不用密码自动登录的几种方法
1. 自动ssh/scp方法== A为本地主机(即用于控制其他主机的机器) ;B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;A和B的系统都是Linux 在A上运 ...
- strcpy()、memcpy()、memmove()、memset()的内部实现
一直想知道 strcpy().memcpy().memmove().memset()的内部实现 strcpy(), 字符串拷贝. char *strcpy(char *strDest, const c ...
- .net dropdownlist 動態顯示,指定字段
dropdownlist 動態顯示,指定字段 this.ddlPermission.Items.Clear(); ,new ListItem("請選擇","") ...