Java机关打点器在现实工程中的应用
当前位置:以往代写 > JAVA 教程 >Java机关打点器在现实工程中的应用
2019-06-14

Java机关打点器在现实工程中的应用

Java机关打点器在现实工程中的应用

副标题#e#

内容简介:Java的呈现是编程艺术和计较情况改变的功效,是Intenet成长的产品同时也是敦促Internet成长的动力。可是Java作为新的编程语言,有很多不与以往编程语言差异的处所。机关打点就是个中的一个,本文的目标在于先容如何将机关打点应用于现实工程中,而不是作为进修机关打点的参考资料。

机关打点对付浩瀚编程人员来说是一个较量新的观念,因为以前利用的多种编程东西已经很好地办理了这个问题,基础就不消措施员本身思量控件的机关问题,只需要简朴的拖拽就可。可是打仗到java之后,尤其是因为利用elipse等东西,就不得不当真地看待这个机关问题。并且我小我私家认为利用elipse这种东西开拓也有它的优点,利益之一就是就是可以使开拓者真正的在开拓进程中思考每一个类的布局,可以使代码越发的优秀,同时也使一个措施员更容易向一个措施设计人员转变。

由于本文的目标在于先容机关打点在现实工程中的应用,关于机关打点的根基内容,这里不再先容,并把读者定位于已经根基相识机关打点的利用要领的措施员,没有把握机关打点基本常识的读者可以参考sun提供的java api。

开始打仗机关打点的措施员大概会感受机关打点较量难于搪塞,增加了开拓人员对贸易逻辑思量之外的承担,这个简直是事实,可是远不如刚打仗不觉机关打点的人想象得那么难。因为从工程角度思量的话,一个用户界面的并非十分的巨大,虽然我是指的一般的数据库应用措施,界面极其巨大的东西类软件。一般来说数据库应用措施的主要应用在于对数据库的维护,追念我们以前从事过的工程,用户界面根基上由菜单,数据列表,数据编辑组件,一组用来提交用户事情的按钮构成。以下内容就以上述组件作为一个数据库应用措施的用户界面为基本展开接头。

首先我们把这些窗体内容分组,然后把每一组组件放在一个容器中(这是我以往的开拓进程中处理惩罚用户界面的要领,小我私家认为可以简化用户界面的开拓),这样我们就把以上组件分别为两组(菜单不再机关思量之内)即数据组件和按钮,然后我们在把数据组件分成数据列表,数据编辑组件分成两组,将以上个组别离安排在各自的容器中,利用措施表达出如下:

JFrame sampleFrame = new JFrame("Sample Frame for Manager Layout");
JPanel panelDataContent = new JPanel(); // 数据组件容器
JPanel panelDataList = new JPanel(); // 数据列表容器
JList listData = new JList();
/*
注释1 这里应该是利用机关打点把listData放在panelDataList上
*/
JPanel panelDataEditor = new JPanel(); // 数据编辑组件容器
JTextField editData1 = new JTextField();
//...... // some other edit controls
/*
注释2 这里应该是利用机关打点把数据编辑组件放在panelDataEditor上
*/
/*
注释3 这里应该是利用机关打点器把panelDataList和panelDataEditor放在
panelDataContent上
*/
JPanel panelButton = new JPanel(); // 按钮容器
JButton buttonModify = new JButton("Modify");
//...... //some other buttons
/*
注释4 这里应该是利用机关打点器把按钮放在panelButton上
*/
Container c = sampleFrame.getContentPane();
/*
注释5 这里应该是利用机关打点器把panelButton和panelDataContent放在c上
*/

这样的话,我们在开始思量机关的时候就可以思量把一个窗体分为两部门。这样我们就有两种布局可以选择,上下布局和阁下布局。下面我们来先思量上下布局。

以我小我私家的审美概念和便利性角度的思量,我会选择把panelButton放在下面,同时我们应该思量到panelDataContent应该占据除了panelButton之外所有sampleFrame空间,就像是在利用Delphi是我们将一个TPanel的实例的align配置成alClient。这样BorderLayout就成为c的机关打点器。因为在BorderLayout中,假如利用BorderLayout.

CENTER的方法则到达这种目标。那么panelButton则应该利用BorderLayout.SOURTH的方法机关。于是发生了一下代码

c.setLayout(new BorderLayout());//这一句可以省略,因为frame的默认机关是
Borderlayout。
c.add(panelDataContent,BorderLayout.CENTER);
c.add(panelButton,BorderLayout.SOUTH);

我们只需把以上的代码取代注释5,就实现了第一次分组的机关。接着我们是用同样的机关打点来实现第二次分组,也就是数据组件的分组。

panelDataContent.setLayout(new BorderLayout());//不行省略,JPanel的默认机关是
FlawLayout。
panelDataContent.add(panelDataList,BorderLayout.CENTER);
panelDataContent.add(panelDataEditor,BorderLayout.SOUTH);

