Скачать 0.82 Mb.
|
Приложение 2 Код приложения «GeneratorDB»Класс Main import java.awt.*; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.table.DefaultTableModel; import java.util.*; import java.net.URL; import java.sql.*; import java.io.*; import java.util.List; import javax.swing.DefaultListModel; import javax.swing.SpinnerNumberModel; import java.lang.Object; public class Main extends javax.swing.JFrame { int products_max = 26; DefaultTableModel model = new DefaultTableModel(); //Таблица, в которой в одном кортеже содержится один продукт DefaultTableModel model_compact = new DefaultTableModel(); // Таблица, в которой в одном кортеже содержится весь список продуктов входящих в данную транзакцию SpinnerNumberModel spinnerTransNumber_model = new SpinnerNumberModel(100, 0, 100000, 1); // Количество добовляемых транзакций SpinnerNumberModel spinnerNumElements_model = new SpinnerNumberModel(26, 1, 1000, 1); // Количество видов продуктов SpinnerNumberModel spinnerMinElements_model = new SpinnerNumberModel(1, 1, 1000, 1); // Минимальное количество продуктов в одной транзакции SpinnerNumberModel spinnerMaxElements_model = new SpinnerNumberModel(26, 1, 1000, 1);// Максимальное количество продуктов в одной транзакции DefaultListModel products = new DefaultListModel();//Лист с видами продуктов DefaultListModel products_id = new DefaultListModel(); // Лист с id продуктов которые присутствуют в базе Map prod; // Отношение (название продукта, номер продукта) Random generator = new Random(); String alphabet = "abcdefghijklmnopqrstuvwxyz"; // Виды продуктов (для теста) String shop[] = {"Молоко", "Хлеб", "Вода", "Пэпси", "Фанта", "Сникерс", "Спрайт", "Баунти", "Марс", "Кефир", "Бананы", "Огурцы", "Помидоры", "Яйца", "Картошка", "Жидкость_для_мытья_посуды", "Шоколад", "Пицца", "Орехи", "Лук"}; String product_name[] = new String[1000]; // Названия продуктов int uid = 1, // ID записи tid = 1; // ID транзакции int new_num = 2; // Число колонок в model_compact int product_count[] = new int[1000];// Количетво продуктов вида i в базе boolean compact = false; // В компактном виде? List newTrans = new ArrayList(); FileWriter fw; BufferedWriter bw; /** Creates new form Main */ public Main() { this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); initComponents(); // Связывание моделей таблиц с элементами Swing jTable.setModel(model); jRowsNumber.setModel(spinnerTransNumber_model); jNumElements.setModel(spinnerNumElements_model); jMinElements.setModel(spinnerMinElements_model); jMaxElements.setModel(spinnerMaxElements_model); jVarList.setModel(products); prod = new HashMap(); for (int i = 0; i < products_max; i++) { product_name[i] = String.valueOf(alphabet.charAt(i)); prod.put(String.valueOf(alphabet.charAt(i)), i); } refreshVars(); refreshAll(); } private void initComponents() { jAddingProductDialog = new javax.swing.JDialog(); jNewProductName = new javax.swing.JTextField(); jLabelProductName = new javax.swing.JLabel(); jAddProduct = new javax.swing.JButton(); jCancelAdding = new javax.swing.JButton(); jChangingProductsDialog = new javax.swing.JDialog(); jMakeAlphabet = new javax.swing.JButton(); jMake1000 = new javax.swing.JButton(); jMakeShopProducts = new javax.swing.JButton(); jCancelChanging = new javax.swing.JButton(); jScrollPane2 = new javax.swing.JScrollPane(); jTable = new javax.swing.JTable(); jRowsNumber = new javax.swing.JSpinner(); jDeleteRow = new javax.swing.JButton(); jNumElements = new javax.swing.JSpinner(); jLabelNumElements = new javax.swing.JLabel(); jRandomize = new javax.swing.JButton(); jLabelTransNum = new javax.swing.JLabel(); jMinElements = new javax.swing.JSpinner(); jMaxElements = new javax.swing.JSpinner(); jLabel2 = new javax.swing.JLabel(); jLabelMinElements = new javax.swing.JLabel(); jLabelMaxElements = new javax.swing.JLabel(); jSetDefaultModel = new javax.swing.JButton(); jCompact = new javax.swing.JToggleButton(); jPanel1 = new javax.swing.JPanel(); jScrollPane3 = new javax.swing.JScrollPane(); jVarList = new javax.swing.JList(); jAddVar = new javax.swing.JButton(); jDeleteVar = new javax.swing.JButton(); jClearTrans = new javax.swing.JButton(); jGenerate = new javax.swing.JButton(); jRandomPlace2 = new javax.swing.JRadioButton(); jOpenAdding = new javax.swing.JButton(); jDefaultProducts = new javax.swing.JButton(); jWrite = new javax.swing.JButton(); jWriteFile = new javax.swing.JTextField(); jOpen = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jRandomPlace = new javax.swing.JRadioButton(); jNewTrans = new javax.swing.JTextField(); jConsole = new javax.swing.JLabel(); jState = new javax.swing.JProgressBar(); //панель для создания базы SuperPanel=new javax.swing.JPanel(); UpPanel=new javax.swing.JPanel(); SuperPanel.setLayout(new BorderLayout()); UpPanel.setLayout(new GridBagLayout()); LPanel=new javax.swing.JPanel(); LPanel.setLayout(new GridBagLayout()); RPanel=new javax.swing.JPanel(); RPanel.setLayout(new GridBagLayout()); D1Panel=new javax.swing.JPanel(); D1Panel.setLayout(new GridBagLayout()); D2Panel=new javax.swing.JPanel(); D2Panel.setLayout(new GridBagLayout()); WriteLabel1=new javax.swing.JLabel(); WriteLabel2=new javax.swing.JLabel(); Field2=new javax.swing.JTextField(); //Расположение элементов и на панели //Верхняя панель jLabelNumElements.setText("Количество элементов"); jLabelTransNum.setText("Количество транзакций"); jLabel2.setText("Количество элементов в транзакции:"); jLabelMinElements.setText("Минимальное"); jLabelMaxElements.setText("Максимальное"); UpPanel.add(jLabelNumElements,new GBC(0,0).setAnchor(GBC.WEST).setWeight(0, 0).setInsets(10,10,5,10)); UpPanel.add(jLabelTransNum,new GBC(0,1).setAnchor(GBC.WEST). setWeight(0,0).setInsets(10,10,5,10)); UpPanel.add(jNumElements,new GBC(1,0).setFill(GBC.HORIZONTAL)); UpPanel.add(jRowsNumber,new GBC(1,1).setFill(GBC.HORIZONTAL)); UpPanel.add(jLabel2,new GBC(2,0,1,2).setInsets(10,10,5,10)); UpPanel.add(jLabelMinElements,new GBC(3,0).setInsets(10,10,5,10)); UpPanel.add(jLabelMaxElements,new GBC(3,1).setInsets(10,10,5,10)); UpPanel.add(jMinElements,new GBC(4,0).setWeight(100, 0).setAnchor(GBC.WEST)); UpPanel.add(jMaxElements,new GBC(4,1).setWeight(100, 0).setAnchor(GBC.WEST)); //Левая Панель jSetDefaultModel.setText("Очистить"); jSetDefaultModel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jSetDefaultModelActionPerformed(evt); } }); jCompact.setText("Скомпоновать"); jCompact.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCompactActionPerformed(evt); } }); jDeleteRow.setText("Удалить запись"); jDeleteRow.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jDeleteRowActionPerformed(evt); } }); jRandomize.setText("Добавить случайные транзакции"); jRandomize.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRandomizeActionPerformed(evt); } }); jRandomPlace.setText("Случайное место"); jTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { } )); jTable.setCellSelectionEnabled(true); jTable.setGridColor(new java.awt.Color(0, 0, 0)); jTable.setSelectionBackground(new java.awt.Color(204, 255, 204)); jTable.setSelectionForeground(new java.awt.Color(51, 51, 51)); jScrollPane2.setViewportView(jTable); LPanel.add(jSetDefaultModel,new GBC(0,0).setInsets(5,10,5,0)); LPanel.add(jCompact,new GBC(1,0)); LPanel.add(jDeleteRow,new GBC(2,0).setAnchor(GBC.WEST).setWeight(100,0)); LPanel.add(jRandomize,new GBC(0,1,2,1).setInsets(5,10,5,0)); LPanel.add(jRandomPlace,new GBC(2,1).setAnchor(GBC.WEST).setWeight(100, 0)); LPanel.add(jScrollPane2,new GBC(0,2,3,3).setFill(GBC.BOTH).setWeight(100, 100).setInsets(5,10,10,10)); //Правая панель jOpenAdding.setText("Добавить продукт"); jOpenAdding.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jOpenAddingActionPerformed(evt); } }); jDefaultProducts.setText("Шаблоны"); jDefaultProducts.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jDefaultProductsActionPerformed(evt); } }); jDeleteVar.setText("Удалить из базы"); jDeleteVar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jDeleteVarActionPerformed(evt); } }); jScrollPane3.setViewportView(jVarList); jAddVar.setText("Добавить в транзакцию"); jAddVar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jAddVarActionPerformed(evt); } }); jClearTrans.setText("Очистить транзакцию"); jClearTrans.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jClearTransActionPerformed(evt); } }); jGenerate.setText("Добавить"); jGenerate.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jGenerateActionPerformed(evt); } }); jRandomPlace2.setText("Случайное место"); jWrite.setText("Записать"); jWrite.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jWriteActionPerformed(evt); } }); jWriteFile.setText(""); WriteLabel1.setText("ODBC драйвер:"); WriteLabel2.setText("Имя базы:"); Field2.setText(""); RPanel.add(jOpenAdding,new GBC(0,0).setInsets(10,0,0,0)); RPanel.add(jDeleteVar,new GBC(1,0).setInsets(10,0,0,0).setAnchor(GBC.WEST)); RPanel.add(jDefaultProducts,new GBC(2,0).setInsets(10,0,0,10).setWeight(100, 0).setAnchor(GBC.WEST).setFill(GBC.NONE)); RPanel.add(jScrollPane3,new GBC(0,1,3,3).setFill(GBC.BOTH).setWeight(100, 100).setInsets(10,0,0,10)); RPanel.add(jWrite,new GBC(0,6).setInsets(5,20,10,0).setFill(GBC.HORIZONTAL)); RPanel.add(WriteLabel1,new GBC(1,6).setInsets(5,30,10,0).setAnchor(GBC.WEST)); RPanel.add(jWriteFile,newGBC(2,6).setInsets(5,0,10,10). setFill(GBC.HORIZONTAL).setAnchor(GBC.WEST).setWeight(100,0)); RPanel.add(WriteLabel2,new GBC(1,7).setInsets(5,30,10,0).setAnchor(GBC.WEST)); RPanel.add(Field2,new GBC(2,7).setInsets(5,0,10,10).setFill(GBC.HORIZONTAL). setAnchor(GBC.WEST).setWeight(100,0)); //Диалог добавления продукта jAddingProductDialog.setResizable(false); jLabelProductName.setText("Имя продукта"); jAddProduct.setText("Ок"); jAddProduct.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jAddProductActionPerformed(evt); } }); jCancelAdding.setText("Отмена"); jCancelAdding.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCancelAddingActionPerformed(evt); } }); D1Panel.add(jLabelProductName,new GBC(0,0).setAnchor(GBC.WEST).setInsets(5, 10, 15, 10)); D1Panel.add(jNewProductName,new GBC(1,0).setWeight(100, 0).setFill(GBC.HORIZONTAL).setInsets(5, 0, 5, 10)); D1Panel.add(jAddProduct,new GBC(0,1).setAnchor(GBC.EAST).setInsets(0, 0, 0, 10)); D1Panel.add(jCancelAdding,new GBC(1,1).setAnchor(GBC.WEST)); jAddingProductDialog.add(D1Panel); //Выбор элементов jChangingProductsDialog.setResizable(false); jMakeAlphabet.setText("Алфавит"); jMakeAlphabet.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMakeAlphabetActionPerformed(evt); } }); jMake1000.setText("1000 элементов"); jMake1000.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMake1000ActionPerformed(evt); } }); jMakeShopProducts.setText("Магазин"); jMakeShopProducts.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMakeShopProductsActionPerformed(evt); } }); jCancelChanging.setText("Отмена"); jCancelChanging.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCancelChangingActionPerformed(evt); } }); D2Panel.add(jMakeAlphabet,new GBC(0,0).setInsets(10,10,5,10). setFill(GBC.HORIZONTAL)); D2Panel.add(jMake1000,new GBC(0,1).setInsets(5,10,5,10).setFill(GBC.HORIZONTAL)); D2Panel.add(jMakeShopProducts,new GBC(0,2).setInsets(5,10,5,10). setFill(GBC.HORIZONTAL)); D2Panel.add(jCancelChanging,new GBC(0,3).setInsets(5,10,10,10). setFill(GBC.HORIZONTAL)); jChangingProductsDialog.add(D2Panel); SuperPanel.add(UpPanel,BorderLayout.NORTH); SuperPanel.add(LPanel,BorderLayout.WEST); SuperPanel.add(RPanel,BorderLayout.EAST); this.add(SuperPanel); pack(); // Добавление колонки // Добавление транзакций в таблицу model private void jGenerateActionPerformed(java.awt.event.ActionEvent evt) {//GEN- int random; // Курсор указывающий на место, куда будет вставляться новая транзакция if (newTrans.size() == 0 && jVarList.getSelectedIndex() == -1) return; jConsole.setText("Добавление транзакций..."); jConsole.paintImmediately(0, 0, 2000, 50); jState.setMinimum(0); jState.setMaximum(spinnerTransNumber_model.getNumber().intValue()); jState.setStringPainted(true); jState.setValue(0); if (jVarList.getSelectedIndex() != -1) // Если есть выделенные продукты в списке { newTrans.clear(); int listSelected[] = jVarList.getSelectedIndices(); for (int j = 0; j < listSelected.length; j++) { newTrans.add(product_name[listSelected[j]]); } jNewTrans.setText(newTrans.toString()); } for (int i = 0; i < spinnerTransNumber_model.getNumber().intValue(); i++) { if (jRandomPlace2.isSelected() && model.getRowCount() != 0) { random = generator.nextInt(model.getRowCount()); while (random != 0 && model.getValueAt(random-1, 0).toString().equals(model.getValueAt(random, 0).toString())) random--; } else random = 0; for (int j = 0; j < newTrans.size(); j++) { Object toBeAdded[] = new Object[2]; toBeAdded[0] = tid; toBeAdded[1]= newTrans.get(j); if (jRandomPlace2.isSelected()) model.insertRow(random+j, toBeAdded); else model.addRow(toBeAdded); product_count[Integer.valueOf(prod.get(newTrans.get(j).toString()).toString())]++; } tid++; jState.setValue(i); jState.paintImmediately(0, 0, 2000, 50); } jState.setValue(0); jConsole.setText(""); if (compact) compact(); else refreshVars(); }//GEN-LAST:event_jGenerateActionPerformed // Проверка на правильность заполнения полей private boolean allIsCorrect() { if (spinnerMaxElements_model.getNumber().intValue() > spinnerNumElements_model.getNumber().intValue() || spinnerMinElements_model.getNumber().intValue() > spinnerMaxElements_model.getNumber().intValue() || spinnerMinElements_model.getNumber().intValue() > products_max || spinnerMaxElements_model.getNumber().intValue() > products_max || spinnerNumElements_model.getNumber().intValue() > products_max) return false; return true; } // Удаление элемента из транзакции (только для не компактного режима) private void jDeleteRowActionPerformed(java.awt.event.ActionEvent evt) while (jTable.getSelectedRow() != -1) { product_count[ Integer.valueOf( prod.get( model.getValueAt(jTable.getSelectedRow(), 1).toString() ).toString() ) ]--; model.removeRow(jTable.getSelectedRow()); } refreshVars(); } // Добавление случайных транзакций в таблицу model private void jRandomizeActionPerformed(java.awt.event.ActionEvent evt) { if (!allIsCorrect()) return; List listElemenets = new ArrayList(); // Список имён продуктов, из которых выбирается //следующий продукт случайным образом Object[] toBeAdded = new Object[2]; // (номер транзакции, имя продукта) для следующего добавления int numElements, minElements = spinnerMinElements_model.getNumber().intValue(), maxElements = spinnerMaxElements_model.getNumber().intValue(); int random; // Курсор указывающий на место, куда будет вставляться новая транзакция jConsole.setText("Добавление случайных транзакций..."); jConsole.paintImmediately(0, 0, 2000, 50); jState.setMinimum(0); jState.setMaximum(spinnerTransNumber_model.getNumber().intValue()); jState.setStringPainted(true); jState.setValue(0); for (int i = 0; i < spinnerTransNumber_model.getNumber().intValue(); i++) // Цикл по количиству транзакций { listElemenets.clear(); // Заполнение списка продуктов if (jVarList.getSelectedIndex() != -1) // Если есть выделенные продукты в списке { int listSelected[] = jVarList.getSelectedIndices(); for (int j = 0; j < listSelected.length; j++) { listElemenets.add(product_name[listSelected[j]]); //listElemenets_id.add(listSelected[j]); } if (minElements > listSelected.length) minElements = listSelected.length; if (maxElements > listSelected.length) maxElements = listSelected.length; } else // Если нет выделенных продуктов в списке { for (int j = 0; j < spinnerNumElements_model.getNumber().intValue(); j++) listElemenets.add(product_name[j]); } // Генерация числа продуктов в транзакции numElements = generator.nextInt( maxElements - minElements + 1 ) + minElements; // Вставка новых транзакций if (jRandomPlace.isSelected() && model.getRowCount() != 0) { random = generator.nextInt(model.getRowCount()); while (random != 0 && model.getValueAt(random-1, 0).toString().equals(model.getValueAt(random, 0).toString())) random--; } else random = 0; for (int k = 0; k < numElements; k++) { int element = generator.nextInt(listElemenets.size()); toBeAdded[0] = tid; toBeAdded[1] = listElemenets.get(element); product_count[Integer.valueOf(prod.get(listElemenets.get(element).toString()).toString())]++; if (jRandomPlace.isSelected()) model.insertRow(random + k, toBeAdded); else model.addRow(toBeAdded); listElemenets.remove(element); } tid++; jState.setValue(i); jState.paintImmediately(0, 0, 2000, 50); } jState.setValue(0); jConsole.setText(""); if (compact) compact(); else refreshVars(); // Запись в базу private void jWriteActionPerformed(java.awt.event.ActionEvent evt) { Connection con; String ProdApp; String BufUniqKey; int Buf; String UpdTrans; if ((jWriteFile.getText().equals("") || Field2.getText().equals(""))==false) { try { String CreateDB="CREATE DATABASE "+Field2.getText(); //String CreateTov="use "+Field2.getText()+"; CREATE TABLE TOVARS(UNIQKEY varchars(10) primary key);"; String CreateTov="CREATE TABLE "+Field2.getText()+".TOVARS(UNIQKEY varchar(10) primary key,TITLE varchar(50) NOT NULL )"; String CreateTrans="CREATE TABLE "+Field2.getText()+".TRANS(TID varchar(10), ELEM varchar(10) references "+Field2.getText()+".TOVARS(UNIQKEY))"; String url = "jdbc:odbc:"+jWriteFile.getText()+";"; Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); DriverManager. con = DriverManager.getConnection ( url,"" ,"" ); DatabaseMetaData dma = con.getMetaData (); Statement stmt = con.createStatement (); stmt.executeUpdate (CreateDB); stmt.executeUpdate(CreateTov); //заполнение таблицы товаров; for (int i = 0; i < products_max; i++) { Buf=i+1; ProdApp="INSERT INTO "+Field2.getText()+".TOVARS (UNIQKEY, TITLE) VALUES ('"+Buf+"', '"+product_name[i]+"')"; stmt.executeUpdate(ProdApp); } //Таблица транзакций stmt.executeUpdate (CreateTrans); for (int j = 0; j < model.getRowCount(); j++) // Цикл по записям в model { BufUniqKey=""; for (int i = 0; i < products_max; i++){ if(model.getValueAt(j, 1).toString().equalsIgnoreCase(product_name[i])){ BufUniqKey= Integer.toString(i+1); } } System.out.println("Trans "+model.getValueAt(j, 0).toString()+"="+BufUniqKey); UpdTrans="INSERT INTO "+Field2.getText()+".TRANS (TID, ELEM) VALUES ('"+model.getValueAt(j, 0).toString()+"', '"+BufUniqKey+"')"; stmt.executeUpdate (UpdTrans); } } catch (java.lang.Exception ex) { // Получив некоторые другие типы exception, распечатаем их. ex.printStackTrace (); } } // Заполнение таблицы по шаблону addColumns(tid, random) private void clearModel(DefaultTableModel model) { model.setRowCount(0); model.setColumnCount(0); model.addColumn("TID"); model.addColumn("Product"); } // Очистка таблиц private void refreshAll() { clearModel(model); clearModel(model_compact); jNewTrans.setText(newTrans.toString()); for (int i = 0; i < products_max; i++) product_count[i] = 0; } private void jSetDefaultModelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jSetDefaultModelActionPerformed refreshAll(); refreshVars(); } // Удаление продукта private void jDeleteVarActionPerformed(java.awt.event.ActionEvent evt) { if (jVarList.getSelectedIndex() == -1) return; String selectedIndex = product_name[ Integer.valueOf( products_id.getElementAt( jVarList.getSelectedIndex() ).toString() ) ]; for (int i = model.getRowCount()-1; i >= 0; i--) if (model.getValueAt(i, 1).toString().equals( selectedIndex )) model.removeRow(i); product_count[Integer.valueOf(products_id.getElementAt(jVarList.getSelectedIndex()).toString())] = 0; products_id.remove(jVarList.getSelectedIndex()); if (compact) compact(); else refreshVars(); } // Переход к виду model_compact (в одной записи все продукты транзакции) private void compact() { if (model.getRowCount() == 0) { model_compact.setRowCount(0); return; } jConsole.setText("Компоновка..."); jConsole.paintImmediately(0, 0, 2000, 50); jState.setMinimum(0); jState.setMaximum(model.getRowCount()); jState.setStringPainted(true); jState.setValue(0); String last_tid; Object obj[] = new Object[2]; model_compact.setRowCount(0); model_compact.setColumnCount(0); model_compact.addColumn("TID"); model_compact.addColumn("Product"); SortedSet products_ = new TreeSet(); last_tid = model.getValueAt(0, 0).toString(); for (int j = 0; j < model.getRowCount(); j++) // Цикл по записям в model { if (model.getValueAt(j, 0).toString().equalsIgnoreCase(last_tid)) // Если продолжается транзакция { products_.add(model.getValueAt(j, 1).toString()); } else // Если новая транзакция { obj[0] = last_tid; obj[1] = products_.toString(); model_compact.addRow(obj); last_tid = model.getValueAt(j, 0).toString(); products_.clear(); products_.add(model.getValueAt(j, 1).toString()); } jState.setValue(j); jState.repaint(); jState.paintImmediately(0, 0, 2000, 50); } // Добавление последней транзакции obj[0] = last_tid; obj[1] = products_.toString(); model_compact.addRow(obj); refreshVars(); jState.setValue(0); jConsole.setText(""); } // Перевод базы данных в компактный вид (нажатие кнопки) private void jCompactActionPerformed(java.awt.event.ActionEvent evt) { if (!compact) { compact(); jTable.setModel(model_compact); compact = true; } else { jTable.setModel(model); compact = false; } jDeleteRow.setEnabled(!compact); }//GEN-LAST:event_jCompactActionPerformed // Обновление списка элементов private void refreshVars() { String buf; products.clear(); products_id.clear(); for (int i = 0; i < products_max; i++) //if (product_count[i] != 0) { buf = (i+1) + ". " + product_name[i] + "(" + product_count[i] + ")"; products.addElement(buf); products_id.addElement(i); } } private void formMouseReleased(java.awt.event.MouseEvent evt) { refreshVars(); jConsole.setText(""); } // Добавление переменной в новую транзакцию private void jAddVarActionPerformed(java.awt.event.ActionEvent evt) { if (jVarList.getSelectedIndex() == -1 || newTrans.contains(product_name[Integer.valueOf(products_id.getElementAt(jVarList.getSelectedIndex()).toString())])) return; int listSelected[] = jVarList.getSelectedIndices(); for (int j = 0; j < listSelected.length; j++) { newTrans.add(product_name[listSelected[j]]); } jNewTrans.setText(newTrans.toString()); } // Очистка списка элементов в новой транзакции private void jClearTransActionPerformed(java.awt.event.ActionEvent evt) { newTrans.clear(); jNewTrans.setText(""); } // Чтение базы данных из файла private void jOpenActionPerformed(java.awt.event.ActionEvent evt) { FileReader fr = null; try { fr = new FileReader(jWriteFile.getText()); BufferedReader br = new BufferedReader(fr); int tranNum = 1; String s = br.readLine(); Object[] o = new Object[2]; while (s != null) { StringTokenizer dataLine = new StringTokenizer(s); int tranSize = dataLine.countTokens(); for (int i = 0; i < tranSize; i++) { o[0] = tranNum; o[1] = dataLine.nextToken(); model.addRow(o); } tranNum++; s = br.readLine(); } } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } finally { try { fr.close(); } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } } // Отмена добавления (закрытие окна) private void jCancelAddingActionPerformed(java.awt.event.ActionEvent evt) { jAddingProductDialog.setVisible(false); } // Добавление нового типа продукта private void jAddProductActionPerformed(java.awt.event.ActionEvent evt) { if (products_max >= 1000) return; for (int i = 0; i < products_max; i++) if (product_name[i].equalsIgnoreCase(jNewProductName.getText())) return; product_name[products_max] = String.valueOf(jNewProductName.getText()); prod.put(String.valueOf(jNewProductName.getText()), products_max); products_max++; jAddingProductDialog.setVisible(false); refreshVars(); } // Открытие окна для добавления нового типа продукта private void jOpenAddingActionPerformed(java.awt.event.ActionEvent evt) { jAddingProductDialog.setSize(330, 100); jAddingProductDialog.setVisible(true); refreshVars(); }//GEN-LAST:event_jOpenAddingActionPerformed private void jDefaultProductsActionPerformed(java.awt.event.ActionEvent evt) { jChangingProductsDialog.setSize(155, 180); jChangingProductsDialog.setVisible(true); } private void jMake1000ActionPerformed(java.awt.event.ActionEvent evt) { products_max = 1000; for (int i = 0; i < products_max; i++) { product_name[i] = "e" + (i+1); prod.put(product_name[i], i); } jChangingProductsDialog.setVisible(false); spinnerNumElements_model.setValue(products_max); spinnerMaxElements_model.setValue(products_max); refreshVars(); }//GEN-LAST:event_jMake1000ActionPerformed private void jCancelChangingActionPerformed(java.awt.event.ActionEvent evt) { jChangingProductsDialog.setVisible(false); } private void jMakeAlphabetActionPerformed(java.awt.event.ActionEvent evt) { products_max = 26; for (int i = 0; i < products_max; i++) { product_name[i] = String.valueOf(alphabet.charAt(i)); prod.put(String.valueOf(alphabet.charAt(i)), i); } jChangingProductsDialog.setVisible(false); spinnerNumElements_model.setValue(products_max); spinnerMaxElements_model.setValue(products_max); refreshVars(); } private void jMakeShopProductsActionPerformed(java.awt.event.ActionEvent evt) { products_max = shop.length; for (int i = 0; i < products_max; i++) { product_name[i] = shop[i]; prod.put(shop[i], i); } jChangingProductsDialog.setVisible(false); spinnerNumElements_model.setValue(products_max); spinnerMaxElements_model.setValue(products_max); refreshVars(); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Main().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jAddProduct; private javax.swing.JButton jAddVar; private javax.swing.JDialog jAddingProductDialog; private javax.swing.JButton jCancelAdding; private javax.swing.JButton jCancelChanging; private javax.swing.JDialog jChangingProductsDialog; private javax.swing.JButton jClearTrans; private javax.swing.JToggleButton jCompact; private javax.swing.JLabel jConsole; private javax.swing.JButton jDefaultProducts; private javax.swing.JButton jDeleteRow; private javax.swing.JButton jDeleteVar; private javax.swing.JButton jGenerate; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabelMaxElements; private javax.swing.JLabel jLabelMinElements; private javax.swing.JLabel jLabelNumElements; private javax.swing.JLabel jLabelProductName; private javax.swing.JLabel jLabelTransNum; private javax.swing.JButton jMake1000; private javax.swing.JButton jMakeAlphabet; private javax.swing.JButton jMakeShopProducts; private javax.swing.JSpinner jMaxElements; private javax.swing.JSpinner jMinElements; private javax.swing.JTextField jNewProductName; private javax.swing.JTextField jNewTrans; private javax.swing.JSpinner jNumElements; private javax.swing.JButton jOpen; private javax.swing.JButton jOpenAdding; private javax.swing.JPanel jPanel1; private javax.swing.JRadioButton jRandomPlace; private javax.swing.JRadioButton jRandomPlace2; private javax.swing.JButton jRandomize; private javax.swing.JSpinner jRowsNumber; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JButton jSetDefaultModel; private javax.swing.JProgressBar jState; private javax.swing.JTable jTable; private javax.swing.JList jVarList; private javax.swing.JButton jWrite; private javax.swing.JTextField jWriteFile; private javax.swing.JPanel SuperPanel; private javax.swing.JPanel UpPanel; private javax.swing.JPanel LPanel; private javax.swing.JPanel RPanel; private javax.swing.JPanel D1Panel; private javax.swing.JPanel D2Panel; private javax.swing.JLabel WriteLabel1; private javax.swing.JLabel WriteLabel2; private javax.swing.JTextField Field2; } Класс GBC Взят с сайта http://horstmann.com /* GBC - A convenience class to tame the GridBagLayout Copyright (C) 2002 Cay S. Horstmann (http://horstmann.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ import java.awt.*; /** This class simplifies the use of the GridBagConstraints class. */ public class GBC extends GridBagConstraints { /** Constructs a GBC with a given gridx and gridy position and all other grid bag constraint values set to the default. @param gridx the gridx position @param gridy the gridy position */ public GBC(int gridx, int gridy) { this.gridx = gridx; this.gridy = gridy; } /** Constructs a GBC with given gridx, gridy, gridwidth, gridheight and all other grid bag constraint values set to the default. @param gridx the gridx position @param gridy the gridy position @param gridwidth the cell span in x-direction @param gridheight the cell span in y-direction */ public GBC(int gridx, int gridy, int gridwidth, int gridheight) { this.gridx = gridx; this.gridy = gridy; this.gridwidth = gridwidth; this.gridheight = gridheight; } /** Sets the anchor. @param anchor the anchor value @return this object for further modification */ public GBC setAnchor(int anchor) { this.anchor = anchor; return this; } /** Sets the fill direction. @param fill the fill direction @return this object for further modification */ public GBC setFill(int fill) { this.fill = fill; return this; } /** Sets the cell weights. @param weightx the cell weight in x-direction @param weighty the cell weight in y-direction @return this object for further modification */ public GBC setWeight(double weightx, double weighty) { this.weightx = weightx; this.weighty = weighty; return this; } /** Sets the insets of this cell. @param distance the spacing to use in all directions @return this object for further modification */ public GBC setInsets(int distance) { this.insets = new Insets(distance, distance, distance, distance); return this; } /** Sets the insets of this cell. @param top the spacing to use on top @param left the spacing to use to the left @param bottom the spacing to use on the bottom @param right the spacing to use to the right @return this object for further modification */ public GBC setInsets(int top, int left, int bottom, int right) { this.insets = new Insets(top, left, bottom, right); return this; } /** Sets the internal padding @param ipadx the internal padding in x-direction @param ipady the internal padding in y-direction @return this object for further modification */ public GBC setIpad(int ipadx, int ipady) { this.ipadx = ipadx; this.ipady = ipady; return this; } } |
Во время выполнения дипломной работы студент развивает навыки ведения самостоятельной научно-исследовательской работы, овладевает... | Прошу разрешить мне изменить тему дипломной (курсовой) работы с «Развитие познавательного интереса младших школьников во внеклассной... | ||
О выпускной квалификационной (дипломной) работе дипломированного специалиста, обучающегося на факультете физической культуры ниу... | Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования | ||
Правила оформления дипломной работы (подготовлены на основе Положения о выпускной квалификационной работе). 15 | Выполнение дипломной работы является заключительным этапом обучения студентов. Дипломная работа представляет собой самостоятельную... | ||
Исторические этапы становления туроператорской деятельности в России и зарубежных странах | В дипломной работе будет рассмотрена тема «Документационное обеспечение деятельности государственного учреждения (на примере гу со... | ||
Настоящее положение разработано в соответствии с положением об итоговой государственной аттестации выпускников гбоу впо вгма им.... | Особое внимание уделено выбору темы и организации выполнения дипломной работы, ее плану и структуре; подготовке дипломной работы... |
Поиск Главная страница   Заполнение бланков   Бланки   Договоры   Документы    |