From 11c7716d95b31983c9028dcb3cd53f60ded11383 Mon Sep 17 00:00:00 2001 From: PioDer Date: Sat, 14 Jun 2014 18:54:39 +0100 Subject: [PATCH] =?UTF-8?q?poprawki=20wzorc=C3=B3w=20projektowych=20pod=20?= =?UTF-8?q?MVC=20poprawki=20interfejsu=20usuni=C4=99cie=20przestarza=C5=82?= =?UTF-8?q?ych=20plik=C3=B3w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cookbook.db | Bin 57344 -> 0 bytes src/main/java/db/Cookbook.java | 1 - src/main/java/db/SearchRecipe.java | 6 + src/main/java/db/SearchRecipeNameTag.java | 8 +- .../java/ksiazka/kucharska/CB_Controller.java | 45 ++- src/main/java/ksiazka/kucharska/CB_View.java | 87 ++-- src/main/java/ksiazka/kucharska/FrmMain.java | 381 ------------------ .../java/ksiazka/kucharska/RecipeBuilder.java | 24 +- .../java/ksiazka/kucharska/RetrieveData.java | 82 ---- 9 files changed, 103 insertions(+), 531 deletions(-) delete mode 100644 cookbook.db delete mode 100644 src/main/java/ksiazka/kucharska/FrmMain.java delete mode 100644 src/main/java/ksiazka/kucharska/RetrieveData.java diff --git a/cookbook.db b/cookbook.db deleted file mode 100644 index 7c8f9e497e869538e3cde82c2343d46663833b65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57344 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

