Java 图形用户界面设计Word文档格式.docx

上传人:b****8 文档编号:22746995 上传时间:2023-02-05 格式:DOCX 页数:31 大小:117.55KB
下载 相关 举报
Java 图形用户界面设计Word文档格式.docx_第1页
第1页 / 共31页
Java 图形用户界面设计Word文档格式.docx_第2页
第2页 / 共31页
Java 图形用户界面设计Word文档格式.docx_第3页
第3页 / 共31页
Java 图形用户界面设计Word文档格式.docx_第4页
第4页 / 共31页
Java 图形用户界面设计Word文档格式.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

Java 图形用户界面设计Word文档格式.docx

《Java 图形用户界面设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《Java 图形用户界面设计Word文档格式.docx(31页珍藏版)》请在冰豆网上搜索。

Java 图形用户界面设计Word文档格式.docx

我们前面说过,Java中的容器类(Container),它们只管加入组件(Component),也就是说,它只使用自己的add()方法向自己内部加入组件。

同时他记录这些加入其内部的组件的个数,可以通过container.getComponentCount()方法类获得组件的数目,通过container.getComponent(i)来获得相应组件的句柄。

然后LayoutManager类就可以通过这些信息来实际布局其中的组件了。

Java已经为我们提供了几个常用的布局管理器类,例如:

FlowLayout、BorderLayout、GridLayout、GridBagLayout等。

下面列表说明它们的布局特点:

特点

java.awt

CardLayout

将组件象卡片一样放置在容器中,在某一时刻只有一个组件可见

FlowLayout

将组件按从左到右而后从上到下的顺序依次排列,一行不能放完则折到下一行继续放置

GridLayout

形似一个无框线的表格,每个单元格中放一个组件

BorderLayout

将组件按东、南、西、北、中五个区域放置,每个方向最多只能放置一个组件

GridBagLayout

非常灵活,可指定组件放置的具体位置及占用单元格数目

Javax.swing

BoxLayout

就像整齐放置的一行或者一列盒子,每个盒子中一个组件

SpringLayout

根据一组约束条件放置子组件

ScrollPaneLayout

专用于JScrollPane,含一个Viewport,一个行头、一个列头、两个滚动条和四个角组件

OverlayLayout

以彼此覆盖的形式叠置组件

ViewportLayout

JViewport的默认布局管理器

事实上,在大多数情况下,综合运用好这些布局管理器已可以满足需要。

当然对于特殊的具体应用,我们可以通过实现LayoutManager或LayoutManager2接口来定义自己的布局管理器。

下面我们通过几个实例来了解几个常用的布局管理器的使用方法。

GUI设计应用实例

3.1FlowLayout/GridLayout/BorderLayout的应用实例

3.1.1应用背景

假设我们要编写一个简单的计算器JApplet,其基本界面如下:

 

3.1.2解决方法

通过其界面要求可知,我们可以通过将"

BackSpace"

和"

Clear"

JButton放置在一个JPanel

(1)中,采用FlowLayout布局;

将显示结果的JTextField和该JPanel一起放置到另外一个JPanel

(2),采用GridLayout布局;

而将其它的JButton则放置在另外一个JPanel(3)中,采用GridLayout布局;

再将JPanel

(2)和JPanel(3)加入该JApplet,即可实现界面需求。

具体实现方法如下:

/**以FlowLayout布局JPanel

(1)*/

JPanelp1=newJPanel(newFlowLayout());

//默认组件从居中开始

//加入"

JButton

p1.add(backButton);

p1.add(clearButton);

/**以GridLayout布局JPanel

(2)*/

JPanelp2=newJPanel(newGridLayout(2,1));

//放置2行,每行1个组件

//加入显示结果的JTextField和JPanel

(1)

p2.add(displayField);

p2.add(p1);

/**以GridLayout布局JPanel(3)*/

JPanelp3=newJPanel(newGridLayout(4,5));

//放置4行,每行5个组件

StringbuttonStr="

789/A456*B123-C0.D+="

;

for(inti=0;

i<

buttonStr.length();

i++)

this.addButton(p3,buttonStr.substring(i,i+1));

//addButton方法

privatevoidaddButton(Containerc,Strings)

