
VB的Frame框架控件添加其它控件需要用以下方法添加:
1)鼠标选中工具箱想添加的控件。
2)放在在Frame控件中绘制它的大小尺寸。
3)调整控件位置和大小。
Frame 控件,Frame 控件为控件提供可标识的分组。Frame 可以在功能上进一步分割一个窗体-例如,把 OptionButton 控件分成几组。
为了将控件分组,首先需要绘制 Frame 控件,然后绘制 Frame
里面的控件。这样就可以把框架和里面的控件同时移动。如果在 Frame 外部绘制了一个控件并试图把它移到框架内部,那么控件将在
Frame 的上部,这时需分别移动 Frame 和控件。
Python GUI - Tkinter LabelFrame: 在一个labelframe一个简单的容器构件。其主要目的是作为一个间隔或复杂的窗口布局容器
在一个labelframe一个简单的容器构件。其主要目的是作为一个间隔或复杂的窗口布局容器.
该部件有一帧的功能,加上能够显示标签.
语法:
这里是一个简单的语法来创建这个widget:
w = LabelFrame( master, option, ... )
参数:
master: 这代表了父窗口.
options: 下面是这个小工具最常用的选项列表。这些选项可以作为键 - 值对以逗号分隔.
Option
Description
bg The normal background color displayed behind the label and indicator.
bd The size of the border around the indicator. Default is 2 pixels.
cursor If you set this option to a cursor name (arrow, dot etc.), the mouse cursor will change to that pattern when it is over the checkbutton.
font The vertical dimension of the new frame.
height The vertical dimension of the new frame.
labelAnchor Specifies where to place the label.
highlightbackground Color of the focus highlight when the frame does not have focus.
highlightcolor Color shown in the focus highlight when the frame has the focus.
highlightthickness Thickness of the focus highlight.
relief With the default value, relief=FLAT, the checkbutton does not stand out from its background. You may set this option to any of the other styles
text Specifies a string to be displayed inside the widget.
width Specifies the desired width for the window.
例子:
自己尝试下面的例子。下面是如何创建3窗格部件:
from Tkinter import *root = Tk()
labelframe = LabelFrame(root, text="This is a LabelFrame")
labelframe.pack(fill="both", expand="yes")
left = Label(labelframe, text="Inside the LabelFrame")
left.pack()
root.mainloop()
这将产生以下结果:
JFrame基本不用,如果你要是当做兴趣来学可以,如果你是为了工作建议你跳过这块下面是我初学JFrame时的笔记,你对着看下吧,图片不清楚,我也不知道你是什么问题
13.2 常用窗体
窗体作为Swing应用程序中组件的承载体,处于非常重要的位置,Swing中常用的窗体包括JFrame和JDialog
13.2.1 JFrame窗体
JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看做承载这些Swing组件的容器,在开发应用程序时可以通过继承java.swing.JFrame同时为组件设置事件,由于该窗体继承了JFrame类,所以它拥有"最大化""最小化""关闭"等按钮
JFrame在程序中的语法如下:
[
JFrame jf=new JFrame(title)
Contiainer con=jf.getContainer()
]
jf:JFrame类的对象
con:container类的对象,可以使用JFrame对象调用getContainer()方法获取
我们大致应该有这样一个概念,Swing组件的窗体通常与组件和容器无关,所以在JFrame对象创建完成后,需要调用getContentPane()方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器,通常,这个容器用来包含和显示组件,如果需要将组件添加至容器,可以使用来自Container类的add()方法进行设置
例如:container.add(new JButton("按钮"))
//JButton按钮组件
在容器中添加组件后,也可以使用Container类的remove()方法将这些组件从容器中删除
title:方法参数,也是JFrame窗体名称
例如:container.remove(new JButton("按钮"))
下面将会写一个程序,实现JFrame窗体,并在其中添加一个组件
[
package b
import java.awt.* //导入awt相关包
import javax.swing.* //导入swing相关包(swing是javax中的包)
//13.2.1 JFrame窗体
public class R extends JFrame{ //定义一个类继承JFrame类
public static void main(String[] args) {
JFrame jf=new JFrame("创建一个JFrame窗体")
//实例化一个JFrame对象
//此处文字表示给窗体命名
Container con=jf.getContentPane()
//获取一个容器
JLabel jl=new JLabel("这是一个JFrame窗体")
//创建一个JLabel标签
jl.setHorizontalAlignment(SwingConstants.CENTER)
//使标签上的文字居中
con.add(jl) //将标签添加到容器中
con.setBackground(Color.black) //设置窗体背景颜色
jf.setVisible(true)
//设置窗体是否可视,默认为false,如果为false就不会输出任何东西
jf.setSize(500,500) //设置窗体大小
jf.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE)
//设置窗体关闭方式
}
}
]
在上面的例子中,R类继承了JFrame类,在a()方法中实现JFrame对象,JFrame类的常用构造方法包括以下两种形式
(1)public JFrame()
(2)public JFrame(String args)
JFrame类中的两种构造方法分别为无参构造方法与有参构造方法,第一种形式的构造方法可以创建一个不可见但是具有标题的窗体,可以使用JFrame对象调用show()方法使窗体可见,但是该方法早已被新版JDK所弃用,通常使用setVisible(true)方法使窗体可见
同时使用setSize(int x,int y)方法设置窗体大小,其中x,y分别代表窗体的宽与高
创建窗体后,需要给予窗体一个关闭的方式,可以调用setDefaultCloseOperation()方法关闭窗体,java为窗体关闭提供了多种方式,常用的有以下4种
DO_NOTHING_ON_CLOSE
//表示什么都不用做,退出编译器后程序窗体会自动关闭,但是在关闭编译器之前,无论做什么都不能使程序窗体关闭或消失
//下面三种方式都是点击"x"使窗体消失,但是具体执行效果不一样
DISPOSE_ON_CLOSE
//点击"x"后,将程序窗体隐藏并同时切换到后台运行,然后再杀死该进程
EXIT_ON_CLOSE
//点击"x"后直接将该程序窗体关闭
HIDE_ON_CLOSE
(此为默认关闭方式)
//点击"x"后,先将程序窗体隐藏,然后再切换到后台运行,但是系统并不会自动结束该进程,如果要结束该进程,则必须手动结束
这几种 *** 作实际上是将一个int型的常量封装在javax.swing.WindowsConstants接口中
13.2.2 JDialog窗体
JDialog窗体是Swing组件中的对话框,它继承了AWT组件中的java.awt.Dialog类
JDialog窗体的功能是从一个窗体中d出另一个窗体,就像是在使用IE浏览器时d出的确定对话框一样,JDialog窗体实质上就是另一种类型的窗体,它与JFrame窗体类似,在使用时也需要调用getContentPane()方法将窗体转换为容器,然后在容器中设置窗体的特性
在应用程序中创建JDialog窗体需要实例化JDialog类,通常使用以下几个JDialog类的构造方法
public JDialog()
//创建一个没有标题和父窗体的对话框
public JDialog(Frame a)
//创建一个指定父窗体的对话框,但该窗体没有标题
public JDialog(Frame a,boolean b)
//创建一个指定的对话框,并指定父窗体,但该窗体没有指定标题
public JDialog(Frame a,String b)
//创建一个指定标题和父窗体对话框
public JDialog(Frame a,String b,boolean c)
//创建一个指定标题,窗体和模式的对话框
13.2.2.1 JDialog参数说明
a:父窗体对象
b:对话框标题
c:是否阻塞父窗体(当 *** 作子窗体时无法 *** 作父窗体)
13.2.2.2 例子
下面以一个程序为例,这个程序会实现单击JFrame窗体中的按钮后,d出一个对话框,
[
package b
import java.awt.*
import javax.swing.*
import java.awt.event.*
//导入的包的名称越详细越好,如果不详细有时候系统会识别不到
public class U extends JDialog{
//此处继承JDialog,就不要再声明一个JDialog对象,下面直接写相关配置,默认就直接配置JDialog
public U(U1 frame) {
//创建一个类的构造方法,参数类型为JFrame
super(frame,"对话框",true)
//当继承一个类的时候,可以直接使用super()调用父类构造方法,就不需要再声明一个对象了
Container con=getContentPane()
//创建一个JDialog为基础的容器,该方法只能在非静态方法中使用
con.add(new Label("这是一个对话框"))
//在容器中添加标签
setBounds(100,100,100,100)
//设置对话框大小
}
public class U1 extends JFrame{
//此处继承JFrame,就不要再声明一个JFrame对象,下面直接写相关配置,默认就直接配置JFrame
public void a() {
setBounds(300,300,300,300)
//设置父窗体大小
Container con=getContentPane()
//创建一个以JFrame为基础的容器
JButton jb=new JButton("这是一个按钮")
//添加按钮
con.add(jb)
//将按钮添加到容器
con.setLayout(new FlowLayout())
//布局格式,flow布局就是按钮在父窗体的最上面,默认为整个窗体都是按钮,如果为null,则按钮不显示
setVisible(true)
//父窗体是否显示可见
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)
//父窗体关闭方式
jb.addActionListener(new ActionListener(){
//设置鼠标单击事件(也叫行为监听)
public void actionPerformed(ActionEvent e) {
//使用addActionListener的actionPerformed方法,此方法格式固定
new U(U1.this).setVisible(true)
//调用容器,使用JFrame对象,使d出的窗体可见
}
})
}
}
public static void main(String[] args) {
new U(null).new U1().a()
//调用内部方法
}
}
]
在上面的例子中,为了使对话框在父窗体d出,定义了一个JFrame窗体,首先在该窗体中定义一个按钮,然后为此按钮添加一个鼠标单击监听事件(在这里需要使用匿名内部类的形式),这里使用new S().setVisible(true)语句使对话框窗体可见,这样就实现了用户单机该按钮后d出对话框的功能
在S类中,由于它继承了JDialog类,所以可以在构造方法中使用super关键字调用JDialog构造方法,在这里使用了public JDialog(Frame a,String b,boolean c)这种形式的构造方法,相应的设置了自定义的JFrame窗体以及对话框的标题和窗体类型
从上面的代码中可以看出,JDialog窗体与JFrame窗体形式基本相同,甚至在设置窗体的特性时调用的方法名称都基本相同,如设置窗体大小,窗体关闭状态等
上面会用到JButton,此处不需要过多了解,以后会介绍到
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)