package br.ufpr.c3sl.view.glossary; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.util.Observable; import java.util.Observer; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.text.Position; import br.ufpr.c3sl.model.Glossary; import br.ufpr.c3sl.view.principal.JpCarrie; // TODO: Auto-generated Javadoc /** * The Class GlossaryGUI created on Mar 31, 2009. * * @author Diego Marczal */ @SuppressWarnings("serial") public class GlossaryGUI extends JFrame implements Observer{ private JPanel jpMain; private JPanel jpLeft; private JPanel jpRight; private static JList list; private DefaultListModel listModel = new DefaultListModel(); private JLabel textExplain; private Glossary glossary; private static GlossaryGUI glossaryGui; private JTextFileldCompleter jtfCompleter; private JScrollPane listScrollPane; /** * Gets the single instance of GlossaryGUI. * * @return single instance of GlossaryGUI */ public static GlossaryGUI getInstance(){ if (glossaryGui == null){ glossaryGui = new GlossaryGUI(); return glossaryGui; }else return glossaryGui; } /** * Instantiates a new glossary gui. */ private GlossaryGUI(){ initializeVariables(); CompleterNotify.getInstance().addObserver(this); } /** * Initialize variables. */ private void initializeVariables(){ this.setLayout(new BorderLayout()); this.setFocusableWindowState(true); glossary = new Glossary(); jpMain = new JPanel(); jpMain.setLayout(new BorderLayout()); jpMain.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("Glossário"), BorderFactory.createEmptyBorder(5,5,5,5))); jpMain.setPreferredSize(new Dimension(600, 200)); jpLeft = new JPanel(); jpLeft.setBorder(BorderFactory.createEtchedBorder()); jpLeft.setLayout(new BorderLayout()); jpRight = new JPanel(new BorderLayout()){ public Dimension getPreferredSize(){ Dimension d = new Dimension(); d.width = 300; return d; } }; jpRight.setBorder(BorderFactory.createEtchedBorder()); jpRight.setLayout(new BorderLayout()); jpRight.setBackground(Color.WHITE); textExplain = new JLabel(); list = new JList(listModel); //data has type Object[] list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.addListSelectionListener(new ListSelectionListener(){ public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting() == false) { if (list.getSelectedValue() != null){ StringBuffer conteudo = new StringBuffer(); conteudo.append("<html>") .append("<div style=\"padding:5px\" align=\"justify\">") .append("<p style=\"text-indent: 15px;\">") .append(glossary.getValueOfKey(list.getSelectedValue().toString())) .append("</p>") .append("</div>") .append("<html>"); textExplain.setText(conteudo.toString()); }else textExplain.setText(""); } } }); list.setVisibleRowCount(8); listScrollPane = new JScrollPane(list); //JScrollPane jpRightScrollPane = new JScrollPane(jpRight);//, //JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); updateListModel(glossary.getKeys()); jpRight.add(textExplain, BorderLayout.NORTH); jpMain.add(jpLeft, BorderLayout.WEST); jpMain.add(jpRight, BorderLayout.CENTER); jtfCompleter = new JTextFileldCompleter(15); jtfCompleter.setLitOflistOfWords(listModel.toArray()); jpLeft.add(jtfCompleter, BorderLayout.NORTH); jpLeft.add(listScrollPane,BorderLayout.CENTER); String initialText = "<html>\n" + "<p style='padding:5px;text-align: justify;'>Glossário de Termos</p>"+ "</html>\n"; textExplain.setText(initialText); this.add(jpMain,BorderLayout.CENTER); this.pack(); this.setTitle("Glossário"); //this.setResizable(false); this.setLocationRelativeTo(JpCarrie.getInstance()); this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); } /** * Update list model. * * @param Object[] */ private void updateListModel(Object[] ob){ listModel.clear(); for (int i = 0; i < ob.length; i++) { listModel.addElement(ob[i]); } list.setSelectedIndex(0); } /** * show the key "s" explanation of glossary in the screen * * @param String */ @SuppressWarnings("static-access") public static void updateHyperLink(String s) { int index = GlossaryGUI.getInstance().list.getNextMatch(s, 0, Position.Bias.Forward ); GlossaryGUI.getInstance().list.setSelectedIndex(index); list.ensureIndexIsVisible(index); if (GlossaryGUI.getInstance().isVisible()){ javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { try { GlossaryGUI.getInstance().setVisible(false); Thread.sleep(200); GlossaryGUI.getInstance().setVisible(true); GlossaryGUI.getInstance().toFront(); GlossaryGUI.getInstance().requestFocus(); } catch (Exception e) { e.printStackTrace(); } } }); }else GlossaryGUI.getInstance().setVisible(true); } /** * Checks if is ok. * * @return true, if is ok */ public boolean isOk(){ return glossary.existGlossary(); } /* (non-Javadoc) * @see java.util.Observer#update(java.util.Observable, java.lang.Object) */ public void update(Observable o, Object arg) { updateListModel(jtfCompleter.getFindedWords()); } // public static void createAndShowGUI() throws Exception { // //Create and set up the window. // MainGlossary frame = new MainGlossary(); // frame.pack(); // frame.setTitle("Glossário"); // frame.setResizable(false); // frame.setLocationRelativeTo(null); // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // frame.setVisible(true); // } // // // public static void main(String[] args) { // javax.swing.SwingUtilities.invokeLater(new Runnable() { // public void run() { // try { // MainGlossary.createAndShowGUI(); // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // }); // } }