JAVA教程 第七讲 Swing用户界面设计(5)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

7.2.3.19 表格(JTable)

  表格是Swing新增加的组件,主要功能是把数据以二维表格的形式显示出来。使用表格,依据 M-V-C的思想,最好先生成一个MyTableModel类型的对象来表示数据,这个类是从AbstractTableModel类中继承来的,其中有 几个方法是一定要重写,例如getColumnCount,getRowCount,getColumnName,getValueAt。因为 Jtable会从这个对象中自动获取表格显示所必需的数据,AbstractTableModel类的对象负责表格大小的确定(行、列)、内容的填写、赋 值、表格单元更新的检测等等一切跟表格内容有关的属性及其操作。JTable类生成的对象以该TableModel为参数,并负责将TableModel对象中的数据以表格的形式显示出来。

  JTable类常用的方法有:
  getModel() //获得表格的数据来源对象
  JTable(TableModel dm) //dm对象中包含了表格要显示的数据
  //下列两个构造方法,第一个参数是数据,第二个参数是表格第一行中显示的内容
  JTable(object[][]rowData,object[]columnNams);
  JTable(Vector[][]rowData,Vector[]columnNams);

 例7.3 RecorderOfWorkers
  import javax.swing.JTable;
  import javax.swing.table.AbstractTableModel;
  import javax.swing.JScrollPane;
  import javax.swing.JFrame;
  import javax.swing.SwingUtilities;
  import javax.swing.JOptionPane;
  import java.awt.*;
  import java.awt.event.*;

  public class TableDemo extends JFrame {
    private boolean DEBUG = true;
    public TableDemo() { //实现构造方法
      super("RecorderOfWorkers"); //首先调用父类JFrame的构造方法生成一个窗口
      MyTableModel myModel = new MyTableModel();//myModel存放表格的数据
      JTable table = new JTable(myModel);//表格对象table的数据来源是myModel对象
      table.setPreferredScrollableViewportSize(new Dimension(500, 70));//表格的显示尺寸

      //产生一个带滚动条的面板
      JScrollPane scrollPane = new JScrollPane(table);

//将带滚动条的面板添加入窗口中
      getContentPane().add(scrollPane, BorderLayout.CENTER);

      addWindowListener(new WindowAdapter() {//注册窗口监听器
        public void windowClosing(WindowEvent e) {
          System.exit(0);
        }
      });
  }
        //把要显示在表格中的数据存入字符串数组和Object数组中
  class MyTableModel extends AbstractTableModel {
     //表格中第一行所要显示的内容存放在字符串数组columnNames中
      final String[] columnNames = {"First Name",
                  "Position",
                  "Telephone",
                  "MonthlyPay",
                  "Married"};
     //表格中各行的内容保存在二维数组data中
      final Object[][] data = {
        {"Wangdong", "Executive",
        "01068790231", new Integer(5000), new Boolean(false)},
        {"LiHong", "Secretary",
        "01069785321", new Integer(3500), new Boolean(true)},
        {"LiRui", "Manager",
        "01065498732", new Integer(4500), new Boolean(false)},
        {"ZhaoXin", "Safeguard",
        "01062796879", new Integer(2000), new Boolean(true)},
        {"ChenLei", "Salesman",
        "01063541298", new Integer(4000), new Boolean(false)}
      };

      //下述方法是重写AbstractTableModel中的方法,其主要用途是被JTable对象调用,以便在表格中正确的显示出来。程序员必须根据采用的数据类型加以恰当实现。
 
      //获得列的数目

      public int getColumnCount() {
         return columnNames.length;
      }

      //获得行的数目
      public int getRowCount() {
         return data.length;
      }

      //获得某列的名字,而目前各列的名字保存在字符串数组columnNames中
      public String getColumnName(int col) {
         return columnNames[col];
      }

      //获得某行某列的数据,而数据保存在对象数组data中
      public Object getValueAt(int row, int col) {
         return data[row][col];
      }

      //判断每个单元格的类型
      public Class getColumnClass(int c) {
         return getValueAt(0, c).getClass();
      }

//将表格声明为可编辑的
      public boolean isCellEditable(int row, int col) {

         if (col < 2) {
           return false;
         } else {
           return true;
         }
      }

      //改变某个数据的值
      public void setValueAt(Object value, int row, int col) {
         if (DEBUG) {
           System.out.println("Setting value at " + row + ",
                 " + col
                  + " to " + value
                  + " (an instance of "
                  + value.getClass() + ")");
         }

         if (data[0][col] instanceof Integer
             && !(value instanceof Integer)) {
          try {
             data[row][col] = new Integer(value.toString());
             fireTableCellUpdated(row, col);
          } catch (NumberFormatException e) {
             JOptionPane.showMessageDialog(TableDemo.this,
              "The /"" + getColumnName(col)
              + "/" column accepts only integer values.");
          }
      } else {
          data[row][col] = value;
          fireTableCellUpdated(row, col);
      }

      if (DEBUG) {
          System.out.println("New value of data:");
          printDebugData();
      }
   }

   private void printDebugData() {
     int numRows = getRowCount();
      int numCols = getColumnCount();

      for (int i=0; i < numRows; i++) {
        System.out.print(" row " + i + ":");
        for (int j=0; j < numCols; j++) {
          System.out.print(" " + data[i][j]);
        }
        System.out.println();
      }
      System.out.println("--------------------------");
   }
  }

  public static void main(String[] args) {
   TableDemo frame = new TableDemo();
   frame.pack();
   frame.setVisible(true);
  }
 } 

6 Java Swing用户界面组件 由于本节博客是Java里面的Swing里面的gui编程,但现在gui的环境大家也知道。并且Java本身在gui编程的选择上Java算是已经完全放弃这一块(Java的优势主要在于web开发),就留下了一个比较难用的Swing,Python好歹还有pyqt这些大型的qt开发框架。所以本文我们不会对Swing做一个过多的详细介绍。只会以一个实际的拼图小游戏项目来简单用用Swing的一些常用组件。建议学完Java的字典集合的api使用还有Java文件操作再来看这个。 阅读详情

相关推荐

java实验之swing图形用户界面程序设计及总结

8.1组件和容器 顶层容器有小应用程序(Applet和JApplet)、对话框(Dialog和JDialog)、框架(Frame和JFrame)。这些容器都存在于java.swing*;中. 一般容器有面板(JPanel)、滚动窗格(JScrollPane)、分裂窗格(JSplitPane)、选项卡窗格(JTabbedPane)和工具条(JToolBar). 专用容器有什么作

YSWLOVEHZM的专栏 6860

Java Swing界面设计UI(全)

原文链接: http://blog.csdn.net/xietansheng/article/details/72814531 Java Swing GUI 图形界面窗口开发基础教程,本教程将系统性地详细介绍 Java Swing 开发中常用的一些组件、布局管理器等相关知识技术,并...

weixin_51201930的博客 2万+

第七 Swing用户界面设计

课前索引【课前思考】  1. 什么是Swing?它和AWT比有什么优点?使用上有什么区别?  2. Swing的组件层次结构有什么特点?是如何实现的?  3. Swing有哪些常用组件?怎么用?  4. Swing有几种容器?其功能特性是什么?  5. Swing的布局管理器有哪些特点,与AWT有哪些区别?7.1 Swing简介7.1.1 简介  第五中我们学习了AWT,AWT是Sw

心蓝 6634

Java复习】第七 Swing用户界面设计

课前索引 【课前思考】  1. 什么是Swing?它和AWT比有什么优点?使用上有什么区别?  2. Swing的组件层次结构有什么特点?是如何实现的?  3. Swing有哪些常用组件?怎么用?  4. Swing有几种容器?其功能特性是什么?  5. Swing的布局管理器有哪些特点,与AWT有哪些区别? 7.1 Swing简介 7.1.1 简介  第五中我们学习了AWT,AWT是Sw...

浮夸 845

Swing用户界面设计

瀚海星云 -- 文章阅读 [讨论区: Java] 发信人: ATTA (wind), 信区: Java标  题: java入门教程第七 Swing用户界面设计发信站: 瀚海星云 (2005年05月19日13:03:38 星期四), 转信 WWWPOSTjava入门教程第七 Swi

Bed的专栏 4130

java的一些UI(swt,swing,jface等等)

UI技术大总结 http://hi.baidu.com/soulmachine/blog/item/dc04c139c2acc9f33b87cee1.html 这几天看了好多用户界面的资料,小结一下。主要比较Java 的各种UI技术。 起因是我要用Java 做个UI

2万+

Java图形用户界面设计

作为一个 Java 程序员,从论坛上感受到使用 Java 开发程序的人越来多,心中不免欣慰。但是,同样是从论坛中,看到多数人提到 Java 就以为是网络开发——不是这样的,Java 也可以开发应用程序,而且可以开发出漂亮的图形用户界面的应用程序,也就是 Windows/XWindow 应用程序。因此,我写下这篇文章,希望能带你进入Java 图形用户界面设计之门。        一. AWT 和 S

4609

Java - Swing用户界面设计(5)

  按钮是一个常用组件,按钮可以带标签或图象。java.lang.Object      |      +--java.awt.Component          |          +--java.awt.Container              |              +--javax.swing.JComponent                    |      

黑芒楼 818

JAVA Swing教程下载仓库

JAVA Swing教程下载仓库 【下载地址】JAVASwing教程下载仓库 探索JAVA Swing的无限可能!本教程为您呈现一套全面且深入的JAVA Swing图形用户界面开发指南。Swing作为JAVA库中的瑰宝,拥有超过250个类,提供40多个丰富的组件,远超AWT。从基础组件到高级特性,本教程涵盖事件处理...

gitblog_06793的博客 997

java:用户界面设计

多数人提到 Java 就以为是网络开发——不是这样的,Java 也可以开发应用程序,而且可以开发出漂亮的图形用户界面的应用程序,也就是 Windows/XWindow 应用程序。因此,我写下这篇文章,希望能带你进入Java 图形用户界面设计之门。 一. AWT 和 SWING AWT 和 SWINGJava 设计 GUI 用户界面的基础。与 AWT 的重量级组件不同,Swing 中大部分是轻...

weixin_46037153的博客 2717

Java - Swing用户界面设计(2)

  1.3 Swing组件的多样化    Swing是AWT的扩展,它提供了许多新的图形界面组件。Swing组件以"J"开头,除了有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还增加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)。 1.4 MVC(Model-View-Contro

黑芒楼 1249

Java图形用户界面设计之概述

文章目录前言一、GUI概述1.创建 GUI 的一般步骤:(1)Component类(2)Container类(3)Window类(4)Frame 类例:建立一个Frame对象,并使之可见。创建GUI的一般步骤:容器与布局布局管理器(1)FlowLayout(2)FlowLayout布局程序示例(3) BorderLayout(4)BorderLayout布局程序示例:(5)GridLayout(6)GridLayout布局程序示例:(7) CardLayout常用组件(1)标签类(Label)(2)面板类(

weixin_56301399的博客 6604

Java的UI设计——Swing组件

Swing组件设计UI java中具有一套非常实用的组件——Swing,利用其中的少量组件就可以设计出基础的UI。 基础窗口的创建——窗体JFrame类 在窗口里传达信息——标签JLabel类 进行简单的动作——按钮JButton类 设计体面的布局——布局管理器 基础窗口的创建——窗体JFrame类 要设计UI,开始当然应该是窗体。在Java中,创建窗体有两种...

banjiong0332的博客 386

JAVA教程 Swing用户界面设计入门

7.1 Swing简介7.1.1 简介  第五中我们学习了AWT,AWT是Swing的基础。Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。AWT设计的初衷是支持开发小应用程序的简单用户界面。例如AWT缺少剪贴板、打印支持、键盘导航等特性,而且原来的AWT甚至不包括弹出式菜单或滚动窗格等基本元素。  此外AWT还存在着严重的缺陷,人们使AWT适应基于继承的、具有很大伸缩性的事

Michael Wing's workspace 8315

java swing动态更新ui_使用 Swing 进行动态界面设计

使用 Swing 进行动态界面设计通往 Swing API 外部领域的旅程Peter Seebach2006 年 6 月 30 日发布Swing 工具包提供各种用于创建用户界面的工具和几乎令人眼花缭乱的选项,这些选项用于在程序生存期间修改界面。小心地使用这些功能可以导致界面能够适应用户的需要并简化交互过程。粗心地使用同样的功能可以导致非常混乱或彻底不可用的程序。本文介绍动态 UI 的技术和体系,并...

weixin_29028611的博客 2055

java的图形用户界面设计_Java图形用户界面设计

下载本文示例代码作为一个 Java 程序员,从论坛上感受到使用 Java 开发程序的人越来多,心中不免欣慰。但是,同样是从论坛中,看到多数人提到 Java 就以为是网络开发——不是这样的,Java 也可以开发应用程序,而且可以开发出漂亮的图形用户界面的应用程序,也就是 Windows/XWindow 应用程序。因此,我写下这篇文章,希望能带你进入Java 图形用户界面设计之门。  一. AWT 和...

weixin_29126497的博客 926

JAVA教程 第七 Swing用户界面设计(2)

7.1.4 MVC(Model-View-Control)体系结构   Swing胜过AWT的主要优势在于MVC体系结构的普遍使用。在一个MVC用户界面中,存三个通讯对象:模型、视图和控件。模型是指定的逻辑表示法, 视图是模型的可视化表示法,而控件则指定了如何处理用户输入。当模型发生改变时,它会通知所有依赖它的视图,视图使用控件指定其相应机制。  为了简化组件的设计工作,在Swing

1210

Java GUI基础学习——AWT+Swing图形化用户界面编程

本博客Java GUI中的知识点,包括Swing和AWT包下的工具类用法,包括Frame弹框、Panel面板,输入框、单选框、多选框、画图工具、监听事件等。

Designer 小郑的技术博客 1401

Java习题集第七章图形用户界面

Java习题集

qq_40086702的博客 2596
上一篇: JAVA教程 第七讲 Swing用户界面设计(4)
下一篇: java Vector.toArray与强制类型转换
guijava
博客等级 码龄19年 94粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值