`

java中利用JFrame创建窗体 【转】

    博客分类:
  • java
阅读更多

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);
		
		frame.setSize(200,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); // 关闭按钮的动作为退出窗口
frame.setSize(400, 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.setLocation((displaySize.width - frameSize.width) / 2,
(displaySize.height - frameSize.height) / 2); // 设置窗口居中显示器显示
frame.setVisible(true);                          // 设置窗口为可见的,默认为不可见
}

 

3.修改图标:

      setIconImage (Toolkit . getDefaultToolkit (). createImage (
                    getClass (). getResource ("login.png" )));
    (注意:图片login.png要放在与调用该图片的类于同一个文件夹;另,Java好像不支持ico格式)

 

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) {
				g.drawImage(img, 0, 0, this);
				super.paint(g);
			}
		};

		MouseListener ml = new MouseListener() {
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2) {
					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);
		ta.setBounds(0, 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();
        content.setLayout(new GridLayout(3,1));
        content.add(new JScrollPane(areaFiftyOne));
        content.add(new JScrollPane(areaFiftyTwo));
        content.add(new JScrollPane(areaFiftyThree));
       
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,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);
        this.setSize(new Dimension(400, 300));
        this.setTitle("Frame1");
    }
    protected void processWindowEvent(WindowEvent e) {
        super.processWindowEvent(e);
        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            System.exit(0);
        }
    }
}

//2.直接实现WindowListener接口
//Frame1.java
import java.awt.*;
import java.awt.event.*;

public class Frame1 extends Frame implements WindowListener {
    public Frame1() {
        this.setSize(new Dimension(400, 300));
        this.setTitle("Frame1");
        this.addWindowListener(this);
    }
    public void windowClosing(WindowEvent windowEvent) {
        System.exit(0);
    }
    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();
        f.setSize(new Dimension(400, 300));
        f.setTitle("Frame1");
        f.addWindowListener(this);
        f.setVisible(true);
    }
    public static void main(String[] s){
        new Frame1();
    }
    public void windowClosing(WindowEvent windowEvent) {
        System.exit(0);
    }
}

//4.间接继承窗体适配器WindowAdapter
//Frame1.java
import java.awt.*;
import java.awt.event.*;
public class Frame1 extends Frame {
    public Frame1() {
        this.setSize(new Dimension(400, 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) {
        System.exit(0);
    }
}

//5.间接实现WindowListener接口
//Frame1.java
import java.awt.*;
import java.awt.event.*;
public class Frame1 extends Frame {
    public Frame1() {
        this.setSize(new Dimension(400, 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) {
        System.exit(0);
    }
    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){
            System.exit(0);
        }
    });
    f.setSize(new Dimension(400, 300));
    f.setVisible(true);
}
    public static void main(String[] s){
        new Frame1();
    }
}
分享到:
评论
2 楼 ZED.CWT 2014-02-02  
[align=ceiinter]
[/align]
1 楼 haifengbin 2013-07-12  
JFrame的setLocation不好使!!!

相关推荐

    java自定义JFrame风格窗体

    在Java编程语言中,`JFrame`是Swing库中的一个关键组件,它用于创建窗口应用程序的基础框架。自定义`JFrame`风格窗体是指开发者根据自己的需求,打破默认的系统样式,创建具有独特外观和行为的窗口。这通常涉及到对...

    java实现jframe透明窗体示例

    本示例将详细介绍如何利用Java实现JFrame透明窗体,帮助开发者创建出视觉效果更佳的应用程序。 首先,我们要知道Java标准库并不直接支持窗口的透明性设置。但是,从Java 6 Update 10开始,Sun Microsystems(后来被...

    java编写的窗体抖动

    首先,我们需要导入必要的Java Swing库,它是Java提供的一种图形用户界面(GUI)工具包,用于创建窗体和其他组件。在Java程序中添加以下import语句: ```java import javax.swing.JFrame; import javax.swing....

    Java吸附窗体、Java磁性窗体、磁性窗体

    1. **检测窗体间距离**:在Java中,我们可以利用AWT或Swing库中的`java.awt.Component`类,获取窗体的位置和大小信息。例如,`getLocationOnScreen()`方法返回窗体在屏幕上的位置,`getSize()`方法返回窗体的尺寸。 ...

    Eclipse创建窗体程序

    ### Eclipse 创建窗体程序知识点详解 #### 一、前言 在进行软件开发时,创建带界面的应用程序是一项常见的需求。对于使用Eclipse这一流行的集成开发环境(IDE)的开发者而言,实现这样的功能通常需要借助特定的...

    java窗体例子

    Java窗体例子是Java编程...总之,Java窗体类应用程序通过继承`JFrame`,利用Swing库提供的组件和事件监听机制,可以在Windows等操作系统上创建用户友好的图形界面。学习和掌握这些知识点对于开发Java桌面应用至关重要。

    qq项目第一天(java JFrame 标题栏 最小化 最大化 拖动窗体)

    在Java编程语言中,开发GUI(图形用户界面)应用程序时,`JFrame` 是一个非常重要的组件,用于创建窗口。本项目"qq项目第一天"显然旨在实现一个类似于QQ的聊天客户端,而涉及到的关键技术点包括设置`JFrame`的标题栏...

    Java多风格窗体制作实例.rar

    在“Java多风格窗体制作实例”中,开发者可能创建了一个或多个JFrame对象,并通过更换LookAndFeel来展示不同风格的窗口。同时,他们可能还编写了代码,使用户能够在运行时动态切换窗口风格,增强了用户体验。 为了...

    用Java实现播放mp3的动画窗体

    在“用Java实现播放mp3的动画窗体”中,Swing用于创建窗体和动画组件。例如,`JFrame`用于创建窗口,`JButton`用于播放/暂停控制,` JLabel`可能用于显示动画或歌曲信息。 3. **MP3音频解码**: 使用JMF,我们可以...

    Java使用swing 组件窗体美化的例子.rar

    本例子中的"Java使用swing 组件窗体美化的例子.rar"是一个很好的学习资源,它展示了如何利用Swing来设计美观的窗口应用,并且包含窗体风格的动态切换功能。 Swing是Java AWT(Abstract Window Toolkit)的扩展,...

    java实现透明窗体

    在Java编程语言中,创建一个透明的窗体是一项有趣且实用的技术,它可以为应用程序提供更加美观和现代的外观。在本篇文章中,我们将探讨如何利用Java实现透明窗体,并通过提供的`ShellWindowBorderPane`代码示例进行...

    窗体通讯(JAVA课程设计代码)

    Swing提供了许多预定义的组件,如JFrame、JPanel、JButton、JLabel、JTextArea等,这些组件可以帮助我们快速创建窗体和控件。 在描述的"窗体通讯"中,关键概念包括事件监听和事件处理。当用户与GUI组件(如按钮)...

    JAVA实现一个登录窗体功能.docx

    通过创建`JFrame`窗口并利用`GridLayout`和`FlowLayout`布局管理器,我们可以灵活地设计界面。同时,通过添加各种Swing组件如`JLabel`、`JTextField`、`JPasswordField`等,以及为按钮添加事件监听器来处理用户的...

    使用JavaSwing重写的美化版窗口模板

    在这个“使用JavaSwing重写的美化版窗口模板”中,我们可以深入探讨Java Swing在构建美观、交互性强的窗口应用中的运用。 1. **Java Swing基础**: - Swing是Java的轻量级GUI框架,它使用Java2D进行渲染,可以创建...

    java 画图程序 多窗体 多种画笔 橡皮 保存 文件 图片

    1. **多窗体**:在Java中,我们可以使用`java.awt`和`javax.swing`库来创建多个窗口。每个窗口都是一个独立的`Frame`对象,可以通过`JFrame`类实例化。多窗体设计允许程序具有更复杂的用户界面,例如一个用于画图,...

    java用图片构建一个个性窗体

    在描述中提到的`TestWindow.java`文件中,我们可以预期它包含了主程序的逻辑,可能包括创建`JFrame`实例以及设置窗体属性,如大小、位置和可见性。其中,`ReWriterJPanel.java`可能是自定义的`JPanel`子类,用来展示...

    java窗体 实现图片拖动 实例代码

    1. **创建窗体**:首先,我们需要创建一个`JFrame`对象,作为我们的主窗口。在`DragPictureDemo.java`中,这可能通过`new JFrame("图片拖动示例")`实现。 2. **添加图片组件**:接下来,我们需要一个可以显示图片...

    JAVA 窗体系统

    在这个特定的场景中,我们讨论的是一个基于Java的学生成绩管理系统,它利用了GUI窗体来交互并管理学生数据,并且依赖MySQL数据库来存储和操作这些数据。下面我们将深入探讨相关的知识点。 1. **Java GUI**: - **...

    简单的Java窗体设计(RDC计算程序)

    本项目“简单的Java窗体设计(RDC计算程序)”是一个面向Java初学者的教学实例,它利用了NetBeans IDE的强大功能来创建一个RDC(假设为Resource Demand Calculation,资源需求计算)的成本计算程序。 首先,我们要...

    JFrame界面美化IFrame应用。

    在Java的GUI编程中,JFrame是构建桌面应用程序的基础,它提供了标准的窗口功能,如标题栏、边框、最大化和最小化按钮等。然而,在JDK1.4之前的版本,如果想要去除JFrame的标题栏以实现自定义界面,通常会使用JWindow...

Global site tag (gtag.js) - Google Analytics