将以上代码取代注释3的位置即可。


#p#副标题#e#

下面我们来别离处理惩罚三个JPanel(panelDataList,panelDataEditor,panelButton)上的控件的机关。

#p#分页标题#e#

在处理惩罚这个问题之前我也展现(不是表明)一点java机关打点对空间巨细的影响,这里我不消“表明”的原因在于我只是相识到这一点,而没有深入的研究道理安在。FlowLayout保持由他打点的容器上的控件的巨细(应该是preferred size),GridLayout从来不剖析这些空间的巨细,只是把控件完全填充由GridLayout分另外格子可是我们应该留意到GridLayout讲一个容器分别成等面积巨细的格子,一次不适合我们以上的应用)。而BorderLayout对空间的节制介于以上两者之间。BorderLayout使放在NORTH和SOURTH的控件保持符合的高度,是安排在EAST和WEST的控件保持符合的宽度,使放在CENTER的控件占据剩余的所有空间。

这样一来对付dataList的安排我们有两种一种是利用BorderLayout机关打点,把dataList放在BorderLayout.CENTER的位置,一种是利用GridLayout把panelDataList分别一个格子。事实也是如此。开拓者可以按照本身的爱好从这两种机关中选出一种。

//panelDataList.setLayout(new BorderLayout());
//panelDataList.add(listData,BorderLayout.CENTER);
panelDataList.setLayout(new GridLayout(1,1));
panelDataList.add(listData);

至于panelButton的机关名目因该选择FlowLayout,也许有的读者会提出为什么不选择GridLayout,因为假如利用这种机关要领,地域可以担保按钮全部在一排,可是当用户改变窗体巨细时,会呈现按钮过长或过短的景象。可是利用FlowLayout的缺点在于用户使宽度小于按钮的宽度和时,会使一些按钮不行见。

panelButton.setLayout(new FlowLayout());//可以省略。因为FlowLayout时JPanel的

默认机关方法

panelButton.add(buttonNew);

对付panelDataEditor的机关打点,需要按照差异的环境来举办判定处理惩罚,而我认为最佳的选择时GridBagLayout。虽然假如排放的空间相当简朴,利用GridBagLayout反而浮现不出它的优越性。由于这一部门的随机性,这里不再先容。一下使我在写这样文章时的全部代码,提供应各人以供参考。

/*
* Created on 2003-7-14
*/
import javax.swing.*;
import java.awt.*;
/**
* @author idilent
* Supporting the paper which name is "java机关打点器在现实工程中的应用"
*/
public class LayoutSample {
public static void main(String[] args) {
JFrame sampleFrame = new JFrame("Sample Frame for Manager
Layout");
JPanel panelDataContent = new JPanel(); // 数据组件容器
JPanel panelDataList = new JPanel(); // 数据列表容器
JList listData = new JList();
//这里可以利用两种方案
//panelDataList.setLayout(new BorderLayout());
//panelDataList.add(listData,BorderLayout.CENTER);
panelDataList.setLayout(new GridLayout(1,1));
panelDataList.add(listData);
/*
注释1 这里应该是利用机关打点把listData放在panelDataList上
*/
JPanel panelDataEditor = new JPanel(); // 数据编辑组件容器
JTextField editData1 = new JTextField(20);
panelDataEditor.add(editData1);
// ...... // some other edit controls
/*
注释2 这里应该是利用机关打点把数据编辑组件放在panelDataEditor

*/
/*
注释3 这里应该是利用机关打点器把panelDataList和
panelDataEditor放在
panelDataContent上
*/
panelDataContent.setLayout(new BorderLayout());//不行省略,
JPanel的默认机关是FlawLayout。
panelDataContent.add(panelDataList,BorderLayout.CENTER);
panelDataContent.add(panelDataEditor,BorderLayout.SOUTH);
JPanel panelButton = new JPanel(); // 按钮容器
JButton buttonNew = new JButton("New");
JButton buttonModify = new JButton("Modify");
JButton buttonDelete = new JButton("Delete");
JButton buttonSave = new JButton("Save");
// ...... //some other buttons
/*
注释4 这里应该是利用机关打点器把按钮放在panelButton上
*/
panelButton.add(buttonNew);
panelButton.add(buttonModify);
panelButton.add(buttonDelete);
panelButton.add(buttonSave);
Container c = sampleFrame.getContentPane();
/*
注释5 这里应该是利用机关打点器把panelButton和panelDataContent
放在c上
*/
c.setLayout(new BorderLayout());
//这一句可以省略,因为frame的默认机关是Borderlayout。
c.add(panelDataContent,BorderLayout.CENTER);
c.add(panelButton,BorderLayout.SOUTH);
sampleFrame.setSize(300,300);//不利用pack()的原因是,使JList
显示
sampleFrame.show();
}
}

    关键字:

在线提交作业