::Dictionary:: อัญชลี อริยะวุฒิพันธ์ 483 06187 21 import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JScrollPane; import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array; public class Dictionary extends javax.swing.JApplet { private MapToHeap dic; private javax.swing.JTextArea areaList; private javax.swing.JList areaMean; private javax.swing.JButton btAdd; private javax.swing.JButton btList; private javax.swing.JButton btListAll; private javax.swing.JButton btRemove; private javax.swing.JButton btSearch; private javax.swing.JButton btSelect; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTextField listFrom; private javax.swing.JTextField listTo; private javax.swing.JTextField mean; private javax.swing.JTextField word; public Dictionary() { initComponents(); dic = new MapToHeap(); dic.put("attraction","การดึงดูด",0); dic.put("attraction","แรงดึงดูด",1); dic.put("bee","ผึ้ง",0); dic.put("love","หลงรัก",0); dic.put("love","ความรัก",1); dic.put("heart","หัวใจ",0); dic.put("flirt","คนเจ้าชู้",0); dic.put("mad","โกรธจัด",0); dic.put("mad","วิกลจริต",1); dic.put("slur","พูดไม่ค่อยชัด",0); dic.put("paradox","สิ่งผิดปกติ",0); dic.put("potato","มันฝรั่ง",0); dic.put("armchair","เก้าอี้ที่มีที่วางแขน",0); dic.put("L'Arc~en~Ciel","สายรุ้ง",0); dic.put("silly","โง่",0); dic.put("fool","คนโง่",0); dic.put("futon","ที่นอนหรือฟูกของญี่ปุ่น",0); dic.put("modern","คนสมัยใหม่",0); dic.put("modern","สมัยใหม่",1); dic.put("dog","สุนัข",2); dic.put("dog","คนน่าเบื่อ (คำไม่เป็นทางการ)",1); dic.put("dog","ตะแกรงเหล็ก",0); dic.put("computer","ผู้คำนวณ",0); dic.put("JLab","ปี1 ต้องรู้จัก หึๆ",0); dic.put("eclipse","ปี2 ต้องรู้จัก หึๆๆ",0); dic.put("mashup","เจอมาแล้วใน ISO หึๆๆๆ",0); dic.put("Eve","4830618721",0); dic.put("Eve","ผู้หญิงคนแรกที่พระแจ้งสร้างขึ้นตามพระคัมภีร์ไบเบิ้ล",1); // ********Add********* btAdd.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub //ถ้าไม่พิมพ์คำศัพท์ใดๆ เลย if(word.getText()==null||word.getText().equals("")||mean.getText()==null||mean.getText().equals("")){ //areaMean.setText("Please Enter your word and meaning."); String []s1 = {"Please Enter your word and meaning."}; areaMean.setListData(s1); return; } else{ Heap h = dic.get(word.getText()); //เมื่อคำที่เพิ่มเข้ามาไม่มีอยู่เดิมก็สามารถเพิ่มเข้าไปได้เลย if (h == null){ dic.put(word.getText(), mean.getText(), 0); //แสดงผลลัพธ์จากการเพิ่ม HeapNode[] heap = h.getHeap(); String[] s = new String[heap.length+1]; s[0] = "The word is already added."; for (int i = 1; i < heap.length+1; ++i){ s[i] = (i) + ".) "+(String) heap[i-1].value; } areaMean.setListData(s); } //ถ้ามีคำศัพท์อยู่แล้วให้เพิ่มความหมาย else{ h.add(mean.getText(), 0); //แสดงผลลัพธ์จากการเพิ่ม HeapNode[] heap = h.getHeap(); String[] s = new String[heap.length+1]; s[0] = "The meaning is already added."; for (int i = 1; i < heap.length+1; ++i){ s[i] = (i) + ".) "+(String) heap[i-1].value; } areaMean.setListData(s); } } } }); //********Search********* btSearch.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub Heap h = dic.get(word.getText()); // ถ้าไม่พิมพ์คำศัพท์ใดๆ เลย if(word.getText()==null||word.getText().equals("")){ String []s1 = {"Please Enter your word."}; areaMean.setListData(s1); } //ถ้าคำศัพท์ไม่มีอยู่ใน Dictionary else if(h==null){ String []s1 = {"Sorry, the word is not found","in this dictionary.","TT____TT"}; areaMean.setListData(s1); } //ถ้าคำศัพท์มีอยู่ใน Dictionary //ให้แสดงคำแปลทั้งหมดใน heap โดยเรียงแบบ level-order else{ HeapNode[] heap = h.getHeap(); String[] s = new String[heap.length]; for (int i = 0; i < heap.length; ++i){ s[i] = (i+1) + ".) "+(String) heap[i].value; } areaMean.setListData(s); } } }); //********Remove********* btRemove.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub //ถ้าไม่พิมพ์คำศัพท์ใดๆ เลย Heap h = dic.get(word.getText()); if(word.getText()==null||word.getText().equals("")){ String []s1 = {"Please Enter your word."}; areaMean.setListData(s1); } //ถ้าคำศัพท์ไม่มีอยู่ใน Dictionary else if(h==null){ String []s1 = {"Sorry, the word is not found","in this dictionary.","TT____TT"}; areaMean.setListData(s1); } //ถ้าพิมพ์แต่คำศัพท์ ไม่พิมพ์คำแปล ให้ลบคำศัพท์นั้นออกไปเลย else if (mean.getText() == null || mean.getText().equals("")){ dic.remove(word.getText()); String []s1 = {"The word is already removed."}; areaMean.setListData(s1); } //ถ้าพิมพ์คำแปลด้วยก็ให้ลบแต่คำแปล else{ dic.remove(word.getText(), mean.getText()); String []s = new String[4]; s[0] = "The meaning is already removed."; //ถ้าศัพท์นั้นไม่เหลือคำแปลแล้ว ก็ให้ลบคำศัพท์นั้นออกไปเลย if (h.size() == 0){ dic.remove(word.getText()); s[1] = "But there is not any meaning of"; s[2] = "the word [ "+word.getText()+" ]."; s[3] = "The word must be removed."; } //แสดงผลหลังจาก remove areaMean.setListData(s); } } }); //********Select********* btSelect.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub Object[] sel = (Object[]) areaMean.getSelectedValues(); Object[] selected = new Object[sel.length]; for(int i=0; i < sel.length; i++){ int ind = ((String) sel[i]).indexOf(' '); selected[i] = ((String)sel[i]).substring(ind+1); } //ถ้าไม่ได้เลือกอะไรเลย if (selected.length == 0) { String []s1 = {"Please select a meaning."}; areaMean.setListData(s1); } String wordSel = word.getText(); Heap h = dic.get(wordSel); if (h == null) { // ถ้าไม่มี heap แสดงว่าไม่มีคำศัพท์นี้แล้ว String []s1 = {"There is no such a word."}; areaMean.setListData(s1); } int pri = 0; Object val; for (int i = 0; i < selected.length; ++i) { HeapNode heap = h.find(selected[i]); if (heap != null) { // ถ้ายังมีความหมายนึ้อยู่ใน dic อยู่ก็เพิ่ม priority pri = heap.priority; val = heap.value; pri += 1; h.add(val, pri); String []s1 = {"The meaning is already selected."}; areaMean.setListData(s1); } } } }); // ********List********* btList.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub if (listFrom.getText() == null || listFrom.getText().equals("") || listTo.getText() == null || listTo.getText().equals("")) { areaList.setText("Please enter both From-Word and To-Word."); } else{ MapToHeap between = dic.subMap(listFrom.getText(), listTo.getText()); if (between == null) { areaList.setText("There's no word between the 2 words."); } AvlNode[] avlWord = between.map.toArray(); String[] wordArray = new String[avlWord.length]; String s = ""; for (int i = 0; i < wordArray.length; ++i) { wordArray[i] = (String) avlWord[i].key; } Arrays.sort(wordArray); for (int i = 0; i < wordArray.length; ++i) s+=(i+1)+".) "+wordArray[i]+'\n'; areaList.setText(s); } } }); btListAll.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub AvlNode[] avlWord = dic.map.toArray(); String[] wordArray = new String[avlWord.length]; String s = ""; for (int i = 0; i < wordArray.length; ++i) { wordArray[i] = (String) avlWord[i].key; } Arrays.sort(wordArray); for (int i = 0; i < wordArray.length; ++i) s+=(i+1)+".) "+wordArray[i]+'\n'; areaList.setText(s); } }); } private void initComponents() { jPanel1 = new javax.swing.JPanel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); listTo = new javax.swing.JTextField(); listFrom = new javax.swing.JTextField(); btList = new javax.swing.JButton(); jScrollPane2 = new javax.swing.JScrollPane(); areaList = new javax.swing.JTextArea(); btListAll = new javax.swing.JButton(); jPanel2 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); mean = new javax.swing.JTextField(); word = new javax.swing.JTextField(); btSearch = new javax.swing.JButton(); btSelect = new javax.swing.JButton(); btRemove = new javax.swing.JButton(); btAdd = new javax.swing.JButton(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); areaMean = new javax.swing.JList(); setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); setForeground(new java.awt.Color(255, 204, 204)); jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jLabel5.setText("List From :"); jLabel6.setText("List To :"); jLabel4.setText("::List::"); listTo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { listToActionPerformed(evt); } }); btList.setText("List!!!"); areaList.setColumns(20); areaList.setRows(5); jScrollPane2.setViewportView(areaList); btListAll.setText("List All"); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 198, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addGap(21, 21, 21) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel4) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel6) .addGroup(jPanel1Layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel5))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(listFrom, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE) .addComponent(listTo))))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(btList) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btListAll))) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(listFrom, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel5)) .addGap(15, 15, 15) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(listTo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btListAll) .addComponent(btList)) .addGap(9, 9, 9) .addComponent(jLabel4) .addGap(14, 14, 14) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE) .addContainerGap()) ); jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jLabel1.setText("WorD :"); word.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { wordActionPerformed(evt); } }); btSearch.setText("SeaRcH!!!"); btSelect.setText("Select >_<"); btRemove.setText("Remove T_T"); btAdd.setText("Add ^O^"); jLabel2.setText("MeaninG :"); jLabel3.setText("::Meaning::"); jScrollPane1.setViewportView(areaMean); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 22, Short.MAX_VALUE) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(word, javax.swing.GroupLayout.DEFAULT_SIZE, 139, Short.MAX_VALUE) .addComponent(mean))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addComponent(btAdd) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btSelect) .addGap(16, 16, 16))) .addContainerGap()) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addContainerGap(78, Short.MAX_VALUE) .addComponent(btRemove) .addGap(66, 66, 66)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addContainerGap(77, Short.MAX_VALUE) .addComponent(btSearch, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(69, 69, 69)) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(19, 19, 19) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 208, Short.MAX_VALUE) .addComponent(jLabel3)) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(word, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(17, 17, 17) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(mean, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(27, 27, 27) .addComponent(btSearch, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btSelect, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btAdd, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btRemove, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(21, 21, 21) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(20, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); }// private void listToActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void wordActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); frame.setTitle(".+:* Dictionary *:+."); Dictionary dict = new Dictionary(); frame.getContentPane().add(dict); frame.setVisible(true); frame.pack(); } }); } }