//--------------------------------------------------------------------------------// // COPYRIGHT NOTICE // //--------------------------------------------------------------------------------// // Copyright (c) 2012, Instituto de Microelectronica de Sevilla (IMSE-CNM) // // // // All rights reserved. // // // // Redistribution and use in source and binary forms, with or without // // modification, are permitted provided that the following conditions are met: // // // // * Redistributions of source code must retain the above copyright notice, // // this list of conditions and the following disclaimer. // // // // * Redistributions in binary form must reproduce the above copyright // // notice, this list of conditions and the following disclaimer in the // // documentation and/or other materials provided with the distribution. // // // // * Neither the name of the IMSE-CNM nor the names of its contributors may // // be used to endorse or promote products derived from this software // // without specific prior written permission. // // // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE // // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // //--------------------------------------------------------------------------------// //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// //REPRESENTACION MATRICIAL DE LA BASE DE REGLAS // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// package xfuzzy.xfedit; import xfuzzy.lang.*; import xfuzzy.util.*; import javax.swing.*; import java.awt.*; public class XfeditRulebaseMatrixPanel extends JPanel { /** * C�digo asociado a la clase serializable */ private static final long serialVersionUID = 95505666603035L; //----------------------------------------------------------------------------// // MIEMBROS PRIVADOS // //----------------------------------------------------------------------------// /** * Modelo de la tabla que representa la base de reglas en formato matricial */ private XfeditRulebaseMatrixModel model; //----------------------------------------------------------------------------// // CONSTRUCTOR // //----------------------------------------------------------------------------// /** * Constructor */ public XfeditRulebaseMatrixPanel() { super(); setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); } //----------------------------------------------------------------------------// // M�TODOS P�BLICOS // //----------------------------------------------------------------------------// /** * Obtiene las reglas y las almacena en la base de reglas */ public boolean getRules(Rulebase copy) { if(model == null) return true; else return model.getRules(copy); } /** * Actualiza el contenido del panel */ public void refresh(Rulebase copy) { removeAll(); Variable inputs[] = copy.getInputs(); Variable outputs[] = copy.getOutputs(); if(inputs.length != 2 || outputs.length != 1) { add(Box.createVerticalGlue()); add(Box.createVerticalStrut(10)); add(msglabel("Cannot represent this rulebase as a matrix")); add(Box.createVerticalStrut(10)); add(msglabel("Matrix form needs two input variables")); add(msglabel("and one output variable")); add(Box.createVerticalStrut(10)); add(Box.createVerticalGlue()); return; } model = new XfeditRulebaseMatrixModel(copy); if(!model.isValid()) { add(Box.createVerticalGlue()); add(Box.createVerticalStrut(10)); add(msglabel("Cannot represent this rulebase as a matrix")); add(Box.createVerticalStrut(10)); add(msglabel("Rules must include only AND conectives")); add(msglabel("and equality relations")); add(Box.createVerticalStrut(10)); add(Box.createVerticalGlue()); return; } JLabel label0 = new JLabel(inputs[0].toString()); label0.setForeground(Color.black); label0.setFont(XConstants.font); JLabel label1 = new JLabel(inputs[1].toString()); label1.setForeground(Color.black); label1.setFont(XConstants.font); JTable table = new JTable(model); table.setDefaultRenderer(Object.class,model); table.setDefaultEditor(Object.class,model.getEditor()); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setColumnSelectionAllowed(false); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.getTableHeader().setReorderingAllowed(false); table.getTableHeader().setFont(XConstants.font); Box box = new Box(BoxLayout.X_AXIS); box.add(Box.createHorizontalStrut(10)); box.add(label0); box.add(Box.createHorizontalStrut(10)); box.add(new JScrollPane(table)); box.add(Box.createHorizontalStrut(10)); add(Box.createVerticalGlue()); add(Box.createVerticalStrut(10)); add(label1); add(Box.createVerticalStrut(10)); add(box); add(Box.createVerticalStrut(10)); add(Box.createVerticalGlue()); } //----------------------------------------------------------------------------// // M�TODOS PRIVADOS // //----------------------------------------------------------------------------// /** * Genera una etiqueta con el mensaje especificado */ private Box msglabel(String msg) { JLabel label = new JLabel(msg); label.setFont(XConstants.font); label.setForeground(Color.red); Box box = new Box(BoxLayout.X_AXIS); box.add(Box.createHorizontalGlue()); box.add(label); box.add(Box.createHorizontalGlue()); return box; } }