Java中利用JFrame创建窗体
1. 一个简单例子:
- public class Test(){
- public static void main(String[] args){
- JFrame frame = new JFrame();
- JPanel panel = new JPanel();
- JTextArea textArea = new JTextArea();
- panel.setLayout(new GridLayout());
- textArea.setText("test");
- //当TextArea里的内容过长时生成滚动条
- panel.add(new JScrollPane(textArea));
- frame.add(panel);
- ,200);
- frame.setVisible(true);
- }
- }
2.创建窗体
在开发Java应用程序时,通常情况下利用JFrame创建窗口。利用JFrame创建的窗口分别包含一个标题、最小化按钮、最大化按钮和关闭按钮
在利用JFrame创建窗口时,需要设置单击关闭按钮时执行的动作 ,设置方法为通过JFrame对象的setDefault CloseOperation(int operation)方法,该方法的入口参数可以从JFrame类的静态常量中选择,可选的静态常量如表1所示。
表1 JFrame类中用来设置关闭按钮动作的静态常量
设置单击关闭按钮时执行动作的典型代码如下:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) :
JFrame窗口的默认显示位置为从(0,0)点开始绘制,即从显示器的左上角开始绘制。通常情况下更希望显示在显示器的中央,可以通过Toolkit类 的静态方法getDefaultToolkit()获得一个Toolkit类的对象,然后通过Toolkit对象的getScreenSize()方法获 得一个Dimension类的对象,通过Dimension对象可以得到显示器的大小,例如显示器的宽度和高度,获得Dimension对象的典型代码如 下:
Dimension displaySize = Toolkit.getDefaultToolkit().getScreenSize();
通过JFrame对象的getSize()方法也可以得到一个Dimension类的对象,通过Dimension对象可以得到JFrame窗口的大小,例如JFrame窗口的宽度和高度,获得Dimension对象的典型代码如下:
Dimension frameSize = frame.getSize();
利用上面得到的两个Dimension类的对象,就可以计算出显示在显示器中央时的起始绘制点了,然后通过JFrame对象的setLocation(int x, int y)方法,设置JFrame窗口在显示器中的起始绘制点,典型代码如下:
frame.setLocation((displaySize.width - frameSize.width) / 2,(displaySize.height - frameSize.height) / 2);
利用JFrame创建的窗口默认是不可见的,即在运行时不在显示器上绘制窗口,设置为可见的方法是通过JFrame对象的setVisible(boolean b)方法,并将入口参数设为true,典型代码如下:
frame.setVisible(true):
下面将通过一个例子,实现利用JFrame创建一个图1所示的窗口。
下面的代码将创建一个标题为“利用JFrame创建窗口”的窗口,该窗口的关闭按钮执行的动作是退出窗口,该窗口将显示在显示器的中央,代码如下:
- public static void main(String[] args) {
- JFrame frame = new JFrame("利用JFrame创建窗口"); // 创建指定标题的JFrame窗口对象
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭按钮的动作为退出窗口
- , 300); // 设置窗口大小
- Dimension displaySize = Toolkit.getDefaultToolkit().getScreenSize(); // 获得显示器大小对象
- Dimension frameSize = frame.getSize(); // 获得窗口大小对象
- if (frameSize.width > displaySize.width)
- frameSize.width = displaySize.width; // 窗口的宽度不能大于显示器的宽度
- if (frameSize.height > displaySize.height)
- frameSize.height = displaySize.height; // 窗口的高度不能大于显示器的高度
- ,
- ); // 设置窗口居中显示器显示
- frame.setVisible(true); // 设置窗口为可见的,默认为不可见
- }
3.修改图标:
getClass (). getResource ("login.png" )));
4.Java Swing如何实时刷新JTextArea,以显示刚才加append的内容
在代码中执行完textArea.append("message")后,如果你想让这个更新立刻显示在界面上而不是等swing的主线程返回后刷新,我们一般会在该语句后调用textArea.invalidate()和textArea.repaint()。
问题是这个方法并不能有任何效果,textArea的内容没有任何变化,这或许是swing的一个bug,有一个笨拙的办法可以实现这个效果,就是执行以下语句
textArea.paintImmediately(textArea.getBounds());
或
textArea.paintImmediately(textArea.getX(), textArea.getY(), textArea.getWidth(), textArea.getHeight());
这时,你会发现你刚才增加的消息已经被实时地显示出来了。
5. 画图并添加鼠标事件
- final Image img = Toolkit.getDefaultToolkit().getImage(
- Test.class.getResource("map.png"));
- JTextArea ta = new JTextArea() {
- {
- setOpaque(false);// 设置不透明的参数,缺少时背景图片不显示
- }
- public void paint(Graphics g) {
- , 0, this);
- super.paint(g);
- }
- };
- MouseListener ml = new MouseListener() {
- public void mouseClicked(MouseEvent e) {
- ) {
- System.out.println("Mouse double clicked");
- }
- }
- public void mouseEntered(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- public void mouseExited(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- public void mousePressed(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- public void mouseReleased(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- };
- ta.addMouseListener(ml);
- , 0, 300, 200);
- ta.setEditable(false);
6.另一个例子:在一个TextArea里写内容,其他两个同时显示
- /*JTextArea是多行文本编辑器,JTextField是一个简单的单行文本编辑器,它们都由JTextComponent类派生,所以它们包含一些共同的方法,如设置和获取所显示的文本,指定文本是否可编辑,或者是否只读,管理文本内的光标位置以及管理文本选择等。
- 文本组件的模型是一个称为Document的对象,对于一个JTextArea或JTextField,要为之增加或删除文本,就会改变相应的Document。当出现某种改动时,要由文档本身(而不是可视的组件)来生成与文本相关的事件。因此,为了接收JTextArea修改的通知,就要向底层Document注册,而不是向JTextArea组件本身注册:
- */
- JTextArea textArea = new JTextArea();
- Document d = textArea.getDocument();
- d.addDocumentListener(someListener);
- /*
- 一个例子如下,在任意的一个文本区中键入的内容,在三个区中都将得以体现。我们要做的就是让所有的文本区都共享一个数据模型。
- */
- import java.awt.Container;
- import java.awt.GridLayout;
- import javax.swing.JFrame;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
- public class ShareModel {
- public static void main(String[] args) {
- JFrame frame = new JFrame("ShareModel");
- JTextArea areaFiftyOne = new JTextArea();
- JTextArea areaFiftyTwo = new JTextArea();
- areaFiftyTwo.setDocument(areaFiftyOne.getDocument());
- JTextArea areaFiftyThree = new JTextArea();
- areaFiftyThree.setDocument(areaFiftyOne.getDocument());
- Container content = frame.getContentPane();
- ,1));
- content.add(new JScrollPane(areaFiftyOne));
- content.add(new JScrollPane(areaFiftyTwo));
- content.add(new JScrollPane(areaFiftyThree));
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- ,300);
- frame.setVisible(true);
- }
- }
- /*
- 在一个文本区中键入时,此文本区将接受键盘事件,它会调用文档中的方法来更新数据,相应的,文档会向其它文本区发送事件,通知出现了更新,从而使它们能够正确的显示文档的新数据。不过,所有这一切都无需我们关心。要做的只是通知文本区使用同一数据。Swing会接管其余的一切。
- 另外需要注意的,JTextArea没有滚动功能,超出文本区域的内容无法显示出来,通过鼠标拖动也无法看到。但它实现了Swing Scrollable接口。必须把它放置在JScrollPane的内部才能实现滚动。
- */
7.Java 关闭窗体的六种方法
--------------------------------------------------------------------------------
- //1.使用JFrame的enableEvents和processWindowEvent
- //Frame1.java
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- public class Frame1 extends JFrame {
- public Frame1() {
- enableEvents(AWTEvent.WINDOW_EVENT_MASK);
- , 300));
- this.setTitle("Frame1");
- }
- protected void processWindowEvent(WindowEvent e) {
- super.processWindowEvent(e);
- if (e.getID() == WindowEvent.WINDOW_CLOSING) {
- );
- }
- }
- }
- //2.直接实现WindowListener接口
- //Frame1.java
- import java.awt.*;
- import java.awt.event.*;
- public class Frame1 extends Frame implements WindowListener {
- public Frame1() {
- , 300));
- this.setTitle("Frame1");
- this.addWindowListener(this);
- }
- public void windowClosing(WindowEvent windowEvent) {
- );
- }
- public void windowOpened(WindowEvent windowEvent) { }
- public void windowClosed(WindowEvent windowEvent) { }
- public void windowIconified(WindowEvent windowEvent) { }
- public void windowDeiconified(WindowEvent windowEvent) { }
- public void windowActivated(WindowEvent windowEvent) { }
- public void windowDeactivated(WindowEvent windowEvent) { }
- }
- //3.直接继承窗体适配器WindowAdapter
- //Frame1.java
- import java.awt.*;
- import java.awt.event.*;
- public class Frame1 extends WindowAdapter {
- public Frame1() {
- Frame f=new Frame();
- , 300));
- f.setTitle("Frame1");
- f.addWindowListener(this);
- f.setVisible(true);
- }
- public static void main(String[] s){
- new Frame1();
- }
- public void windowClosing(WindowEvent windowEvent) {
- );
- }
- }
- //4.间接继承窗体适配器WindowAdapter
- //Frame1.java
- import java.awt.*;
- import java.awt.event.*;
- public class Frame1 extends Frame {
- public Frame1() {
- , 300));
- this.setTitle("Frame1");
- this.addWindowListener(new winAdapter());
- this.setVisible(true);
- }
- public static void main(String[] s){
- new Frame1();
- }
- }
- class winAdapter extends WindowAdapter{
- public void windowClosing(WindowEvent windowEvent) {
- );
- }
- }
- //5.间接实现WindowListener接口
- //Frame1.java
- import java.awt.*;
- import java.awt.event.*;
- public class Frame1 extends Frame {
- public Frame1() {
- , 300));
- this.setTitle("Frame1");
- this.addWindowListener(new winEventHandle());
- this.setVisible(true);
- }
- public static void main(String[] s){
- new Frame1();
- }
- }
- class winEventHandle implements WindowListener {
- public void windowClosing(WindowEvent windowEvent) {
- );
- }
- public void windowOpened(WindowEvent windowEvent) { }
- public void windowClosed(WindowEvent windowEvent) { }
- public void windowIconified(WindowEvent windowEvent) { }
- public void windowDeiconified(WindowEvent windowEvent) { }
- public void windowActivated(WindowEvent windowEvent) { }
- public void windowDeactivated(WindowEvent windowEvent) { }
- }
- //6.使用Inner Class
- //Frame1.java
- import java.awt.*;
- import java.awt.event.*;
- public class Frame1{
- public Frame1(){
- Frame f=new Frame();
- f.addWindowListener(new WindowAdapter(){
- public void windowClosing(WindowEvent e){
- );
- }
- });
- , 300));
- f.setVisible(true);
- }
- public static void main(String[] s){
- new Frame1();
- }
- }
Java中利用JFrame创建窗体的更多相关文章
- java中利用JFrame创建窗体 【转】
1. 一个简单的swing public class Test(){ public static void main(String[] args){ JFrame frame = new JFrame ...
- 使用myeclipse开发java,解决java中继承JFrame类出现The type JFrame is not accessible due to restriction的问题
在java中创建窗体,导入了java中的JFrame类,之后会出现错误: Access restriction: The type QName is not accessible due to res ...
- Dynamics CRM2013 从subgrid中打开快速创建窗体创建数据
在页面上使用subgrid时,在subgrid中新建数据时需要跳转到另一个页面,这种操作比较麻烦且很不友好,这时我们想到了快速创建窗体,像下图这样直接在当前页上方下拉出现一个窗体,填写内容后点击保存就 ...
- SQL中利用脚本创建database mail.
SQL中利用脚本创建database mail 编写人:CC阿爸 2014-6-14 多话不讲,请参考以下脚本 use
- 在JAVA中利用public static final的组合方式对常量进行标识
在JAVA中利用public static final的组合方式对常量进行标识(固定格式). 对于在构造方法中利用final进行赋值的时候,此时在构造之前系统设置的默认值相对于构造方法失效. 常量(这 ...
- Java中利用随机数的猜拳游戏
Java中利用随机数的猜拳游戏,实现非常简单,重难点在于随机数的产生. 首先GameJude类是用于判断输赢的一个类: package testGame; public class GameJudge ...
- java 中利用反射机制获取和设置实体类的属性值
摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...
- Java中String对象创建机制详解()
一String 使用 private final char value来实现字符串存储 二Java中String的创建方法四种 三在深入了解String创建机制之前要先了解一个重要概念常量池Const ...
- Java中如何动态创建接口的实现
有很多应用场景,用到了接口动态实现,下面举几个典型的应用: 1.mybatis / jpa 等orm框架,可以在接口上加注解进行开发,不需要编写实现类,运行时动态产生实现. 2.dubbo等分布式服务 ...
随机推荐
- java多线程环境单例模式实现详解
Abstract 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制,也就是说只有当使用到这个实例的时候才会创建这个实例,这个好处在单例模式中得到了广泛应用.这个机制在s ...
- 面试题:Concurrenthashmap原理分析 有用
一.背景: 线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap. 效率低下的H ...
- WordCount编码与测试
1. github项目地址:https://github.com/wwwwu/WordCount 2.PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning ...
- 关于LIst Set Map 异常的知识点---我的笔记
今天新的内容1.List接口2.Set接口3.Map集合4.异常==================================================================== ...
- excel导入工具
1 介绍 excel导入工具 整个项目的代码结构如下 \---excelExport # 导出工具包 | AsyncExportExcel.java #多线程导出 | ExcelImport.java ...
- php+mysql入门
mysql+php+apache可以快速的架构动态网站. 首先,为什么php容易搞mysql,因为与mysql交互成为了php语言的一种特性. 一.mysql入门 mysql是一种开源的关系型数据库. ...
- 接口型模式(二)Bridge(桥接)模式
目的: 将抽象与抽象方法的实现相分离,使得它们可以独自变化.常用于驱动程序中,使得顶层逻辑不受驱动底层改变的影响,如数据库的变化. 关键词:Bridge, 抽象与实现分离,驱动程序 必要性:从一般抽象 ...
- css 隐藏html元素的方法
1.常见方法 display:none 这个方法的问题是 元素被隐藏了 同时该元素不占位置了,应该也可以说该元素没有高度和宽度了 2.常见方法 visibility: hidden; 这个方法和dis ...
- EF中的MySql返回 DataTable公共类库
public static class SqlHelper { /// <summary> /// EF SQL 语句返回 dataTable /// </summary> / ...
- UWP&WP8.1 基础控件——Image
Image是UWP和WP8.1中系统自带的图片展示器. 具有较强的性能,使用也是非常的简单. 使用方式分为在XAML中,在C#代码中. XAML中: 在XAML中使用方式非常简单. 常用XAML So ...