热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaSwing绝对布局如何不用多面板而实现板块化设计

JavaSwing绝对布局如何不用多面板而实现



Java Swing 绝对布局 如何不用多面板 而实现板块化设计

  • 成员属性
  • 调用配置模块
    • BasicInit
    • UpInit
    • midInit
    • downInit
  • 重点介绍 initBtn
    • JLabel标签和输入框的初始化
    • 那本次的分享,其实就到这边来,最后在放几张效果图,有兴趣的可以看下
  • 自我感觉还算nice,如果觉得还行的话点个赞吧

成员属性

这里的成员属性主要看下 JLable部分,和 JButton部分,至于 JTable部分还有其他的 DefaultTableModel那个是表格的部分,不是本文的重点,可以忽略,窗体和监听也不重要,因为本文主要介绍的是布局的方便

/*----------------------------Member---------------------------*/
private InformationFrame systemFrame;//窗口

private JLabel page = new JLabel();//页码

private JButton addBtn = new JButton("添加");
private JButton deleteBtn = new JButton("删除");
private JButton modifyBtn = new JButton("修改");
private JButton prePageBtn = new JButton("上一页");
private JButton nextPageBtn = new JButton("下一页");

private JButton searchBtn = new JButton("搜索");
private JLabel countryLabel = new JLabel("国家:");
private JTextField countryTextFile = new JTextField();

private SystemBtnActionListen btnListen;
private DefaultTableModel novelTableModel = new DefaultTableModel();
private JTable novelTable = new JTable();//表格
private JScrollPane scrollPane = new JScrollPane(novelTable);//滚动面板
//页码显示,其他部分控制
private int totalPage = 1;//总页数
private int currentPage = 1;//当前页数
private int informatiOnCount= 0;//总信息量
private int everyPage = 10;//每页几条
private String currentCountry = "";//当前搜索的国家

调用配置模块

总共有四个部分的配置,第一个是面板的基本配置,第二个是上面部分按钮和搜索的配置,中间是表格的配置,下面是翻页按钮的配置,这里给定的两个数值,其实就是在布局时根据位可进行调整。坐标点为板块的左上角坐标

public InformationPanel(InformationFrame systemFrame) {
this.systemFrame = systemFrame;//传入窗口
basicInit();//基本配置
upInit(20,50);//上面部分初始化
midInit(10, 100);//中间部分初始化
downInit(350, 620);//下面部分初始化
}

BasicInit

面板的基本配置,是将面板配置大小,配置绝对布局,最后一行是创建监听。

/**
*
*
* @describe 基本配置
*/
private void basicInit()
{
setSize(PanelSize.SYSTEM_WIDTH, PanelSize.SYSTEM_HEITH);//设置大小
setLayout(null);//设置绝对布局
btnListen = new SystemBtnActionListen(systemFrame);//按钮监听初始化
}

UpInit

按钮部分和搜索部分板块的代码,传入的参数是这些按钮总体所在的位置

这个部分的 initBtn 是初始化按钮的方法,这样设计的目的是由于一个工程或说一个面板都会有很多的按钮需要初始化,所以我把他封装成一个方法,每次需要初始化我只需要传参就可以。传哪些参数会在后面的方法代码部分进行介绍。

unitInt方法是初始化一个标签加一个输入框的位置,后面同样会具体介绍

/**
*
* @param x 面板基点
* @param y
* @describe 上面部分初始化,传入该板块位置
*/
private void upInit(int x,int y)
{
//初始化按钮
initBtn(addBtn,"add",0,0,x,y);
initBtn(deleteBtn,"delete",UnitSize.BTN_WIDTH+UnitSize.BTN_SPACE,0,x,y);
initBtn(modifyBtn,"modify",2*(UnitSize.BTN_WIDTH+UnitSize.BTN_SPACE),0,x,y);
//搜索部分
unitInit(countryLabel, countryTextFile, 3*(UnitSize.BTN_WIDTH+UnitSize.BTN_SPACE)+100, y);
initBtn(searchBtn,"search",3*(UnitSize.BTN_WIDTH+UnitSize.BTN_SPACE)+280+100,0,x,y);
}

midInit