P$W~PMPW` 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 obtainRecipeNames(); + public SearchRecipe(CB_View v) { + tV = v; + } } \ No newline at end of file diff --git a/src/main/java/db/SearchRecipeNameTag.java b/src/main/java/db/SearchRecipeNameTag.java index 9445ef2..ef12c7f 100644 --- a/src/main/java/db/SearchRecipeNameTag.java +++ b/src/main/java/db/SearchRecipeNameTag.java @@ -2,13 +2,17 @@ package db; import java.util.List; -import ksiazka.kucharska.FrmMain; +import ksiazka.kucharska.CB_View; public class SearchRecipeNameTag extends SearchRecipe { + public SearchRecipeNameTag(CB_View v) { + super(v); + } + public List obtainRecipeNames() { Cookbook myCb = new Cookbook(); - List names = myCb.obtainSearchedNames(FrmMain.txtSearch.getText(), FrmMain.txtSearch.getText()); + List names = myCb.obtainSearchedNames(tV.getSearchValue(), tV.getSearchValue()); myCb.closeConnection(); return names; diff --git a/src/main/java/ksiazka/kucharska/CB_Controller.java b/src/main/java/ksiazka/kucharska/CB_Controller.java index 21d5046..a654bbc 100644 --- a/src/main/java/ksiazka/kucharska/CB_Controller.java +++ b/src/main/java/ksiazka/kucharska/CB_Controller.java @@ -16,10 +16,15 @@ import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import db.SearchRecipeAll; import db.Cookbook; +import db.SearchRecipe; +import db.SearchRecipeNameTag; public class CB_Controller { private static CB_View theView; @@ -34,11 +39,21 @@ public class CB_Controller { CB_Controller.theView.cancelListener(new CancelListener()); CB_Controller.theView.saveListener(new SaveListener()); CB_Controller.theView.listSelectListener(new SelectionListener()); + CB_Controller.theView.searchTypeListener(new SearchListener()); } public void fillList(){ Cookbook myCb = new Cookbook(); - List names = myCb.selectNames(); + SearchRecipe sr; + if (theView.getSearchValue() != "") { + sr = new SearchRecipeNameTag(theView); + } + else + { + sr = new SearchRecipeAll(theView); + } + List names = sr.obtainRecipeNames(); + theView.setRecipesList(names); myCb.closeConnection(); } @@ -57,7 +72,7 @@ public class CB_Controller { Cookbook myCb = new Cookbook(); RecipeManager rm = new RecipeManager(); - rm.setRecipeBuilder(new NewRecipeBuilder()); + rm.setRecipeBuilder(new NewRecipeBuilder(theView)); rm.constructRecipe(); CB_Model obj = rm.getRecipe(); @@ -96,12 +111,12 @@ public class CB_Controller { { int dialogResult = JOptionPane.showConfirmDialog (null, "Czy na pewno chcesz usunąć przepis?", "Pytanie", JOptionPane.YES_NO_OPTION); if(dialogResult == JOptionPane.YES_OPTION){ - RetrieveData.removeRecipe(recipesList.getSelectedValue().toString()); + removeRecipe(recipesList.getSelectedValue().toString()); model.remove(recipesList.getSelectedIndex()); if (recipesList.getModel().getSize()>0) { recipesList.setSelectedIndex(0); - RetrieveData.fillComponents(recipesList.getSelectedValue().toString()); + fillComponents(recipesList.getSelectedValue().toString()); } else { @@ -147,7 +162,6 @@ public class CB_Controller { } } } - catch(NumberFormatException ex){ ex.printStackTrace(); } @@ -177,12 +191,10 @@ public class CB_Controller { try{ addNewRecipe(); - /*JList recipesList = theView.getRecipesList(); - DefaultListModel model = (DefaultListModel) recipesList.getModel(); - model.addElement(theView.getRecipeTitle());*/ + theView.setRecipesListItem(theView.getRecipeEdTitle()); theView.DeactivateAddMenu(); - /*recipesList.setSelectedIndex(recipesList.getModel().getSize()-1); - fillComponents(recipesList.getSelectedValue().toString());*/ + theView.getRecipesList().setSelectedIndex(theView.getRecipesList().getModel().getSize()-1); + fillComponents(theView.getRecipesList().getSelectedValue().toString()); } catch(NumberFormatException ex){ @@ -207,5 +219,18 @@ public class CB_Controller { } } + class SearchListener implements DocumentListener{ + + public void changedUpdate(DocumentEvent e) { + fillList(); + } + + public void insertUpdate(DocumentEvent e) { + fillList(); + } + public void removeUpdate(DocumentEvent e) { + fillList(); + } + } } diff --git a/src/main/java/ksiazka/kucharska/CB_View.java b/src/main/java/ksiazka/kucharska/CB_View.java index ee67ecd..902c609 100644 --- a/src/main/java/ksiazka/kucharska/CB_View.java +++ b/src/main/java/ksiazka/kucharska/CB_View.java @@ -2,11 +2,13 @@ package ksiazka.kucharska; import java.awt.*; import java.awt.event.ActionListener; +import java.awt.image.ImageObserver; import java.util.List; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.border.LineBorder; +import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileNameExtensionFilter; @@ -40,14 +42,14 @@ public class CB_View extends JFrame{ this.setResizable(false); this.setTitle("Książka Kucharska v1.0"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - this.setBounds(100, 100, 723, 549); + this.setBounds(100, 100, 720, 551); JPanel contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); this.setContentPane(contentPane); - splitPane.setResizeWeight(0.1); + splitPane.setResizeWeight(0.35); splitPane.setRequestFocusEnabled(false); splitPane.setPreferredSize(new Dimension(200, 27)); splitPane.setDividerSize(5); @@ -57,41 +59,16 @@ public class CB_View extends JFrame{ JPanel panel = new JPanel(); panel.setMaximumSize(new Dimension(100, 32767)); splitPane.setLeftComponent(panel); - GridBagLayout gbl_panel = new GridBagLayout(); - gbl_panel.columnWidths = new int[] {0, 0}; - gbl_panel.rowHeights = new int[] {0, 0, 0}; - gbl_panel.columnWeights = new double[]{1.0, 1.0}; - gbl_panel.rowWeights = new double[]{0.0, 1.0, 0.0}; - panel.setLayout(gbl_panel); - - GridBagConstraints gbc_txtSearch = new GridBagConstraints(); - gbc_txtSearch.gridwidth = 2; - gbc_txtSearch.insets = new Insets(5, 5, 5, 0); - gbc_txtSearch.fill = GridBagConstraints.HORIZONTAL; - gbc_txtSearch.gridx = 0; - gbc_txtSearch.gridy = 0; + txtSearch.setBounds(5, 5, 237, 20); txtSearch.setColumns(10); + scrollPane_2.setBounds(5, 30, 237, 453); scrollPane_2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); scrollPane_2.setMaximumSize(new Dimension(100, 100)); + recipesList.setSize(new Dimension(100, 0)); + recipesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + recipesList.setMaximumSize(new Dimension(40, 0)); scrollPane_2.setViewportView(recipesList); - GridBagConstraints gbc_scrollPane_2 = new GridBagConstraints(); - gbc_scrollPane_2.gridwidth = 2; - gbc_scrollPane_2.insets = new Insets(0, 0, 5, 0); - gbc_scrollPane_2.fill = GridBagConstraints.BOTH; - gbc_scrollPane_2.gridx = 0; - gbc_scrollPane_2.gridy = 1; - - GridBagConstraints gbc_btnAddRecipe = new GridBagConstraints(); - gbc_btnAddRecipe.fill = GridBagConstraints.HORIZONTAL; - gbc_btnAddRecipe.insets = new Insets(0, 5, 0, 5); - gbc_btnAddRecipe.gridx = 0; - gbc_btnAddRecipe.gridy = 2; - - GridBagConstraints gbc_btnDelRecipe = new GridBagConstraints(); - gbc_btnDelRecipe.fill = GridBagConstraints.HORIZONTAL; - gbc_btnDelRecipe.gridx = 1; - gbc_btnDelRecipe.gridy = 2; JPanel panel_2 = new JPanel(); splitPane.setRightComponent(panel_2); @@ -155,18 +132,15 @@ public class CB_View extends JFrame{ scrollPane_2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); scrollPane_2.setMaximumSize(new Dimension(100, 100)); scrollPane_2.setViewportView(recipesList); - - gbc_scrollPane_2.gridwidth = 2; - gbc_scrollPane_2.insets = new Insets(0, 0, 5, 0); - gbc_scrollPane_2.fill = GridBagConstraints.BOTH; - gbc_scrollPane_2.gridx = 0; - gbc_scrollPane_2.gridy = 1; + panel.setLayout(null); - panel.add(txtSearch, gbc_txtSearch); - panel.add(scrollPane_2, gbc_scrollPane_2); - panel.add(btnAddRecipe, gbc_btnAddRecipe); - panel.add(btnDelRecipe, gbc_btnDelRecipe); - panel.add(txtSearch, gbc_txtSearch); + panel.add(txtSearch); + panel.add(scrollPane_2); + btnAddRecipe.setBounds(5, 486, 116, 25); + panel.add(btnAddRecipe); + btnDelRecipe.setBounds(125, 486, 116, 25); + panel.add(btnDelRecipe); + panel.add(txtSearch); panel_2.add(btnSave); panel_2.add(txtEdTitle); panel_2.add(lblRecipeTitle); @@ -182,13 +156,16 @@ public class CB_View extends JFrame{ } public String getRecipeTitle(){ - return lblRecipeTitle.getText().toString(); + return lblRecipeTitle.getText(); + } + public String getRecipeEdTitle(){ + return txtEdTitle.getText(); } public String getRecipeIngredients(){ - return txtIngredients.getText().toString(); + return txtIngredients.getText(); } public String getRecipeDescription(){ - return txtDescription.getText().toString(); + return txtDescription.getText(); } public String getRecipeTags(){ return txtTags.getText().toString(); @@ -202,7 +179,12 @@ public class CB_View extends JFrame{ public JLabel getImgRecipe(){ return imgRecipe; } - + public ImageIcon getDefaultImgRecipe(){ + return imgDefaultRecipe; + } + public String getSearchValue(){ + return txtSearch.getText(); + } public void setRecipeTitle(String name){ lblRecipeTitle.setText(name); } @@ -216,11 +198,15 @@ public class CB_View extends JFrame{ txtTags.setText(tags); } public void setRecipesList(List names){ + recipesListModel.clear(); for (String r : names) { recipesListModel.addElement(r); } } + public void setRecipesListItem(String item){ + recipesListModel.addElement(item); + } public void setRecipeIcon(Icon icon){ imgRecipe.setIcon(icon); } @@ -244,8 +230,11 @@ public class CB_View extends JFrame{ void saveListener(ActionListener listenForAddButton){ btnSave.addActionListener(listenForAddButton); } - void listSelectListener(ListSelectionListener listenForSelectionChagnge){ - recipesList.addListSelectionListener(listenForSelectionChagnge); + void listSelectListener(ListSelectionListener listenForSelectionChange){ + recipesList.addListSelectionListener(listenForSelectionChange); + } + void searchTypeListener(DocumentListener listenForSearchTyping){ + txtSearch.getDocument().addDocumentListener(listenForSearchTyping); } void DeactivateAddMenu() { diff --git a/src/main/java/ksiazka/kucharska/FrmMain.java b/src/main/java/ksiazka/kucharska/FrmMain.java deleted file mode 100644 index 966ceb5..0000000 --- a/src/main/java/ksiazka/kucharska/FrmMain.java +++ /dev/null @@ -1,381 +0,0 @@ -package ksiazka.kucharska; - -import java.awt.BorderLayout; - - -import javax.imageio.ImageIO; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.border.EmptyBorder; -import javax.swing.DefaultListModel; -import javax.swing.ImageIcon; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; -import javax.swing.JScrollPane; -import javax.swing.JSplitPane; -import javax.swing.JButton; -import javax.swing.JTextField; - -import java.awt.Graphics2D; -import java.awt.GridBagLayout; -import java.awt.GridBagConstraints; -import java.awt.Insets; -import java.awt.RenderingHints; - -import javax.swing.JList; -import javax.swing.JTextArea; -import javax.swing.JLabel; -import java.awt.Font; -import javax.swing.border.LineBorder; -import java.awt.SystemColor; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import javax.swing.SwingConstants; -import ksiazka.kucharska.RetrieveData; - -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.event.ListSelectionListener; -import javax.swing.event.ListSelectionEvent; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.ScrollPaneConstants; -import java.awt.Dimension; -import java.awt.event.InputMethodListener; -import java.awt.event.InputMethodEvent; - -public class FrmMain extends JFrame { - - /** - * - */ - private static final long serialVersionUID = 2634383304749703669L; - private JPanel contentPane; -<<<<<<< HEAD - public static JTextField txtSearch; - public static JTextField txtEdTitle; -======= - private JTextField txtSearch; - public static JTextField txtEdTitle; ->>>>>>> 17d917cc3f055645be7f87095a3ba404b9b885e9 - public static JTextField txtTags; - private JButton btnSave; - private JButton btnCancel; - public static JTextArea txtDescription; - private JButton btnAddRecipe; - private JButton btnDelRecipe; - private JButton btnLoadImg; - public static JLabel lblRecipeTitle; - private static DefaultListModel recipesListModel; - public static JLabel imgRecipe; - private JFileChooser fcImg; - public static ImageIcon imgDefaultRecipe; - private JList recipesList; - private JScrollPane scrollPane_1; - public static JTextArea txtIngredients; - private JScrollPane scrollPane_2; - - void DeactivateAddMenu() { - btnAddRecipe.setEnabled(true); - btnCancel.setVisible(false); - btnDelRecipe.setEnabled(true); - btnLoadImg.setVisible(false); - txtSearch.setEnabled(true); - btnSave.setVisible(false); - txtDescription.setEditable(false); - txtEdTitle.setVisible(false); - txtIngredients.setEditable(false); - txtTags.setEditable(false); - lblRecipeTitle.setVisible(true); - recipesList.setEnabled(true); - } - - void ActivateAddMenu() { - btnAddRecipe.setEnabled(false); - btnCancel.setVisible(true); - btnDelRecipe.setEnabled(false); - btnLoadImg.setVisible(true); - txtSearch.setEnabled(false); - btnSave.setVisible(true); - txtDescription.setEditable(true); - txtEdTitle.setVisible(true); - txtIngredients.setEditable(true); - txtTags.setEditable(true); - lblRecipeTitle.setVisible(false); - recipesList.setEnabled(false); - imgRecipe.setIcon(imgDefaultRecipe); - txtDescription.setText(""); - txtEdTitle.setText(""); - txtIngredients.setText(""); - txtTags.setText(""); - - } - - public static DefaultListModel getRecipesList() - { - return recipesListModel; - } - - /** - * Create the frame. - */ - public FrmMain() { - setResizable(false); - setTitle("Książka Kucharska v1.0"); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setBounds(100, 100, 723, 549); - contentPane = new JPanel(); - contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); - contentPane.setLayout(new BorderLayout(0, 0)); - setContentPane(contentPane); - - JSplitPane splitPane = new JSplitPane(); - splitPane.setResizeWeight(0.1); - splitPane.setRequestFocusEnabled(false); - splitPane.setPreferredSize(new Dimension(200, 27)); - splitPane.setDividerSize(5); - splitPane.setEnabled(false); - contentPane.add(splitPane, BorderLayout.CENTER); - - JPanel panel = new JPanel(); - panel.setMaximumSize(new Dimension(100, 32767)); - splitPane.setLeftComponent(panel); - GridBagLayout gbl_panel = new GridBagLayout(); - gbl_panel.columnWidths = new int[] {0, 0}; - gbl_panel.rowHeights = new int[] {0, 0, 0}; - gbl_panel.columnWeights = new double[]{1.0, 1.0}; - gbl_panel.rowWeights = new double[]{0.0, 1.0, 0.0}; - panel.setLayout(gbl_panel); - - txtSearch = new JTextField(); -<<<<<<< HEAD - txtSearch.setText(""); - -======= ->>>>>>> 17d917cc3f055645be7f87095a3ba404b9b885e9 - GridBagConstraints gbc_txtSearch = new GridBagConstraints(); - gbc_txtSearch.gridwidth = 2; - gbc_txtSearch.insets = new Insets(5, 5, 5, 0); - gbc_txtSearch.fill = GridBagConstraints.HORIZONTAL; - gbc_txtSearch.gridx = 0; - gbc_txtSearch.gridy = 0; - panel.add(txtSearch, gbc_txtSearch); - txtSearch.setColumns(10); - - recipesListModel = new DefaultListModel(); - recipesList = new JList(recipesListModel); - recipesList.addListSelectionListener(new ListSelectionListener() { - public void valueChanged(ListSelectionEvent e){ - if(recipesList.getSelectedIndex() != -1) - RetrieveData.fillComponents(recipesList.getSelectedValue().toString()); - } - }); - - scrollPane_2 = new JScrollPane(); - scrollPane_2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - scrollPane_2.setMaximumSize(new Dimension(100, 100)); - scrollPane_2.setViewportView(recipesList); - GridBagConstraints gbc_scrollPane_2 = new GridBagConstraints(); - gbc_scrollPane_2.gridwidth = 2; - gbc_scrollPane_2.insets = new Insets(0, 0, 5, 0); - gbc_scrollPane_2.fill = GridBagConstraints.BOTH; - gbc_scrollPane_2.gridx = 0; - gbc_scrollPane_2.gridy = 1; - panel.add(scrollPane_2, gbc_scrollPane_2); - - - btnAddRecipe = new JButton("Nowy"); - GridBagConstraints gbc_btnAddRecipe = new GridBagConstraints(); - gbc_btnAddRecipe.fill = GridBagConstraints.HORIZONTAL; - gbc_btnAddRecipe.insets = new Insets(0, 5, 0, 5); - gbc_btnAddRecipe.gridx = 0; - gbc_btnAddRecipe.gridy = 2; - panel.add(btnAddRecipe, gbc_btnAddRecipe); - btnAddRecipe.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - ActivateAddMenu(); - } - }); - - btnDelRecipe = new JButton("Usuń"); - GridBagConstraints gbc_btnDelRecipe = new GridBagConstraints(); - gbc_btnDelRecipe.fill = GridBagConstraints.HORIZONTAL; - gbc_btnDelRecipe.gridx = 1; - gbc_btnDelRecipe.gridy = 2; - panel.add(btnDelRecipe, gbc_btnDelRecipe); - btnDelRecipe.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - DefaultListModel model = (DefaultListModel) recipesList.getModel(); - if (recipesList.getSelectedIndex() != -1) - { - int dialogResult = JOptionPane.showConfirmDialog (null, "Czy na pewno chcesz usunąć przepis?", "Pytanie", JOptionPane.YES_NO_OPTION); - if(dialogResult == JOptionPane.YES_OPTION){ - RetrieveData.removeRecipe(recipesList.getSelectedValue().toString()); - model.remove(recipesList.getSelectedIndex()); - if (recipesList.getModel().getSize()>0) - { - recipesList.setSelectedIndex(0); - RetrieveData.fillComponents(recipesList.getSelectedValue().toString()); - } - else - { - txtDescription.setText(""); - lblRecipeTitle.setText("Nazwa przepisu"); - txtIngredients.setText(""); - txtTags.setText(""); - } - } - } - } - }); - - JPanel panel_2 = new JPanel(); - splitPane.setRightComponent(panel_2); - panel_2.setLayout(null); - - btnSave = new JButton("Dodaj"); - btnSave.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - RetrieveData.addNewRecipe(); - DefaultListModel model = (DefaultListModel) recipesList.getModel(); - model.addElement(txtEdTitle.getText()); - DeactivateAddMenu(); - recipesList.setSelectedIndex(recipesList.getModel().getSize()-1); - RetrieveData.fillComponents(recipesList.getSelectedValue().toString()); - } - }); - btnSave.setVisible(false); - btnSave.setBounds(319, 12, 117, 25); - panel_2.add(btnSave); - - txtEdTitle = new JTextField(); - txtEdTitle.setVisible(false); - txtEdTitle.setBounds(26, 15, 281, 19); - panel_2.add(txtEdTitle); - txtEdTitle.setColumns(10); - - - lblRecipeTitle = new JLabel("Nazwa przepisu"); - lblRecipeTitle.setFont(new Font("Dialog", Font.BOLD, 18)); - lblRecipeTitle.setBounds(12, 12, 442, 22); - panel_2.add(lblRecipeTitle); - - JLabel lblIngredients = new JLabel("Składniki:"); - lblIngredients.setBounds(26, 61, 70, 15); - panel_2.add(lblIngredients); - - imgRecipe = new JLabel(""); - imgRecipe.setHorizontalAlignment(SwingConstants.CENTER); - imgRecipe.setBorder(new LineBorder(SystemColor.textHighlightText)); - imgRecipe.setBounds(272, 88, 164, 126); - panel_2.add(imgRecipe); - - btnLoadImg = new JButton("Wczytaj"); - - fcImg = new JFileChooser(); - FileNameExtensionFilter ffAll = new FileNameExtensionFilter("Wszystkie grafiki", "jpg", "jpeg", "gif", "png"); - fcImg.addChoosableFileFilter(ffAll); - fcImg.addChoosableFileFilter(new FileNameExtensionFilter("Pliki JPEG", "jpg", "jpeg")); - fcImg.addChoosableFileFilter(new FileNameExtensionFilter("Pliki GIF", "gif")); - fcImg.addChoosableFileFilter(new FileNameExtensionFilter("Pliki PNG", "png")); - fcImg.setAcceptAllFileFilterUsed(false); - fcImg.setFileFilter(ffAll); - imgDefaultRecipe = new ImageIcon("no_img_recipe.jpg"); - imgRecipe.setIcon(imgDefaultRecipe); - - - btnLoadImg.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent arg0) { - int returnVal = fcImg.showOpenDialog(FrmMain.this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = fcImg.getSelectedFile(); - try { - BufferedImage srcImg = ImageIO.read(file); - - int w = (int)Math.ceil(srcImg.getWidth()/(double)srcImg.getHeight()*imgRecipe.getHeight()); - - BufferedImage resizedImg = new BufferedImage(w, imgRecipe.getHeight(), BufferedImage.TYPE_INT_ARGB); - Graphics2D g2 = resizedImg.createGraphics(); - g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); - g2.drawImage(srcImg, 0, 0, w, imgRecipe.getHeight(), null); - g2.dispose(); - ImageIcon iconLogo = new ImageIcon(resizedImg); - imgRecipe.setIcon(iconLogo); - - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - btnLoadImg.setVisible(false); - - JScrollPane scrollPane = new JScrollPane(); - scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - scrollPane.setBounds(26, 254, 410, 196); - panel_2.add(scrollPane); - - txtDescription = new JTextArea(); - txtDescription.setEditable(false); - txtDescription.setLineWrap(true); - scrollPane.setViewportView(txtDescription); - btnLoadImg.setBounds(304, 217, 102, 25); - panel_2.add(btnLoadImg); - - txtTags = new JTextField(); - txtTags.setEditable(false); - txtTags.setBounds(26, 480, 410, 19); - panel_2.add(txtTags); - txtTags.setColumns(10); - - JLabel lblTags = new JLabel("Tagi:"); - lblTags.setBounds(26, 462, 70, 15); - panel_2.add(lblTags); - - btnCancel = new JButton("Anuluj"); - btnCancel.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - DeactivateAddMenu(); - if(recipesList.getSelectedIndex() != -1) - RetrieveData.fillComponents(recipesList.getSelectedValue().toString()); - } - }); - btnCancel.setVisible(false); - btnCancel.setBounds(319, 46, 117, 25); - panel_2.add(btnCancel); - - JLabel lblDescription = new JLabel("Opis wykonania:"); - lblDescription.setBounds(26, 227, 152, 15); - panel_2.add(lblDescription); - - scrollPane_1 = new JScrollPane(); - scrollPane_1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - scrollPane_1.setBounds(26, 88, 228, 126); - panel_2.add(scrollPane_1); - - txtIngredients = new JTextArea(); - txtIngredients.setEditable(false); - txtIngredients.setLineWrap(true); - scrollPane_1.setViewportView(txtIngredients); - - //RetrieveData.insertSampleData(); - RetrieveData.fillList(); - txtSearch.setText("wpisz tytuł/tagi..."); - txtSearch.getDocument().addDocumentListener(new DocumentListener() { - - public void changedUpdate(DocumentEvent e) { - RetrieveData.fillList(); - } - - public void insertUpdate(DocumentEvent e) { - RetrieveData.fillList(); - } - - public void removeUpdate(DocumentEvent e) { - RetrieveData.fillList(); - } - }); - } -} diff --git a/src/main/java/ksiazka/kucharska/RecipeBuilder.java b/src/main/java/ksiazka/kucharska/RecipeBuilder.java index d518fbb..b0e0ab1 100644 --- a/src/main/java/ksiazka/kucharska/RecipeBuilder.java +++ b/src/main/java/ksiazka/kucharska/RecipeBuilder.java @@ -5,6 +5,7 @@ import javax.swing.ImageIcon; abstract class RecipeBuilder { protected CB_Model rOb; + protected CB_View tV; public CB_Model build() { return rOb; @@ -14,6 +15,10 @@ abstract class RecipeBuilder { rOb = new CB_Model(); } + public RecipeBuilder(CB_View v) { + tV = v; + } + public abstract void buildTitle(); public abstract void buildIngred(); public abstract void buildDesc(); @@ -24,25 +29,31 @@ abstract class RecipeBuilder { class NewRecipeBuilder extends RecipeBuilder { + public NewRecipeBuilder(CB_View v) { + super(v); + } public void buildTitle() { - rOb.setName(FrmMain.txtEdTitle.getText()); + rOb.setName(tV.getRecipeEdTitle()); } public void buildIngred() { - rOb.setIngredients(FrmMain.txtIngredients.getText()); + rOb.setIngredients(tV.getRecipeIngredients()); } public void buildDesc() { - rOb.setDescription(FrmMain.txtDescription.getText()); + rOb.setDescription(tV.getRecipeDescription()); } public void buildTags() { - rOb.setTags(FrmMain.txtTags.getText()); + rOb.setTags(tV.getRecipeTags()); } public void buildImg() { - rOb.setImage((ImageIcon)FrmMain.imgRecipe.getIcon()); + rOb.setImage((ImageIcon)tV.getImgRecipe().getIcon()); } } class ExampleRecipeBuilder extends RecipeBuilder { + public ExampleRecipeBuilder(CB_View v) { + super(v); + } public void buildTitle() { rOb.setName("Kanapka"); } @@ -56,13 +67,14 @@ class ExampleRecipeBuilder extends RecipeBuilder { rOb.setTags("kanapka, szynka, chleb"); } public void buildImg() { - rOb.setImage(FrmMain.imgDefaultRecipe); + rOb.setImage(tV.getDefaultImgRecipe()); } } class RecipeManager { private RecipeBuilder recipeBuilder; + protected CB_View tV; public void setRecipeBuilder(RecipeBuilder rb) { recipeBuilder = rb; diff --git a/src/main/java/ksiazka/kucharska/RetrieveData.java b/src/main/java/ksiazka/kucharska/RetrieveData.java deleted file mode 100644 index a30bff1..0000000 --- a/src/main/java/ksiazka/kucharska/RetrieveData.java +++ /dev/null @@ -1,82 +0,0 @@ -package ksiazka.kucharska; - -import java.util.List; - -import javax.swing.DefaultListModel; -import javax.swing.ImageIcon; - -import db.AllRecipes; -import db.Cookbook; -import db.Recipe; -import db.SearchRecipe; -import db.SearchRecipeNameTag; - -public class RetrieveData extends FrmMain{ - /** - * - */ - private static final long serialVersionUID = 1L; - public static void insertSampleData(){ - Cookbook myCb = new Cookbook(); - - RecipeManager rm = new RecipeManager(); - rm.setRecipeBuilder(new ExampleRecipeBuilder()); - rm.constructRecipe(); - Recipe rc = rm.getRecipe(); - myCb.insertRecipe(rc); - - myCb.closeConnection(); - } - public static void fillList(){ - Cookbook myCb = new Cookbook(); - SearchRecipe sr; - if (txtSearch.getText() != "") { - sr = new SearchRecipeNameTag(); - } - else - { - sr = new AllRecipes(); - } - List names = sr.obtainRecipeNames(); - - DefaultListModel recipesList; - recipesList = getRecipesList(); - recipesList.clear(); - - for (String r : names) - { - recipesList.addElement(r); - } - myCb.closeConnection(); - } - public static void fillComponents(String name){ - Cookbook myCb = new Cookbook(); - CB_Model myRecipe = myCb.selectRecipe(name); - lblRecipeTitle.setText(name); - txtIngredients.setText(myRecipe.getIngredients()); - txtDescription.setText(myRecipe.getDescription()); - txtTags.setText(myRecipe.getTags()); - imgRecipe.setIcon(myRecipe.getImage()); - txtDescription.setCaretPosition(0); - txtIngredients.setCaretPosition(0); - myCb.closeConnection(); - } - public static void addNewRecipe(){ - Cookbook myCb = new Cookbook(); - - RecipeManager rm = new RecipeManager(); - rm.setRecipeBuilder(new NewRecipeBuilder()); - rm.constructRecipe(); - - CB_Model obj = rm.getRecipe(); - myCb.insertRecipe(obj); - //myCb.insertRecipe(txtEdTitle.getText(), txtIngredients.getText(), txtDescription.getText(), txtTags.getText(), (ImageIcon)imgRecipe.getIcon()); - - myCb.closeConnection(); - } - public static void removeRecipe(String name){ - Cookbook myCb = new Cookbook(); - myCb.deleteRecipe(name); - myCb.closeConnection(); - } -}