Swing 问答

原创 2004年06月26日 18:39:00

Swing 问答<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

翻译nxyc_twz@163.com

 

 

 

 

  1. 我在哪里可以找到适合于初学者的信息?

   可以参考 Java 指南的 Swing 页面: http://java.sun.com/docs/books/tutorial/uiswing/

  1. 当我进入一个单元格时,它为什么不能获得焦点?

   当单击单元格时,它就获得了焦点;但当移动光标到单元格时,它并不能获得焦点。在J2SE 1.4中新增了一个名为        surrendersFocusOnKeystroke属性来解决这个问题,并且维持向后兼容。

   相关信息可参考: http://java.sun.com/j2se/1.4/docs/guide/swing/SwingChanges.html#JTable

  1. 我怎样设置单元格行、列的颜色?

   每个单元格都使用 DefaultTableCellRenderer 构建, 通过该类的子类你可以作特定的修改。

   下面的代码演示了怎样实现。它有如此多的可扩充性,以致于 MyCellRenderer 可以包括设置行、列、边框以及文本设置等信息。

   import javax.swing.*;
   import javax.swing.table.*;
   import java.awt.Component;
   import java.awt.Color;

   class TableTest extends JFrame {

     TableTest() {

     final MyCellRenderer mcr = new MyCellRenderer();

     JTable myTable = new JTable(new MyTableModel()) {
      public TableCellRenderer getCellRenderer(int row, int column) {
         return mcr;
       }
     };

      getContentPane().add(new JScrollPane(myTable));
      setSize(640, 480);
      show();
     }

     public static void main(String args[]) {

      new TableTest();
     }
   }

   class MyTableModel extends AbstractTableModel {

     String[] columnNames = {"Name", "Age", "Sex"};
     String[][] columnData = { {"Bob", "23" , "M"}, {"Claire", "99", "F"}, {"Spot", "7", "F"}, {"Phil", "69", "M"}, };

     public Object getValueAt(int row, int col) {return columnData[row][col];}
     public String getColumnName(int col) { return columnNames[col];}
     public int getColumnCount() { return columnNames.length;}
     public int getRowCount() { return columnData.length; }
    }

    class MyCellRenderer extends DefaultTableCellRenderer {

     public Component getTableCellRendererComponent
 (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

      // 获取默认的设置
      Component cell = super.getTableCellRendererComponent ( table, value,isSelected, hasFocus, row, column);

      if (row % 2 == 0) cell.setBackground(Color.blue);
      else cell.setBackground(Color.gray);

      if (column % 2 == 0) cell.setBackground(Color.green);

      return cell;
     }
   }

  1. 在表中我怎样创建一行表头列?

      请查看文件:[ RowHeaderExample.java]

   该解决方案用来创建一个位于JScrollPane行头的组件。该组件将JList添加到行头。

   JList 有:
   - ListModel; 定义列表数据
 
   - RowHeaderRenderer; 定义每个单元格的感观

  1. 我应该选择哪种表格模式?

   表格模型层次提供了:
 
   javax.swing.table.TableModel (接口)
    javax.swing.table.AbstractTableModel (实现TableModel的类)
    javax.swing.table.DefaultTableModel (继承自AbstractTableModel的类)

   javax.swing.table.TableModel

   该接口提供了: Listener 注册, 单元值存取, 列命名, 列存取及创建表模型基础等功能。

   使用实现 TableModel 接口的主要优势是方法的定义可以被定制以及内部数据描述可被扩充 ,实现可变的应用。

   javax.swing.table.AbstractTableModel

   AbstractTableModel 是一种使用表格形数据的简单方法,只需简单的通过重载三个方法 getValueAt, getColumnCount getRowCount 即可。

   AbstractTable 模型也提供了事件处理,如 fireTableDataChanged, fireRowsUpdated 等等...

   AbstractTableModel 构建于 TableModel 之上, 其数据的内部描述可以是静态的(可节省存储空间) 或动态的,这取决于具体的应用。

   通过使用缓冲机制 getValueAt 方法取得具体的内容, 可以使显示和滚动方面的性能得到极大的提高。

   javax.swing.table.DefaultTableModel

   如果在JTable的构造函数中不指定参数,它将使默认的表格模式。

   DefaultTableModels 内部数据描述是向量体系。如果数据不是表格形式,这倒是个很好的方法。

   虽然设置了数据,但执行如滚动、显示应该和数据缓冲时一样。如果数据量大或已经缓冲(比如数据库),那么已缓冲数据的复制品可能是个不合适的选择。

   使用 DefaultTableModel 的一个建议是注意它的易变性。setValueAt 的实现和对其 / 修改包括了插入、添加、删除,以及表格构建后所有易变的数据。

   其它建议是要有一个好的设计。

  1. 怎样禁止用户移动表头或重置列大小?

   要限制列动作,使用 table.getTableHeader().setReorderingAllowed(false);

   要限制列重置大小,使用 table.getTableHeader().setResizingAllowed(false);

   要限制个别列重置大小 table.getColumnModel().getColumn(index).setResizable(false/true);

    注意:这些并不适用于J2SE 1.3 以前的版本。

   (待续一……

Swing 问答

 Swing 问答 我在哪里可以找到适合于初学者的信息?      可以参考 Java 指南的 Swing 页面: http://java.sun.com/docs/books/tu...
  • kamiiyu
  • kamiiyu
  • 2006年07月08日 01:36
  • 1361

人机交互智能问答机器人的实现

人机交互智能问答机器人,这句话所包含的信息量和技术过于庞大,这里为大家进行拆分解释,并以图灵机器人平台为例,通俗的介绍其技术实现原理。...
  • pamchen
  • pamchen
  • 2014年08月12日 18:40
  • 13725

聊天机器人与自动问答技术

文章转载自:http://www.itlipeng.cn/?p=574 引言 最近半年,微软的聊天机器人小冰比较火,有些人对这方面的技术产生了兴趣,恰好之前做过自动问答方面的一些简单工作,这次...
  • leoking01
  • leoking01
  • 2016年03月03日 15:29
  • 2003

直播问答瓶颈及技术方案解读

2018年的第一个风口来的比往年要早一些。在“为人低调的网红小王”王思聪的影响下,发布不到10天的“冲顶大会”从2万直播在线用户量,暴涨到了70万。直播问答成为了现在最受关注的风口。 然而,目前...
  • agora_cloud
  • agora_cloud
  • 2018年01月15日 12:02
  • 199

2016-08-20-java-写了一个问答机器人的程序

引用的数据来源是在聚合数据网站找的数据 key的话。。。。 package socket; import java.io.BufferedReader; import java.io.IOExc...
  • guofengs
  • guofengs
  • 2016年08月20日 10:02
  • 876

【原创】聊天机器人与自动问答技术

聊天机器人属于自动问答(Question Answering)的一个方向,对它的研究很大一部分源自于图灵测试,本文主要探讨一下基本的聊天机器人技术的基本原理和实现机制。...
  • heiyeshuwu
  • heiyeshuwu
  • 2015年01月21日 11:18
  • 13298

java基础知识问答

线程与进程的区别归纳 a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见 b.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信...
  • u010255818
  • u010255818
  • 2017年03月09日 11:30
  • 185

聚合数据(问答机器人)

using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems; p...
  • ff_0528
  • ff_0528
  • 2017年01月16日 20:28
  • 372

基于Servlet的技术问答网站系统实现(附源码)

这一篇博客将详细介绍一个基于Servlet的问答网站的实现,有详细的代码。 可能篇幅较长,以代码为主,有兴趣的童鞋看完可以尝试动手搭建一个属于自己的问答社区。 工具:Eclipse,数据库用到了MyS...
  • weixin_36380516
  • weixin_36380516
  • 2017年04月13日 22:30
  • 4345

人工智能大拿解答机器学习30个问答

人工智能 机器学习
  • u013553804
  • u013553804
  • 2016年04月27日 19:04
  • 665
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swing 问答
举报原因:
原因补充:

(最多只允许输入30个字)