1. 对话框(JDialog)使用示例

例1. JDialog简单使用示例。

import javax.swing.JLabel;

public class demoJDialog {
JFrame mainJFrame;
JLabel myJLabel;
JDialog subJDialog;
public demoJDialog(){
mainJFrame = new JFrame("带对话框的JFrame演示窗口");
myJLabel = new JLabel("世界,你好!");
subJDialog = new JDialog(mainJFrame,"我是对话框",true);
subJDialog.getContentPane().setLayout(new FlowLayout());
subJDialog.getContentPane().add(myJLabel);
mainJFrame.setSize(500, 400);
mainJFrame.setVisible(true);
mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
subJDialog.setSize(500, 400);
subJDialog.setVisible(true);
}
public static void main(String[] args) {
new demoJDialog(); } }

默认的subJDialog = new JDialog(mainJFrame,"我是对话框");创建的是非模态对话框,创建模态对话框如下:subJDialog = new JDialog(mainJFrame,"我是对话框",true);

例2. 使用系统预定义的对话框。

package GUI;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane; public class showTriDialog implements ActionListener {
JFrame mainJFrame;
JButton btnMessage,btnComfirm,btnInput;
Container con; public showTriDialog(){
mainJFrame = new JFrame("对话框使用范例");
btnMessage = new JButton("显示消息对话框");
btnComfirm = new JButton("显示确认对话框");
btnInput = new JButton("显示输入对话框");
con = mainJFrame.getContentPane();
con.setLayout(new FlowLayout());
con.add(btnMessage);
con.add(btnComfirm);
con.add(btnInput);
mainJFrame.setSize(500, 400);
mainJFrame.setVisible(true);
mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btnMessage.addActionListener(this);
btnComfirm.addActionListener(this);
btnInput.addActionListener(this);
} public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnMessage)
JOptionPane.showMessageDialog(mainJFrame, "这是一个简单的消息框");
else if(e.getSource()==btnComfirm)
JOptionPane.showConfirmDialog(mainJFrame, "这是一个有三个按钮的确认框,\n按任意按钮返回");
else
JOptionPane.showInputDialog(mainJFrame, "这是一个可供用户输入简单信息的对话框");
} public static void main(String[] args) {
new showTriDialog(); } }

2. 面板(JPanel)使用示例——中间容器

JPanel被称为面板,是最常用的中间容器。一般情况下,先将各种基本组件添加到其中,然后再将JPanel添加到其它容器(特别是顶层容器)中。JPanel的默认布局是流式布局。

例3. 面板使用简单示例。

package GUI;

import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel; public class demoJPanel {
JFrame mainJFrame;
JPanel myJPanel;
JLabel myJLabel;
public demoJPanel(){
mainJFrame = new JFrame("JPanel使用示例");
myJPanel = new JPanel();
myJLabel = new JLabel("本标签在JPanel上");
myJPanel.setLayout(new FlowLayout());
myJPanel.add(myJLabel);
mainJFrame.add(myJPanel);
mainJFrame.setSize(500, 400);
mainJFrame.setVisible(true);
mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJPanel(); } }

JPanel一个作用是方便布局,另外还有一个很重要的作用,就是当做画布来用。

例4. 在面板上画出简单图形示例1。

package GUI;

import java.awt.Color;
import java.awt.Graphics; import javax.swing.JFrame;
import javax.swing.JPanel; public class painting_1 {
MyCanvas palette;
JFrame mainJFrame;
public class MyCanvas extends JPanel { protected void paintComponent(Graphics g) {
g.setColor(Color.red);
g.drawArc(, , , , , );
g.drawOval(, , , );
g.drawRect(, , , );
g.drawString("测试", , );
} }
public painting_1(){
mainJFrame = new JFrame("用JPanel画图示例");
palette = new MyCanvas();
mainJFrame.add(palette);
mainJFrame.setSize(, );
mainJFrame.setVisible(true);
mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new painting_1(); } }

当这个窗口改变时(包括最大化、最小化和调整窗口的大小),窗口中的图形和文字仍然可以正常显示。这要归功于paintComponent(Graphics g)方法。

例5. 在面板上画出简单图形示例2 。(当用户单击按钮之后才会画图)

