📄 arfftablemodel.java
字号:
return result;
}
/**
* returns the number of columns in the model
*/
public int getColumnCount() {
int result;
result = 1;
if (data != null)
result += data.numAttributes();
return result;
}
/**
* checks whether the column represents the class or not
*/
private boolean isClassIndex(int columnIndex) {
boolean result;
int index;
index = data.classIndex();
result = ((index == - 1) && (data.numAttributes() == columnIndex))
|| (index == columnIndex - 1);
return result;
}
/**
* returns the name of the column at columnIndex
*/
public String getColumnName(int columnIndex) {
String result;
result = "";
if ( (columnIndex >= 0) && (columnIndex < getColumnCount()) ) {
if (columnIndex == 0) {
result = "<html><center>No.<br><font size=\"-2\"> </font></center></html>";
}
else {
if (data != null) {
if ( (columnIndex - 1 < data.numAttributes()) ) {
result = "<html><center>";
// name
if (isClassIndex(columnIndex))
result += "<b>"
+ data.attribute(columnIndex - 1).name()
+ "</b>";
else
result += data.attribute(columnIndex - 1).name();
// attribute type
switch (getType(columnIndex)) {
case Attribute.DATE:
result += "<br><font size=\"-2\">Date</font>";
break;
case Attribute.NOMINAL:
result += "<br><font size=\"-2\">Nominal</font>";
break;
case Attribute.STRING:
result += "<br><font size=\"-2\">String</font>";
break;
case Attribute.NUMERIC:
result += "<br><font size=\"-2\">Numeric</font>";
break;
}
result += "</center></html>";
}
}
}
}
return result;
}
/**
* returns the number of rows in the model
*/
public int getRowCount() {
if (data == null)
return 0;
else
return data.numInstances();
}
/**
* checks whether the value at the given position is missing
*/
public boolean isMissingAt(int rowIndex, int columnIndex) {
boolean result;
result = false;
if ( (rowIndex >= 0) && (rowIndex < getRowCount())
&& (columnIndex > 0) & (columnIndex < getColumnCount()) )
result = (data.instance(rowIndex).isMissing(columnIndex - 1));
return result;
}
/**
* returns the value for the cell at columnindex and rowIndex
*/
public Object getValueAt(int rowIndex, int columnIndex) {
Object result;
String tmp;
result = null;
if ( (rowIndex >= 0) && (rowIndex < getRowCount())
&& (columnIndex >= 0) & (columnIndex < getColumnCount()) ) {
if (columnIndex == 0) {
result = new Integer(rowIndex + 1);
}
else {
if (isMissingAt(rowIndex, columnIndex)) {
result = null;
}
else {
switch (getType(columnIndex)) {
case Attribute.DATE:
case Attribute.NOMINAL:
case Attribute.STRING:
result = data.instance(rowIndex).stringValue(columnIndex - 1);
break;
case Attribute.NUMERIC:
result = new Double(data.instance(rowIndex).value(columnIndex - 1));
break;
}
}
}
}
if (getType(columnIndex) != Attribute.NUMERIC) {
if (result != null) {
// does it contain "\n" or "\r"? -> replace with ", "
tmp = result.toString();
if ( (tmp.indexOf("\n") > -1) || (tmp.indexOf("\r") > -1) ) {
tmp = tmp.replaceAll("\\r\\n", ", ");
tmp = tmp.replaceAll("\\r", ", ").replaceAll("\\n", ", ");
tmp = tmp.replaceAll(", $", "");
result = tmp;
}
}
}
return result;
}
/**
* returns true if the cell at rowindex and columnindexis editable
*/
public boolean isCellEditable(int rowIndex, int columnIndex) {
return (columnIndex > 0);
}
/**
* sets the value in the cell at columnIndex and rowIndex to aValue.
* but only the value and the value can be changed
*/
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
setValueAt(aValue, rowIndex, columnIndex, true);
}
/**
* sets the value in the cell at columnIndex and rowIndex to aValue.
* but only the value and the value can be changed
*/
public void setValueAt(Object aValue, int rowIndex, int columnIndex, boolean notify) {
int type;
int index;
String tmp;
Instance inst;
Attribute att;
Object oldValue;
if (!ignoreChanges)
addUndoPoint();
oldValue = getValueAt(rowIndex, columnIndex);
type = getType(rowIndex, columnIndex);
index = columnIndex - 1;
inst = data.instance(rowIndex);
att = inst.attribute(index);
// missing?
if (aValue == null) {
inst.setValue(index, Instance.missingValue());
}
else {
tmp = aValue.toString();
switch (type) {
case Attribute.DATE:
try {
att.parseDate(tmp);
inst.setValue(index, att.parseDate(tmp));
}
catch (Exception e) {
// ignore
}
break;
case Attribute.NOMINAL:
if (att.indexOfValue(tmp) > -1)
inst.setValue(index, att.indexOfValue(tmp));
break;
case Attribute.STRING:
inst.setValue(index, tmp);
break;
case Attribute.NUMERIC:
try {
Double.parseDouble(tmp);
inst.setValue(index, Double.parseDouble(tmp));
}
catch (Exception e) {
// ignore
}
break;
}
}
// notify only if the value has changed!
if (notify && (!("" + oldValue).equals("" + aValue)) )
notifyListener(new TableModelEvent(this, rowIndex, columnIndex));
}
/**
* adds a listener to the list that is notified each time a change to data
* model occurs
*/
public void addTableModelListener(TableModelListener l) {
listeners.add(l);
}
/**
* removes a listener from the list that is notified each time a change to
* the data model occurs
*/
public void removeTableModelListener(TableModelListener l) {
listeners.remove(l);
}
/**
* notfies all listener of the change of the model
*/
public void notifyListener(TableModelEvent e) {
Iterator iter;
TableModelListener l;
// is notification enabled?
if (!isNotificationEnabled())
return;
iter = listeners.iterator();
while (iter.hasNext()) {
l = (TableModelListener) iter.next();
l.tableChanged(e);
}
}
/**
* removes the undo history
*/
public void clearUndo() {
undoList = new Vector();
}
/**
* returns whether an undo is possible, i.e. whether there are any undo points
* saved so far
*
* @return returns TRUE if there is an undo possible
*/
public boolean canUndo() {
return !undoList.isEmpty();
}
/**
* undoes the last action
*/
public void undo() {
ArffTableSorter model;
File tempFile;
Instances inst;
ObjectInputStream ooi;
if (canUndo()) {
// load file
tempFile = (File) undoList.get(undoList.size() - 1);
try {
// read serialized data
ooi = new ObjectInputStream(new BufferedInputStream(new FileInputStream(tempFile)));
inst = (Instances) ooi.readObject();
ooi.close();
// set instances
setInstances(inst);
notifyListener(new TableModelEvent(this, TableModelEvent.HEADER_ROW));
notifyListener(new TableModelEvent(this));
}
catch (Exception e) {
e.printStackTrace();
}
tempFile.delete();
// remove from undo
undoList.remove(undoList.size() - 1);
}
}
/**
* adds an undo point to the undo history, if the undo support is enabled
* @see #isUndoEnabled()
* @see #setUndoEnabled(boolean)
*/
public void addUndoPoint() {
ArffTableSorter model;
File tempFile;
ObjectOutputStream oos;
// undo support currently on?
if (!isUndoEnabled())
return;
if (getInstances() != null) {
try {
// temp. filename
tempFile = File.createTempFile("arffviewer", null);
tempFile.deleteOnExit();
// serialize instances
oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(tempFile)));
oos.writeObject(getInstances());
oos.flush();
oos.close();
// add to undo list
undoList.add(tempFile);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -