TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)七

第七 篇:使用 AlarmTable 组件

Alarm table 组件,是一个继承自 TWaver table,AlarmTable 被用于展示 alarm 对象, Alarm table 联合一个 DataBox 可以从该 DataBox 中获取所有的 alarm 对象,然后在表格的对应的列上罗列出 来。

Alarm table 是来自与 Twaver table, 所以它具有了所有的基本表格的功能,如:自定义列,排序,分页控 制,锁定,弹出菜单和过滤器。可以参考上面的表格使用

创建一个 AlarmTable 组件

通常情况下我们需要一个 DataBox 去创建一个 AlarmTable, 这样的话表格就需要连接到一个 DataBox 显示和监测预警模型的 DataBox ,根据下面的代码段可以创建一个 alarm table 组件并展示在一个 JFrame 里面

JFrame frame = new JFrame("Alarm Table");

TDataBox box = new TDataBox();

TAlarmTable table = new TAlarmTable(box);

frame.setContentPane(new JScrollPane(table));

frame.setSize(400, 100);

TWaverUtil.centerWindow(frame);

frame.show();

图片

AlarmTable 组件的构造器:

                
  

方法

  
  

描述

  
  

TAlarmTable(TDataBox box)

  
  

创建一个连接 DataBox 带有默认列的告警表格

  
  

TAlarmTable(TDataBox box,String tableName)

  
  

创建一个告警表格 , 这个告 警表格连接着一个指定的 DataBox, 并且带着一个配置在 TWaver.xml 里面的 tableName

  
  

TAlarmTable(TDataBox box,TTableColumn[] columns)

  
  

以给定的列创建一个 AlarmTable, AlarmTable 连接着一个指定的 DataBox

  

有一些默认的列,这些列 默认状态是可见的:

Alarm.PROPERTY_ALARM_ALARMID// 告警 ID

Alarm.PROPERTY_ALARMSERVERITY// 告警级别列

Alarm.PROPERTY_ACKED// 告警确认状态列,该列为复选框

Alarm.PROPERTY_ELEMENTID// 告警对象 ID

Alarm.PROPERTY_PROBABLECAUSE// 告警原因列

private static TTableColumn[] createDefaultColumns() {

return new TTableColumn[] {

createColumn(Alarm.PROPERTY_ALARMID, 60, true),// 告警 ID ,宽度 60 ,显示为 true;

createColumn(Alarm.PROPERTY_ALARMSEVERITY, 100, true),// 告警级 别列

createColumn(Alarm.PROPERTY_ACKED, 50, true).// 告警确认 状态列。

setRenderer(new AcknowledgedRenderer()),// 设置 Renderer AcknowledgedRenderer

createColumn(Alarm.PROPERTY_ELEMENTID, 100, true).

// 设置 ELEMENTID

setRenderer(new ElementIDRenderer()),// 设置 ElementIDRenderer

createColumn(Alarm.PROPERTY_PROBABLECAUSE, 300, true),// 创建告警理由列

createColumn(Alarm.PROPERTY_ACKUSERID, 80, false),

// 告警确认用户 ID 列,不显示

createColumn(Alarm.PROPERTY_CLEARUSERID, 60, false),

// 清除告警用户 ID 列,不显示

createColumn(Alarm.PROPERTY_CLEARED, 40, false),

//

createColumn(Alarm.PROPERTY_ALARMTYPE, 60, false),

// 告警类型列,不显示

createColumn(Alarm.PROPERTY_TRENDINDICATION, 40, false),

createColumn(Alarm.PROPERTY_RAISEDTIME, 120, false),

// 告警升级时间列

createColumn(Alarm.PROPERTY_ACKTIME, 120, false),

// 告警确认时间列

createColumn(Alarm.PROPERTY_CLEAREDTIME, 120, false),

// 告警清楚时间列

createColumn(Alarm.PROPERTY_LASTCHANGEDTIME, 120, false),// 告警 最新修改时间 列

createColumn(Alarm.PROPERTY_CORRELATEDALARMS, 60, false),// 告警关 联告警列

createColumn(Alarm.PROPERTY_SPECIFICPROBLEM, 200, false),//

createColumn(Alarm.PROPERTY_ADDITIONALTEXT, 200, false),//

createColumn(Alarm.PROPERTY_COMMENTS, 200, false),

// 告警注释列

createColumn(Alarm.PROPERTY_PROPOSEDREPAIRACTION, 200, false),//

};

}

private static TTableColumn createColumn

(String name, int width, boolean visible) {

return new TTableColumn(name,

TWaverUtil.getString("alarm.property." + name), width).

setVisible(visible);

}

DataBox AlarmModel 联合工作

一旦创建了关联到 DataBox AlarmTable, 她将展示该 DataBox 里面的告警信息。我们知道所有告警信息都被 DataBox alarm model 所管理。所以说, alarm table 是一个被 DataBox alarm model 所驱动的组件

在告警 model 里,每个告警都被展示到表格的一行上,现在我们创建几个告警信 息并把他们放到 alarm model 中,看看在 alarm table 上将会发生什么

Node node5 = new Node();

box.addElement(node5);

node5.getAlarmState().clear();