package GUI;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel; public class painting_2 {
JPanel palette;
JFrame mainJFrame;
Container con;
JButton btn;
dealPushBtn handleBtn;
public class dealPushBtn implements ActionListener {
public void actionPerformed(ActionEvent e) {
Graphics g;
final int orign_x = 100, orign_y = 100, radio = 50;
final double scope = 30.0/180*Math.PI; //每次转动的角度
double angle = 0.0;
int x = orign_x+radio, y = orign_y+radio;
g = palette.getGraphics();
g.setColor(Color.GREEN);
for(int i=0;i<12;i++){
g.drawArc(x, y, radio*2, radio*2, 0, 360);
angle += scope;
x =(int)(radio*Math.cos(angle)+orign_x);
y =(int)(radio*Math.sin(angle)+orign_y);
}
}
} public painting_2(){
mainJFrame = new JFrame("用JPanel画图示例");
handleBtn = new dealPushBtn();
palette = new JPanel();
btn = new JButton("画图");
btn.addActionListener(handleBtn);
palette.add(btn);
mainJFrame.add(palette);
mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
palette.setLayout(new FlowLayout());
mainJFrame.setSize(300, 300);
mainJFrame.setVisible(true);
}
public static void main(String[] args) {
new painting_2(); } }

如果改变大小、最小化、最大化上面的图形就会不见了,按钮还在上面。这是因为图片是程序另外画上去的,面板并不知道它的存在。

3. 滚动面板(JScollPane)使用示例

例6. 在JScrollPane创建时添加组件示例。

package GUI;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneLayout; public class demoJScrollPane_1 {
JScrollPane jsp;
JFrame jf;
JLabel jl;
public demoJScrollPane_1(){
jf = new JFrame("这是一个JScorllPane示例");
Icon picture = new ImageIcon("test.jpg");
jl = new JLabel(picture);
jsp = new JScrollPane(jl);
jsp.setLayout(new ScrollPaneLayout());
jf.add(jsp);
jf.setSize(500, 400);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
public static void main(String[] args) {
new demoJScrollPane_1(); } }

例7. 通过add()方法添加组件示例。

package GUI;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneLayout; public class demoJScrollPane_2 {
JScrollPane jsp;
JFrame jf;
JLabel jl;
public demoJScrollPane_2(){
jf = new JFrame("这是一个JScorllPane示例");
Icon picture = new ImageIcon("test.jpg");
jl = new JLabel(picture);
jsp = new JScrollPane();
jsp.getViewport().add(jl);
jsp.setLayout(new ScrollPaneLayout());
jf.add(jsp);
jf.setSize(500, 400);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
public static void main(String[] args) {
new demoJScrollPane_2(); } }

注意:无论采用哪种方法,都只能在JScrollPane中放置一个组件。如果多次添加,后面添加的组件将覆盖前面的组件。如果有多个组件要存放在JScrollPane中,需要先将这些组件存放在另外一个中间容器中,再将这个中间容器添加到JScrollPane中。

4. 分隔板(JSplitPane)使用示例

例8. 分隔板简单示例1。

package GUI;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSplitPane; public class demoJSplitPane_1 {
JFrame jf;
JSplitPane jsp;
JLabel jl1,jl2;
public demoJSplitPane_1(){
jf = new JFrame("这是一个JSplitPane使用示例");
jl1 = new JLabel("这是左边窗口");
jl2 = new JLabel("这是右边窗口");
jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,jl1,jl2);
jf.add(jsp);
jf.setSize(500, 400);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJSplitPane_1(); } }

与JScrollPane相同,在JSplitPane的一侧只能放置一个组件。如果需要放置多个组件,需要将这些组件放在另外一个中间容器中(这个中间容器也可以是JSplitPane),再添加进来。

例9. 分隔板示例2。(将一个窗口分割成四个区域)

package GUI;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSplitPane; public class demoJSplitPane_2 {
JFrame jf;
JLabel jl1,jl2,jl3,jl4;
JSplitPane jsp1,jsp2,jsp3;
public demoJSplitPane_2(){
jf = new JFrame("四个窗口的JSplitPane示例");
jl1 = new JLabel("左上");
jl2 = new JLabel("左下");
jl3 = new JLabel("右上");
jl4 = new JLabel("右下");
jsp1 = new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,jl1,jl2);
jsp2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,jl3,jl4);
jsp3 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jsp1,jsp2);
jf.add(jsp3);
jf.setSize(500, 400);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJSplitPane_2(); } }

5. 选项板(JTabbedPane)使用示例

例10. 选项板使用示例。

package GUI;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane; public class demoJTabbedPane {
JFrame jf;
JLabel jl1,jl2;
JTabbedPane jtp;
public demoJTabbedPane(){
jf = new JFrame("JTabbedPane使用示例");
jl1 = new JLabel("这是第一个选项卡");
jl2 = new JLabel("这是第二个选项卡");
jtp = new JTabbedPane();
jtp.addTab("标签一", jl1);
jtp.addTab("标签二", jl2);
jf.add(jtp);
jf.setSize(500, 400);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJTabbedPane(); } }

6. 工具栏(JToolBar)使用示例

在默认情况下,用户可以把工具栏拖动到容器各个边缘。因此,放置工具栏的容器应该使用BorderLayout布局,并且在其他边缘内不能存放其他组件,而只能在容器的中心摆放一个组件。

JToolBar的使用非常简单,只是要注意往其中添加的按钮通常都是带图标的。

例11. 工具栏使用示例。

import java.awt.Container;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JToolBar; public class demoJToolBar {
JFrame jf;
JButton jbt1,jbt2;
JToolBar jtb;
Container con;
public demoJToolBar(){
jf = new JFrame("JToolBar使用示例");
jbt1 = new JButton(new ImageIcon("OPEN.jpg"));
jbt1.setToolTipText("打开文档");
jbt2 = new JButton(new ImageIcon("SAVE.jpg"));
jbt2.setToolTipText("保存文档");
jtb = new JToolBar();
jtb.add(jbt1);
jtb.add(jbt2);
con = jf.getContentPane();
con.add(jtb, BorderLayout.NORTH);
jf.setSize(500, 400);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJToolBar(); } }

7. 标签(Jlabel)使用示例——常用组件

例12. 图像标签使用示例。

package GUI;

import java.awt.BorderLayout;
import java.awt.Container; import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel; public class demoJLabel_1 {
JFrame jf;
JLabel jl;
Container con;
public demoJLabel_1(){
jf = new JFrame("图像标签使用示例");
jl = new JLabel(new ImageIcon("test.png"));
con = jf.getContentPane();
con.add(jl, BorderLayout.CENTER);
jf.setSize(500, 400);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJLabel_1(); } }

例13. 改变标签上鼠标形状示例。

package GUI;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import javax.swing.JFrame;
import javax.swing.JLabel; public class demoJLabel_2 {
JFrame jf;
JLabel linkjl;
ListenMouse lm;
Container con;
public class ListenMouse extends MouseAdapter {
public void mouseEntered(MouseEvent e) {
linkjl.setCursor(new Cursor(Cursor.HAND_CURSOR));
}
} public demoJLabel_2(){
jf = new JFrame("改变鼠标形状示例");
linkjl = new JLabel("将鼠标放到标签上,将变成手型形状");
lm = new ListenMouse();
con = jf.getContentPane();
linkjl.addMouseListener(lm);
con.add(linkjl,BorderLayout.NORTH);
jf.setSize(500, 400);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new demoJLabel_2(); } }