/**
*
* @param x 面板基点
* @param y
* @describe 中间部分初始化,传入该板块位置
*/
private void midInit(int x,int y)
{
scrollPane.setBounds(x, y, PanelSize.SYSTEM_WIDTH-2*x, 500);//设置滚动面板大小
novelTable.setModel(novelTableModel);//传入tablemodel
add(scrollPane);//添加滚动面板
columnInit(novelTableModel);//添加列名
}

downInit

/**
*
* @param x 面板基点
* @param y
* @describe 下面部分初始化,传入该板块位置
*/
private void downInit(int x,int y)
{
initBtn(prePageBtn, "prePage", 0, 0, x, y);
int pageWid = 100;
page.setBounds(x+UnitSize.BTN_WIDTH, y, pageWid, UnitSize.BTN_HEITH);
page.setFont(new Font(null,Font.BOLD,18));
page.setHorizontalAlignment(JLabel.CENTER);
add(page);
//new PageViewThread(page,novelTableModel).start();//开启页码更新
initBtn(nextPageBtn, "nextPage", UnitSize.BTN_WIDTH+pageWid,0, x, y);
}

重点介绍 initBtn

这里第一个肯定是传进要初始化的按钮,第二个参数是command,当点击时标识是那个按钮被点击,btnX,btnY是按钮在相对面板基点的位置,后面两个参数是面板基点位置,只要把传进板块的基点位置直接传过来就行了

/**
*
* @param btn
* @param command
* @param btnX 按钮在板块中的位置
* @param btnY
* @param x 面板基点
* @param y
* @describe 按钮初始化
*/
private void initBtn(JButton btn,String command,int btnX,int btnY,int x,int y)
{
btn.setLocation(btnX+x, btnY+y);//设置按钮位置
btn.setSize(UnitSize.BTN_WIDTH, UnitSize.BTN_HEITH);//设置大小
btn.setFont(new Font(null,Font.BOLD,18));//设置字体
btn.setActionCommand(command);//设置点击命令
btn.addActionListener(btnListen);//添加监听
add(btn);//添加到面板
}

JLabel标签和输入框的初始化

为什么把这两个放在一起,当然是因为输入框,正常情况下,都会告知这个输入框,或者下拉框是选择什么,因此把这两者放在一起,仔细看,传参时,第二个参数既不是JComboBox也不是JTextFile,而是他们的父类JComponent,这样更通用,可以应用于输入框,也可以是下拉框或者其他。

/**
*
* @param label
* @param component
* @param x
* @param y
* @describe 初始化行
*/
private void unitInit(JLabel label ,JComponent component,int x ,int y)
{
int width = 80;//lebel
int height = 40;
label.setBounds(x, y, width, height);//设置位置
label.setFont(new Font(null,Font.BOLD,18));//设置字体
add(label);
component.setBounds(x+width, y, 200, height);//设置位置
component.setFont(new Font(null,Font.BOLD,18));//设置字体
add(component);
}

那本次的分享,其实就到这边来,最后在放几张效果图,有兴趣的可以看下

如图可以看到,我将其分为这三个板块,如果你想更改他们的位置,只需要更改极坐标,就可以移动整个板块。

Java Swing 绝对布局 如何不用多面板 而实现板块化设计 - 文章图片

自我感觉还算nice,如果觉得还行的话点个赞吧

推荐阅读
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • ScrollView嵌套Collectionview无痕衔接四向滚动,支持自定义TitleView
    本文介绍了如何实现ScrollView嵌套Collectionview无痕衔接四向滚动,并支持自定义TitleView。通过使用MainScrollView作为最底层,headView作为上部分,TitleView作为中间部分,Collectionview作为下面部分,实现了滚动效果。同时还介绍了使用runtime拦截_notifyDidScroll方法来实现滚动代理的方法。具体实现代码可以在github地址中找到。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • Java图形化计算器设计与实现
    本文介绍了使用Java编程语言设计和实现图形化计算器的方法。通过使用swing包和awt包中的组件,作者创建了一个具有按钮监听器和自定义界面尺寸和布局的计算器。文章还分享了在图形化界面设计中的一些心得体会。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
author-avatar
itsima
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有