|
|
LogicEquivApp
ProofTable.java
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.text.*;
class ProofTable extends JScrollPane {
ProofModel PModel;
JTable pTable;
ProofTable(String S) { initTable(S); }
public void initTable(String S) {
PModel=new ProofModel(S);
pTable=new JTable(PModel) {
public TableCellRenderer getCellRenderer(int row,int column) {
if(column==0) { return new EquationRenderer(); }
else { // column==1
DefaultTableCellRenderer GRend=
new DefaultTableCellRenderer();
GRend.setBackground(new Color(150,150,250));
return GRend;
}
}
};
pTable.getColumnModel().getColumn(0).setPreferredWidth(335);
pTable.getColumnModel().getColumn(0).setMinWidth(335);
pTable.getColumnModel().getColumn(1).setPreferredWidth(180);
pTable.getColumnModel().getColumn(1).setMinWidth(180);
pTable.setBackground(new Color(150,250,150));
pTable.setShowVerticalLines(false);
pTable.setShowGrid(false);
pTable.setIntercellSpacing(new Dimension(0,0));
pTable.setRowHeight(20);
pTable.setFont(new Font(pTable.getFont().getFontName(),
pTable.getFont().getStyle(),14));
pTable.getTableHeader().setReorderingAllowed(false);
pTable.setSelectionMode(0);
this.setViewportView(pTable);
this.setPreferredSize(new Dimension(620,360));
this.validate();
}
public void addRow(Object []S) {
PModel.addRow(S);
pTable.getColumnModel().getColumn(0).setPreferredWidth(335);
pTable.getColumnModel().getColumn(0).setMinWidth(335);
pTable.getColumnModel().getColumn(1).setPreferredWidth(180);
pTable.getColumnModel().getColumn(1).setMinWidth(180);
this.validate();
}
public void updateCell(Object S,int row,int column) {
PModel.setValueAt(S,row,column);
pTable.getColumnModel().getColumn(0).setPreferredWidth(335);
pTable.getColumnModel().getColumn(0).setMinWidth(335);
pTable.getColumnModel().getColumn(1).setPreferredWidth(180);
pTable.getColumnModel().getColumn(1).setMinWidth(180);
this.validate();
}
public String deleteRow() {
String S=PModel.deleteRow();
pTable.getColumnModel().getColumn(0).setPreferredWidth(335);
pTable.getColumnModel().getColumn(0).setMinWidth(335);
pTable.getColumnModel().getColumn(1).setPreferredWidth(180);
pTable.getColumnModel().getColumn(1).setMinWidth(180);
this.validate();
return S;
}
public int rowCount() {
return PModel.getRowCount();
}
}
//---------------------------------------------------------------------
class ProofModel extends AbstractTableModel {
String []Head={"","Equivalence"};
Object[][] theValues=new Object[50][];
int rows;
ProofModel(String S) {
initTable(S);
}
public void addRow(Object []S) {
theValues[rows]=S;
rows++;
fireTableStructureChanged();
}
public String removeAts(String A) {
String B=A;
while(B.indexOf('@')!=-1) {
int b=B.indexOf('@');
if(b==0)
B=B.substring(1,B.length());
else if(b==B.length()-1)
B=B.substring(0,B.length()-1);
else
B=B.substring(0,b)+B.substring(b+1,B.length());
}
return B;
}
public String deleteRow() {
if(rows>=1) {
rows--;
theValues[rows]=null;
fireTableStructureChanged();
String S=(String) theValues[rows-1][0];
setValueAt(removeAts(S),rows-1,0);
if(rows!=1) S=S.substring(4,S.length());
return removeAts(S);
}
else { return ""; }
}
public void initTable(String S) {
String[]newRow=new String[2];
newRow[0]=S;
newRow[1]="";
addRow(newRow);
fireTableStructureChanged();
}
public int getColumnCount() {
return 2;
}
public int getRowCount() {
return rows;
}
public String getColumnName(int col) {
return Head[col];
}
public Object getValueAt(int row, int col) {
return theValues[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
return false;
}
public void setValueAt(Object value, int row, int col) {
theValues[row][col]=value;
}
};
class EquationRenderer extends JTextPane implements TableCellRenderer {
DefaultStyledDocument lsd;
public EquationRenderer() {
super();
lsd = new DefaultStyledDocument();
//setLineWrap(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
setBackground(new Color(100,250,100));
String S=(String) value;
String[] initString;
SimpleAttributeSet[] attrs;
int F=S.indexOf('@');
int L=S.lastIndexOf('@');
if(F!=-1) {
initString = new String[3];
initString[0]=S.substring(0,F);
initString[1]=S.substring(F+1,L);
initString[2]=S.substring(L+1,S.length());
attrs = new SimpleAttributeSet[3];
attrs[0] = new SimpleAttributeSet();
StyleConstants.setFontFamily(attrs[0], "Lucida Sans");
StyleConstants.setFontSize(attrs[0], 14);
attrs[1] = new SimpleAttributeSet(attrs[0]);
StyleConstants.setForeground(attrs[1], new Color(255,50,50));
attrs[2] = new SimpleAttributeSet(attrs[0]);
}
else {
initString = new String[1];
initString[0]=S;
attrs = new SimpleAttributeSet[1];
attrs[0] = new SimpleAttributeSet();
StyleConstants.setFontFamily(attrs[0], "Lucida Sans");
StyleConstants.setFontSize(attrs[0], 14);
}
setDocument(lsd);
try {
for (int i = 0; i < initString.length; i ++) {
lsd.insertString(lsd.getLength(), initString[i], attrs[i]);
}
} catch (BadLocationException ble) {
System.err.println("Couldn't insert initial text."); }
return this;
}
}
|