GUI程序设计的更多相关文章

  1. ATL的GUI程序设计(4)

    第四章 对话框和控件 对于Win32 GUI的程序设计来说,其实大部分的情况下我们都不需要自己进行窗口类的设计,而是可以使用Win32中与用户交互的标准方式--对话框(Dialog Box).我们可以 ...

  2. ATL的GUI程序设计(3)

    第三章 ATL的窗口类 CWindowImpl.CWindow.CWinTraits,ATL窗口类的奥秘尽在此三者之中.在本章里,李马将为你详细解说它们的使用方法.另外,本章的内容也可以算是本书的核心 ...

  3. ATL的GUI程序设计(2)

    from:http://blog.titilima.com/atlgui-2.html 第二章 一个最简单窗口程序的转型 我知道,可能会有很多朋友对上一章的"Hello, World!&qu ...

  4. ATL的GUI程序设计(前言)

    前言 也许,你是一个顽固的SDK簇拥者: 也许,你对MFC抱着无比排斥的态度,甚至像我一样对它几乎一无所知: 也许,你符合上面两条,而且正在寻求着一种出路: 也许,你找到了一条出路--WTL,但是仍然 ...

  5. ATL的GUI程序设计(1)

    from:http://blog.titilima.com/atlgui-1.html 第一章 不能免俗的"Hello, World!" 在这一章里,就像所有的入门级教程一样,我也 ...

  6. Java GUI程序设计

    在实际应用中,我们见到的许多应用界面都属于GUI图形型用户界面.如:我们点击QQ图标,就会弹出一个QQ登陆界面的对话框.这个QQ图标就可以被称作图形化的用户界面. 其实,用户界面的类型分为两类:Com ...

  7. GUI程序设计2

    8. 按钮(JButton)使用示例 例14. 按钮使用示例. package GUI; import java.awt.BorderLayout; import java.awt.Container ...

  8. Matlab GUI程序设计入门——信号发生器+时域分析

    背景:学习matlab gui编程入门,完成一个基于GUIDE的图形化界面程序,结合信号生成及分析等. 操作步骤: 1.新建程序 新建一个GUIDE程序 这里选择第一个选项,即创建一个空白的GUIDE ...

  9. MATLAB GUI程序设计中ListBox控件在运行期间消失的原因及解决方法

    在运行期间,ListBox控件突然消失,同时给出如下错误提示: Warning: single-selection listbox control requires that Value be an ...

随机推荐

  1. 关于ecshop的mobile里user.php登录和注册验证码不显示

    在做ecshop模板的时候由于user.php里的登录和注册是在一个页面里切换的,这就致使这里的登录和注册里的验证码不显示 找到mobile/themesmobile/ecshoptemplate_m ...

  2. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  3. NetStandard类库实现Log4Net集成

    前面都是Log4Net集成到NetCore项目中,集成到NetStandard类库还是第一次,所以记录一下 小提示:NetStandard要想同时被NetCore和NetFramework调用,需要在 ...

  4. 单链表之一元多项式求和C++实现

    单链表之一元多项式求和 一元多项式求和单链表实现伪代码 1.工作指针 pre.p.qre.q 初始化2.while(p 存在且 q 存在)执行下列三种情况之一: 2.1.若 p->exp < ...

  5. Struts2 (下)

    接收参数 当发送一个请求时,除了使用RequestApi来接收参数之外,Struts2内部提供了3种接收参数的方式 接收参数的方式 1. 提供属性set方法的方式 在Action当中提供对应属性的se ...

  6. [BZOJ3507][CQOI2014]通配符匹配(DP+Hash)

    显然f[i][j]表示S匹配到第i个通配符,T匹配到第j个字符,是否可行. 一次一起转移两个通配符之间的所有字符,Hash判断. 稍微有点细节.常数极大卡时过排名倒数,可能是没自然溢出的原因. #in ...

  7. 502 解决:[WARNING] fpm_children_bury

    查过网上的资源,基本都是认为是php线程打开文件句柄受限导致的错误.具体的解决的办法如下:   1.提升服务器的文件句柄打开打开 /etc/security/limits.conf : (增加) * ...

  8. Spotlight on linux 监控 linux服务器资源

    步骤一:在window主机上安装spotlight 下载地址:http://worlddownloads.quest.com.edgesuite.net/Repository/www.quest.co ...

  9. ROS知识(16)----如何编译时自动链接同一个工作空间的其他包的头文件(包含message,srv,action自动生成的头文件)

    catkin_make编译时,往往需要自动链接同一个工作空间的其他包的头文件.否则会出现类似如下的错误: /home/xx/xx_ws/srcA_package/src/db.hpp:13:26: f ...

  10. PHP-系统流程

    我们来系统的了解下ThinkPHP框架开发的应用的标准执行流程: 用户URL请求 调用应用入口文件(通常是网站的index.php) 载入框架入口文件(ThinkPHP.php) 记录初始运行时间和内 ...