for (int i = 0; i < 4; i++) {

AlarmSeverity severity = TWaverUtil.getRandomNonClearedSeverity ();

Alarm alarm = new Alarm(new Integer(50 + i * 10), node5.getID(), severity);

box.getAlarmModel().addAlarm(alarm);

}

TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)七_第1张图片

设置 DataBox:public void setDataBox(TDataBox box); 这里本人做个补充: Twaver 的人不会告诉你这里有一个性能优化的大用处,如果你生成表格的时候,就把 DataBox 和表格连接起来的话,再往表格里面放数据的话,性能是很慢的,如果一开始把表格和 DataBox 分开,先往 DataBox 实例里放数据,把数据放完之后,在使用该设置 databox 的方法,把表格和 DataBox 连接起来,界面展现很快。

设置 DataBox columns 使用这个方法:

public void setDataBox(TDataBox box,TTableColumn[] columns);

使用告警过滤器

在表格的过滤器里说过了这个过滤器,可以根据 alarm 对 象的所有属性来进行过滤, return false 即隐藏, true 为可见

TAlarmTable table = new TAlarmTable(box);

table.addVisibleFilter(new AlarmVisibleFilter(){

public boolean isVisible(Alarm alarm) {

return alarm.getAlarmSeverity()==AlarmSeverity.CRITICAL;

}

});

自定义 Alarm table 组件

默认的 alarm table 已经可以很好的支持呈现现 有的告警,包括使用默认可见的列,优先的列宽, cell renderers editors ,弹出菜单等等。但是你经常会去改变默认的设置去自己特殊的需 求。 在使用表组件部分中提及的所有功能都可以自定义在这里,请详见它

这里我们给出一个例子展 示一下怎么去定义一些告警新属性并展示在 alarm table 的自定义的列中

l       添加 alarm 对象的属性“ customIcon

l       alarm table 里展示“ customIcon

l       设置 user icon renderer 属性 customIcon

l       根据用户的 list 来改变 customIcon ”属性

定义“ customIcon ”属性

我们先定义一个 CustomIcon 类来封装 customIcon ”属性信息

class CustomIcon {

private String name = null ;

private Icon icon = null ;

public CustomIcon(String name, Icon icon) {

this .name = name;

this .icon = icon;

}

String getName() {

return name;

}

void setName(String name) {

this .name = name;

}

Icon getIcon() {

return icon;

}

void setIcon(Icon icon) {

this .icon = icon;

}

}

然后我们需要将 “customIcon” 信息附贴到 alarm 对象上,你可以使用一个标准的 java bean 作为一个属性附加到 alarm 对象上,就像 Alarm.setCustomIcon Alarm.getCustomIcon 一样,如下:

f or (int i = 1; i < 5; i++) {

AlarmSeverity severity = TWaverUtil.getRandomNonClearedSeverity ();

Alarm alarm = new Alarm(new Integer(50 + i * 10), node5.getID(), severity);

alarm.putClientProperty("CustomIcon", new CustomIcon("Icon_"+i,

TWaverUtil.getIcon ("/demo/resource/images/attachment" + i + ".png")));

box.getAlarmModel().addAlarm(alarm);

}

添加“ CustomIcon ”列

为了在表格上展示 CustomIcon 属性,我们需要创建一个表格列并把它加到 table Model 中。非常简单:、

TTableColumn ownerColumn = new TTableColumn("CustomIcon", "CustomIcon");// 列 展示名字 // 和列 名都为 CustomIcon

ownerColumn.setPreferredWidth(50);

alarmTable.getTableModel().addColumn(ownerColumn);

Twaverujian 将会试着获取“ customIcon ”属性从 Alarm 对象上,该对象携带者 java beans ,如果没有发现,将会试着 从客户端属性获取,如下

TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)七_第2张图片

 

Column 设置 Renderer Editor

到目前为止,属性已经展示到了 alarm table 上,为了能够用一种更友好的方式 renderer editor 属性“ customIcon ”,我们现在创建并设置 renderer editor 到新的列上。

// 创建 设置一个 renderer

ownerColumn.setRenderer(new DefaulstTableCellRenderer(){

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

JLabel label = (JLabel)super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);

if(value instanceof CustomIcon){

                                  CustomIcon owner =(CustomIcon)value;

                                  label.setIcon(owner.getIcon);

                                  label.setText(owner.getName());

}

return label;

}

});

TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)七_第3张图片

创建设置一个 editor

//1. 设 置 editable

ownerColumn.setEditable(true);

// 创建 一个 JComboBox 作为一个 Editor

JComboBox options = new JComboBox();

for(int i=1;i<5;i++){

options.addItem(new CustomIcon(“Icon_”+i,TWaverUtil.getIcon( getIcon ("/demo/resource/images/attachment" + i + ".png" )));

}

// JComboBox 创建一个 Renderer

Options.setRenderer(new DefaultListCellRenderer(){

     Public Component getListCellRendererComponent(JList list,Objcet value,int index,Boolean isSelected,Boolean cellHasFous){

  Super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);

if(value instanceof CustomIcon){

   CustomIcon icon = (CustomIcon) value;

this.setIcon(icon.getIcon);

this.setText(icon.getName);

}

return this;

}

});

//4. 创 建 Editor 并设置到列上

ownerColumn.setEditor(new DefaultCellEditor(options));

TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)七_第4张图片

你可能感兴趣的:(java,Swing)