在本章的前部,向我们介绍了老式的CardLayout,并且注意到我们怎样去管理我们所有的卡片开关。有趣的是,有人现在认为这是一种不错的设计。幸运的是,Swing用JTabbedPane对它进行了修补,由JTabbedPane来处理这些卡片,开关和其它的任何事物。对比CardLayout和JTabbedPane,我们会发现惊人的差异。

下面的程序例子十分的有趣,因为它利用了前面例子的设计。它们都是做为JPanel的衍生物来构建的,因此这个程序将安放前面的每个例子到它自己在JTabbedPane的窗格中。我们会看到利用RTTI制造的程序十分的小巧精致:

//: Tabbed.java

// Using tabbed panes

package c13.swing;

import java.awt.*;

import javax.swing.*;

import javax.swing.border.*;

public class Tabbed extends JPanel {

static Object[][] q = {

{ "Felix", Borders.class },

{ "The Professor", Buttons.class },

{ "Rock Bottom", ButtonGrouPS.class },

{ "Theodore", Faces.class },

{ "Simon", Menus.class },

{ "Alvin", Popup.class },

{ "Tom", ListCombo.class },

{ "Jerry", Progress.class },

{ "Bugs", Trees.class },

{ "Daffy", Table.class },

};

static JPanel makePanel(Class c) {

String title = c.getName();

title = title.substring(

title.lastIndexOf('.') + 1);

JPanel sp = null;

try {

sp = (JPanel)c.newInstance();

} catch(Exception e) {

System.out.println(e);

}

sp.setBorder(new TitledBorder(title));

return sp;

}

public Tabbed() {

sETLayout(new BorderLayout());

JTabbedPane tabbed = new JTabbedPane();

for(int i = 0; i < q.length; i++)

tabbed.addTab((String)q[i][0],

makePanel((Class)q[i][1]));

add(tabbed, BorderLayout.CENTER);

tabbed.setSelectedIndex(q.length/2);

}

public static void main(String args[]) {

Show.inFrame(new Tabbed(),460,350);

}

} ///:~

再者,我们可以注意到使用的数组构造式样:第一个元素是被置放在卡片上的String,第二个元素是将被显示在对应窗格上JPanel类。在Tabbed()构建器里,我们可以看到两个重要的JTabbedPane方法被使用:addTab()插入一个新的窗格,setSelectedIndex()选择一个窗格并从它开始。(一个在中间被选中的窗格证明我们不必从第一个窗格开始)。

当我们调用addTab()方法时,我们为它提供卡片的String和一些组件(也就是说,一个AWT组件,而不是一个来自AWT的JComponent)。这个组件会被显示在窗格中。一旦我们这样做了,自然而然的就不需要更多管理了——JTabbedPane会为我们处理其它的任何事。

makePanel()方法获取我们想创建的类Class对象和用newInstance()去创建并造型为JPanel(当然,假定那些类是必须从JPanel继承才能增加的类,除非在这一节中为程序例子的结构所使用)。它增加了一个包括类名并返回结果的TitledBorder,以作为一个JPanel在addTab()被使用。

当我们运行程序时,我们会发现如果卡片太多,填满了一行,JTabbedPane自动地将它们堆积起来。

如何自己制作java对话框_java中的卡片式对话框如何制作相关推荐

  1. 谈谈考研刷题小程序中的卡片式设计

    谈谈考研刷题小程序中的卡片式设计 大家在UI设计中爱用卡片吗?无论是b端产品还是c端产品,卡片式设计几乎无处不在,卡片已然是我们在UI设计中最常见的样式了,今天我们就来一起详细的了解一下考研题库小程序 ...

  2. java电脑日历_Java中calendar对万年历的制作(同步电脑上的万年历日期格式)

    Java编程中calendar对万年历的制作教程 使用到的方法: 1.日期类型的转换: String----->Date String str = "2020年05月27日 20:28 ...

  3. java 事务_Java中事务总结详解(精华)

    1.什么是JAVA事务? 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (is ...

  4. [转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

  5. java 且_JAVA中逻辑运算符“|”和“”与“||”和“”的用法

    1.使用规则: (1)& 可以用作逻辑与的运算符,表示逻辑与(and) a.当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false ...

  6. java 包装类_Java中的包装类

    Java中哪些需要包装类 它们将原始数据类型转换为对象.如果我们希望修改传递给方法的参数,则需要对象(因为基元类型是按值传递的). java.util包中的类只处理对象,因此在这种情况下包装类也有帮助 ...

  7. java 难度_java中难度大一点的面试题

    1.请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别.(5) (1)Vector和ArrayList的异同 实现原理,功能相同,可以互用 主要区别: Ve ...

  8. math java 计算_Java中的数学计算函数汇总

    Math类:  java.lang.Math类中包含基本的数字操作,如指数.对数.平方根和三角函数. java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(B ...

  9. java中的多态性_[转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

最新文章

  1. 两个晶体管组成的混沌电路
  2. NIOS II 创建示例设计_Quartus II 9.0
  3. jenkins~集群分发功能的具体实现
  4. java插入排序_Java程序要插入排序
  5. 基于spring-boot的社区社交微信小程序,适合做脚手架、二次开发
  6. 基于springboot框架的java学生管理系统
  7. egg 编码规范_从 Egg.js 到 NestJS,爱码客后端选型之路
  8. asp.net 缓存Cache的使用总结
  9. 第七章 面向对象分析
  10. python部落课程资源_python部落刷题宝学到的内置函数
  11. matlab2014b linux,matlab 2014b linux 肿么安装
  12. linux切换任务栏快捷键,ubuntu常用命令及快捷键整理
  13. Hive sum over partition preceding following 累计求和
  14. 使用Python横向合并excel文件
  15. 统计相关系数——Kendall Rank(肯德尔等级)相关系数
  16. MySQL数据库_(学生_教师_课程_成绩)表_练习
  17. 文心一言打开f12后进入空白页面
  18. 微信小程序 画布 组件
  19. 作为QA工程师要避免的7个坏习惯
  20. 命令查看spf_什么是SPF、邮箱域名SPF记录查询方法

热门文章

  1. 操作系统之哲学原理6----进程通信
  2. 哈尔滨工业大学与山东大学相比考研计算机科学与技术哪个好考,计算机考研,我该选浙大还是哈工大?...
  3. ahjesus如何在windows下制作适用于mac的u盘启动盘
  4. deepin自带wine使用方法_图解deepin操作系统安装,体验定制版的国产操作系统
  5. 【电子杂志制作免费软件】云展网教程 | 如何上传PDF文档创建电子杂志?
  6. linux .. 权限详解,Linux用户及权限详解(示例代码)
  7. bluej 编程_BlueJ的无痛Java
  8. n76e003浮点_n76e003-E003,N76
  9. 快播去百度搜索的方法
  10. verilog编写RoundRobinArbiter的一些小错误摘录