{

JButtonb=newJButton(s);

if(s.equals("

A"

))

b.setText("

sqrt"

);

elseif(s.equals("

B"

1/x"

C"

%"

D"

+/-"

b.setForeground(Color.blue);

c.add(b);

b.addActionListener(this);

}

/**以BorderLayout布局JApplet*/

this.setLayout(newBorderLayout());

this.add(p2,"

North"

this.add(p3,"

Center"

这样,就一切OK啦。

具体的实现代码可参见附件中的CalculateApplet.java文件。

3.2带工具栏和状态栏的GridLayout/BorderLayout应用实例

3.2.1实际问题

在很多情况下我们需要动态设置工具栏和状态栏,看下面的应用实例:

以上是在视图的工具栏和状态栏都被复选的时候,以下分别为某一个没选或都未选的情况。

3.2.2解决方法

/**工具栏JToolBar采用从左开始的FlowLayout布局*/

JToolBartoolBar=newJToolBar();

toolBar.setBorderPainted(false);

//不画边界

toolBar.setLayout(newFlowLayout(FlowLayout.LEFT));

/**窗体采用动态的BorderLayout布局,通过获取工具栏或状态栏的复选标记进行界面的动态调整*/

JSplitPanesplitPane=newJSplitPane();

splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);

//设置统计窗口分隔条的方向

splitPane.setDividerLocation(300);

//设置分隔条的位置

splitPane.setOneTouchExpandable(true);

JCheckBoxMenuItemtoolBarItem=newJCheckBoxMenuItem("

工具栏(T)"

true);

JLabelstatusLabel=newJLabel("

当前统计目标:

"

JCheckBoxMenuItemstatusBarItem=newJCheckBoxMenuItem("

状态栏(S)"

/**设置系统窗体布局并动态设置工具栏和状态栏*/

privatevoidsetLayout()

if(toolBarItem.getState()&

&

'

statusBarItem.getState())

this.getContentPane().add(BorderLayout.NORTH,toolBar);

this.getContentPane().add(BorderLayout.CENTER,splitPane);

this.getContentPane().add(BorderLayout.SOUTH,statusLabel);

elseif(toolBarItem.getState()&

!

statusBarItem.getState())

this.getContentPane().remove(statusLabel);

elseif(statusBarItem.getState()&

toolBarItem.getState())

this.getContentPane().remove(toolBar);

elseif(!

toolBarItem.getState()&

this.show();

//添加或移去组件后刷新界面

通过该方法即可实现界面的动态刷新与调整。

3.3GridBagLayout应用实例

3.3.1实际问题

GridBagLayout是JavaAPI提供的一个较复杂的布局管理器,利用好它可以解决许多实际编程中的令人烦恼的界面设计问题。

看下面的界面应用实例:

3.3.2解决方法

这个界面的设计比较复杂,涉及多个标签域(JLabel)、文本域(JTextField、JTextArea),且标签域的大小还不一样,如附件标签;

并当窗体缩放时,标签域的大小应不改变,而文本域则必须自适应缩放。

如何来实现呢?

请看下面的代码:

(工具栏的实现不再赘述)

/**系统的界面布局实现*/

GridBagConstraintsgridBag=newGridBagConstraints();

gridBag.fill=GridBagConstraints.HORIZONTAL;

//以水平填充方式布局

gridBag.weightx=0;

//行长不变

gridBag.weighty=0;

//列高不变

fromLabel.setForeground(Color.blue);

fromLabel.setFont(newFont("

Alias"

Font.BOLD,16));

this.add(fromLabel,gridBag,0,1,1,1);

//指定发信人标签位置

receiveLabel.setForeground(Color.blue);

receiveLabel.setFont(newFont("

this.add(receiveLabel,gridBag,0,2,1,1);

//指定收信人标签位置及大小

ccLabel.setForeground(Color.blue);

ccLabel.setFont(newFont("

this.add(ccLabel,gridBag,0,3,1,1);

//指定抄送人标签位置及大小

subjectLabel.setForeground(Color.blue);

subjectLabel.setFont(newFont("

his.add(subjectLabel,gridBag,0,4,1,1);

//指定主题标签位置及大小

accessoryLabel.setForeground(Color.blue);

accessoryLabel.setFont(newFont("

this.add(accessoryLabel,gridBag,0,5,1,1);

//指定附件标签位置及大小

gridBag.weightx=100;

//行自适应缩放

//列高不变

fromField.setText("

admin@"

this.add(fromField,gridBag,1,1,2,1);

//指定发信人文本域(JTextField)位置及大小

this.add(receiveField,gridBag,1,2,2,1);

//指定收信人文本域(JTextField)位置及大小

this.add(ccField,gridBag,1,3,2,1);

//指定抄送人文本域(JTextField)位置及大小

this.add(subjectField,gridBag,1,4,2,1);

//指定主题文本域(JTextField)位置及大小

accessoryArea.setEditable(false);

//设置不显示水平滚动条(该JTextArea置于JScrollPane中)

accessoryScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

this.add(accessoryScroll,gridBag,1,5,2,1);

//指定附件文本区(JTextArea)位置及大小

gridBag.fill=GridBagConstraints.BOTH;

//采用全填充方式布局

//行自适应缩放

gridBag.weighty=100;

//列自适应缩放

mailArea.setBackground(Color.blue);

mailArea.setForeground(Color.yellow);

mailArea.setTabSize(4);

//指定信件主体区(JTextArea)的位置及大小。

(该JTextArea也置于JScrollPane中)

this.add(scroll,gridBag,0,6,3,1);

在上面用到一个方法add(),这个方法是自己定义的:

privatevoidadd(Componentc,GridBagConstraintsgbc,intx,inty,intw,inth)

gbc.gridx=x;

gbc.gridy=y;

gbc.gridheight=h;

gbc.gridwidth=w;

this.getContentPane().add(c,gbc);

在用到GridBagLayout布局管理器的组件添加方法中,都可以重用它。

事实上,你还可以在方法最前面加一个参数Containercn,而将方法中的this相应的改为cn,就可以通用于所有需要使用GridBagLayout进行布局管理的容器中。

在下面的复杂例程中我们就会用到。

3.4综合多个布局的复杂应用实例

3.4.1实际问题

请看下面的实际应用界面要求:

(图3.4-1)

(图3.4-2)

(图3.4-3)

在这个具体应用中,底部的JButton组是确定的,但JTabbedPane的每一个选项都不同,如何实现呢?

3.4.2解决方案

首先我们可以采用BorderLayout确定主题对话框的布局方式,实现方法如下:

JTabbedPanedbTabPane=newJTabbedPane();

……//下面需要用到的JButton等组件变量定义(或声明)

privatevoidinitLayout()

initDBTabPane();

//初始化JTabbedPane:

DBTabPane组件

this.getContentPane().add(BorderLayout.CENTER,dbTabPane);

//将JTabbedPane组件:

dbTabPane布局于JDialog对话框的中间

initButtonPanel();

//初始化JPanel:

ButtonPanel组件

this.getContentPane().add(BorderLayout.SOUTH,buttonPanel);

//将JPanel组件:

buttonPanel布局于JDialog对话框的底部(南面)

privatevoidinitDBTabPane()

JPanelloginPanel=newJPanel(newGridLayout(10,1));

//为保证两个JCheckBox组件位于顶端,设置为共10行,每行一个组件的布局,但只

//放置界面要求的两个组件,这样就保持了界面的美观,否则如定义为

//Gridlayout(2,1)则会使两个组件居中,而且中间会隔开较长的距离。

pwdBox.setMnemonic('

P'

loginPanel.add(pwdBox);

dspBox.setMnemonic('

D'

loginPanel.add(dspBox);

dbTabPane.add("

Login"

loginPanel);

//设置"

JPanel(图3.4-1)的布局

needRadio.setMnemonic('

N'

allRadio.setMnemonic('

A'

cacheRadio.setMnemonic('

U'

radioPanel.setBorder(newTitledBorder("

LoadOption"

));

//加上边界标题

radioPanel.add(needRadio);

radioPanel.add(allRadio);

radioPanel.add(cacheRadio);

//以上为加入需要的JRadioButton组件到指定的JPanel:

radioPanel

queryPanel.add(radioPanel);

//加入含JRadioButton组的JPanel到queryPanel

reqBox.setMnemonic('

R'

boxPanel.add(reqBox);

saveBox.setMnemonic('

S'

boxPanel.add(saveBox);

autoBox.setMnemonic('

t'

boxPanel.add(autoBox);

//以上为加入需要的JCheckBox组到指定的JPanel:

boxPanel

queryPanel.add(boxPanel);

//加入含JCheckBox组的JPanel到queryPanel

Query"

queryPanel);

//设置"

JPanel(图3.4-2)的布局

initDrvPanel();

/**设置"

Drivers"

JPanel(图3.4-3)的布局*/

privatevoidinitDrvPanel()

tipLabel.setForeground(Color.black);

this.add(drvPanel,tipLabe

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1