import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import java.util.Vector;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TableColumnModelListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import javax.swing.tree.*;
public class Explorer extends JFrame implements TableModelListener{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
private JPanel contentPane;
private JPanel innercontentPane;
private JPanel infoPane;
private JPanel footerPane;
private JPanel costPane;
private JModdedTable table;
private JComboBox comboBox;
private DefaultTableModel tableModel=new DefaultTableModel();
private TableColumnModelListener tableListener;
GridBagLayout grid = new GridBagLayout();
GridBagConstraints straints = new GridBagConstraints();
private JButton save =new JButton("Speichern");
private JButton abort =new JButton("Abbrechen");
private JLabel labelTotalcost;
private JLabel labelTotalpriceNoDiscount;
private JLabel labelTotalpriceYesDiscount;
private JLabel labelMarginalIncome;
private JLabel labelWeightedAverageDiscount;
private JLabel labelTotalWorkingHours;
private JLabel varTotalcost;
private JLabel varTotalpriceNoDiscount;
private JLabel varTotalpriceYesDiscount;
private JLabel varMarginalIncome;
private JLabel varWeightedAverageDiscount;
private JLabel varTotalWorkingHours;
private JLabel labelShortDescr;
private JLabel labelLongDescr;
private JLabel labelBeginDate;
private JLabel labelEndDate;
private JTextArea varShortDescr;
private JTextArea varLongDescr;
private JTextPane varBeginDate;
private JTextPane varEndDate;
//Header-Display
private JLabel OrderNR;
private JLabel ClientNR;
private JLabel ClientFirstname;
private JLabel ClientLastname;
private JLabel varOrderNR;
private JLabel varClientNR;
private JLabel varClientFirstname;
private JLabel varClientLastname;
private MenuBar menuBar;
private Menu Order;
private MenuItem openOrder;
private MenuItem newOrder;
private MenuItem saveOrder;
private MenuItem executeOrder;
private HidableTableColumnModel htcm;
private Calculation calc=new Calculation();
private JPopupMenu popupDatei = new JPopupMenu();
private JPopupMenu popupBackground = new JPopupMenu();
private double discountsettext;
private Font font1;
private database db=new database();
private MyLeaf node;
private double stk;
private double Totalcost;
private double TotalpriceNoDiscount;
private double TotalpriceYesDiscount;
private double MarginalIncome;
private double WeightedAverageDiscount;
private int position_stueck;
private int position_materialnr;
private int position_ekpreisnetto;
private int position_vpreisnetto;
private int position_vpreisnrabatt;
private int position_rabatt;
private int delete_column;
private String clientNR;
private String prename;
private String surname;
private Map<Integer, Double> listArticles= new HashMap<Integer, Double>();
private List<Artikel> listDB =db.doArticles();
private List<Angebot> listAuftraege = db.doAuftraege();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Explorer frame = new Explorer("000005","Josef","Koch");
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame
*/
public Explorer() {
}
public Explorer(int orderNR,String order_description_short,String order_description_long,String working_address,
String prename, String surname, Date beginDate, Date endDate, Double totalWorkingHours, Double Totalcost,
Double TotalpriceNoDiscount, Double TotalpriceYesDiscount, Double MarginalIncome,
Double grantedDiscount) {
}
public Explorer(String clientNR, String prename, String surname) {
//TEMP- Testdaten
listDB = new ArrayList<Artikel>();
listDB.add(new Artikel(1,"Zylinder","3KS","EVVA","30mmx30mm",200.00,280.23,20.03));
listDB.add(new Artikel(2,"Zylinder","Multi","EVVA","30mmx30mm",200.00,280.23,20.03));
listDB.add(new Artikel(3,"Balken","FTS88","EVVA","30mmx30mm",200.00,280.23,20.03));
listDB.add(new Artikel(4,"Arbeitszeit","K1","K1","30mmx30mm",200.00,280.23,20.03));
this.clientNR=clientNR;
this.prename=prename;
this.surname=surname;
Totalcost=0.00;
TotalpriceNoDiscount=0.00;
TotalpriceYesDiscount=0.00;
MarginalIncome=0.00;
WeightedAverageDiscount=0.00;
delete_column=8; //Index der Spalte "Löschen" um zeilen zu löschen
stk =1.0;
position_stueck=0;
position_materialnr=1;
position_ekpreisnetto=5;
position_vpreisnetto=6;
position_rabatt=7;
position_vpreisnrabatt=8;
tableModel.addTableModelListener(this);
font1=new Font("Font1", 15, 15);
///////////////////////////
// JLabel Befüllung und Spaltenerstellung
////////////////////////////
labelTotalcost = new JLabel("Gesamtkosten:");
labelTotalpriceNoDiscount = new JLabel("Verkaufspreis vor Rabatt:");
labelTotalpriceYesDiscount = new JLabel("Verkaufspreis nach Rabatt:");
labelMarginalIncome = new JLabel("Deckungsbeitrag:");
labelWeightedAverageDiscount = new JLabel("Durchschnittlicher Rabatt:");
if(Totalcost==0.0){
varTotalcost = new JLabel(String.valueOf(Totalcost));
}
else {
varTotalcost = new JLabel("GG"+String.valueOf(Totalcost));
}
varTotalpriceNoDiscount = new JLabel(String.valueOf(TotalpriceNoDiscount));
varTotalpriceYesDiscount = new JLabel(String.valueOf(TotalpriceYesDiscount));
varMarginalIncome = new JLabel(String.valueOf(MarginalIncome));
varWeightedAverageDiscount = new JLabel(String.valueOf(WeightedAverageDiscount)+" %");
tableModel.addColumn("Menge");
tableModel.addColumn("MatNR");
tableModel.addColumn("Material");
tableModel.addColumn("Typ/Artikel");
tableModel.addColumn("Abmessungen");
tableModel.addColumn("EKpreis netto");
tableModel.addColumn("VPpreis netto");
tableModel.addColumn("Rabatt");
tableModel.addColumn("VPpreis nach Rabatt");
tableModel.addColumn("Löschen");
///////////////////////////
// Ende von JLabel Befüllung und Spaltenerstellung
////////////////////////////
// MENU BAR
menuBar = new MenuBar ();
// Ein Menü anlegen
Order = new Menu ("Auftrag");
// Einen Menüeintrag anlegen
openOrder = new MenuItem ("Auftrag öffnen");
newOrder = new MenuItem ("Neuer Auftrag");
saveOrder = new MenuItem ("Auftrag speichern");
executeOrder = new MenuItem ("Auftrag durchführen");
// Eintrage dem Menü hinzufügen
Order.add (openOrder);
Order.add (newOrder);
Order.add (saveOrder);
Order.add (executeOrder);
// Das Menü der Leiste hinzufügen
menuBar.add(Order);
menuBar.setFont(font1);
setMenuBar(menuBar);
//infoPane
OrderNR = new JLabel("AngebotsNR:");
ClientNR = new JLabel("KundenNR:");
ClientFirstname = new JLabel("Vorname:");
ClientLastname = new JLabel("Nachname:");
varOrderNR = new JLabel("000001");
varClientNR = new JLabel(String.valueOf(clientNR));
varClientFirstname = new JLabel(prename);
varClientLastname = new JLabel(surname);
labelShortDescr = new JLabel("Kurzbeschreibung");
labelLongDescr = new JLabel("Lange Beschreibung");
labelBeginDate = new JLabel("Anfangsdatum");
labelEndDate = new JLabel("Enddatum");
varShortDescr = new JTextArea();
varLongDescr = new JTextArea();
varBeginDate = new JTextPane();
varEndDate = new JTextPane();
varShortDescr.setPreferredSize(new Dimension(40,55));
varShortDescr.setLineWrap(true);
varShortDescr.setWrapStyleWord(true);
varLongDescr.setPreferredSize(new Dimension(40,55));
varLongDescr.setLineWrap(true);
varLongDescr.setWrapStyleWord(true);
varBeginDate.setPreferredSize(new Dimension(55,20));
varEndDate.setPreferredSize(new Dimension(55,20));
///////////////////////////////
// Info Panel
///////////////////////////////
infoPane = new JPanel();
infoPane.setLayout(new GridBagLayout());
infoPane.setMinimumSize(new Dimension(250,270));
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(10,10,10,10); //top padding
// Erste Zeile mit Kundennr, Name usw.
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.01;
c.gridx = 0;
c.gridy = 0;
infoPane.add(OrderNR, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 1;
c.gridy = 0;
infoPane.add(varOrderNR, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.01;
c.gridwidth = 1;
c.gridx = 2;
c.gridy = 0;
infoPane.add(ClientNR, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.1;
c.gridwidth = 1;
c.gridx = 3;
c.gridy = 0;
infoPane.add(varClientNR, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.01;
c.gridwidth = 1;
c.gridx = 4;
c.gridy = 0;
infoPane.add(ClientFirstname, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.1;
c.gridwidth = 1;
c.gridx = 5;
c.gridy = 0;
infoPane.add(varClientFirstname, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.01;
c.gridwidth = 1;
c.gridx = 6;
c.gridy = 0;
infoPane.add(ClientLastname, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
c.gridwidth = 1;
c.gridx = 7;
c.gridy = 0;
infoPane.add(varClientLastname, c);
// Zweite Zeile mit Beschreibung, usw.
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
c.gridwidth = 1;
c.gridx = 0;
c.gridy = 1;
infoPane.add(labelShortDescr, c);
c.weightx = 1.0;
c.ipady = 2;
c.gridwidth = 2;
c.gridheight = 1;
c.fill = GridBagConstraints.BOTH;
c.gridx = 1;
c.gridy = 1;
infoPane.add(varShortDescr, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
c.gridwidth = 1;
c.gridx = 3;
c.gridy = 1;
infoPane.add(labelLongDescr, c);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.gridwidth = 3;
c.gridx = 4;
c.gridy = 1;
infoPane.add(varLongDescr, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
c.gridwidth = 1;
c.gridx = 0;
c.gridy = 2;
infoPane.add(labelBeginDate, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
c.gridwidth = 1;
c.gridx = 1;
c.gridy = 2;
infoPane.add(varBeginDate, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
c.gridwidth = 1;
c.gridx = 3;
c.gridy = 2;
infoPane.add(labelEndDate, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
c.gridwidth = 1;
c.gridx = 4;
c.gridy = 2;
infoPane.add(varEndDate, c);
///////////////////////////////
// Ende von Info Panel
///////////////////////////////
/////////////////
// Footer JPanel
////////////////
footerPane = new JPanel();
footerPane.setLayout(new GridBagLayout());
GridBagConstraints la = new GridBagConstraints();
la.insets = new Insets(10,10,10,10); //top padding
la.fill = GridBagConstraints.CENTER;
la.weightx = 0.01;
la.gridx = 3;
la.gridy = 1;
footerPane.add(save, la);
la.fill = GridBagConstraints.CENTER;
la.weightx = 0.01;
la.gridheight = 1;
la.gridx = 4;
la.gridy = 1;
footerPane.add(abort,la);
costPane = new JPanel();
costPane.setLayout(new GridBagLayout());
costPane.setMinimumSize(new Dimension(250,250));
// costPane.setMaximumSize(new Dimension(450,200));
GridBagConstraints g = new GridBagConstraints();
// costPane.setPreferredSize(new Dimension(400,200));
g.insets = new Insets(10,10,10,10); //top padding
g.fill = GridBagConstraints.HORIZONTAL;
g.weightx = 0.01;
g.gridx = 2;
g.gridy = 1;
costPane.add(labelTotalcost, g);
g.fill = GridBagConstraints.HORIZONTAL;
g.weightx = 1.0;
g.gridheight = 1;
g.gridx = 3;
g.gridy = 1;
costPane.add(varTotalcost, g);
g.fill = GridBagConstraints.HORIZONTAL;
g.weightx = 0.01;
g.gridwidth = 1;
g.gridx = 0;
g.gridy = 0;
costPane.add(labelTotalpriceNoDiscount, g);
g.fill = GridBagConstraints.HORIZONTAL;
g.weightx = 0.1;
g.gridwidth = 1;
g.gridx = 1;
g.gridy = 0;
costPane.add(varTotalpriceNoDiscount, g);
g.fill = GridBagConstraints.HORIZONTAL;
g.weightx = 0.01;
g.gridwidth = 1;
g.gridx = 2;
g.gridy = 0;
costPane.add(labelTotalpriceYesDiscount, g);
g.fill = GridBagConstraints.HORIZONTAL;
g.weightx = 0.1;
g.gridwidth = 1;
g.gridx = 3;
g.gridy = 0;
costPane.add(varTotalpriceYesDiscount, g);
g.fill = GridBagConstraints.HORIZONTAL;
g.weightx = 0.01;
g.gridwidth = 1;
g.gridx = 2;
g.gridy = 2;
costPane.add(labelMarginalIncome, g);
g.fill = GridBagConstraints.HORIZONTAL;
g.weightx = 1.0;
g.gridwidth = 1;
g.gridx = 3;
g.gridy = 2;
costPane.add(varMarginalIncome, g);
g.fill = GridBagConstraints.HORIZONTAL;
g.weightx = 0.01;
g.gridwidth = 1;
g.gridx = 4;
g.gridy = 0;
costPane.add(labelWeightedAverageDiscount, g);
g.fill = GridBagConstraints.HORIZONTAL;
g.weightx = 1.0;
g.gridwidth = 1;
g.gridx = 5;
g.gridy = 0;
costPane.add(varWeightedAverageDiscount, g);
////////////////
// Gesamtkomponenten befüllen
////////////////
// Erstelle JScrollPane für Artikelbaum / Exploreranzeige
JScrollPane scrollPaneTree = new JScrollPane();
DefaultTreeModel treeModel=new DefaultTreeModel(getTree());
final JTree tree = new JTree(treeModel);
scrollPaneTree.setViewportView(tree);
scrollPaneTree.setMinimumSize(new Dimension(80,200));
JScrollPane scrollPaneTable = new JScrollPane();
table = new JModdedTable(tableModel);
table.setFillsViewportHeight(true);
scrollPaneTable.setViewportView(table);
scrollPaneTable.setVerticalScrollBar(new JScrollBar());
scrollPaneTable.setMinimumSize(new Dimension(450,200));
scrollPaneTable.setMaximumSize(new Dimension(450,700));
JMenuItem itemNeu = new JMenuItem("Neue Datei");
popupBackground.add(itemNeu);
contentPane = new JPanel();
contentPane.setLayout(new GridBagLayout());
contentPane.setMinimumSize(new Dimension(1000, 450));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
// ContenPane - Einstellungen
GridBagConstraints constraintContentPane = new GridBagConstraints();
// constraintContentPane.insets = new Insets(10,10,10,10); //top padding
constraintContentPane.fill = GridBagConstraints.BOTH;
constraintContentPane.weightx = 1;
constraintContentPane.weighty = 1;
constraintContentPane.gridheight = 3;
constraintContentPane.gridwidth = 1;
constraintContentPane.gridx = 1;
constraintContentPane.gridy = 1;
contentPane.add(scrollPaneTree, constraintContentPane);
constraintContentPane.fill = GridBagConstraints.BOTH;
constraintContentPane.weightx = 1;
constraintContentPane.weighty = 1;
constraintContentPane.gridheight = 1;
constraintContentPane.gridwidth = 3;
constraintContentPane.gridx = 2;
constraintContentPane.gridy = 1;
contentPane.add(infoPane, constraintContentPane);
constraintContentPane.fill = GridBagConstraints.BOTH;
constraintContentPane.weightx = 1;
constraintContentPane.weighty = 1;
constraintContentPane.gridheight = 1;
constraintContentPane.gridwidth = 3;
constraintContentPane.gridx = 2;
constraintContentPane.gridy = 2;
contentPane.add(scrollPaneTable, constraintContentPane);
constraintContentPane.fill = GridBagConstraints.BOTH;
constraintContentPane.weightx = 1;
constraintContentPane.weighty = 1;
constraintContentPane.gridheight = 1;
constraintContentPane.gridwidth = 3;
constraintContentPane.gridx = 2;
constraintContentPane.gridy = 3;
contentPane.add(costPane, constraintContentPane);
//contentPane.add(splitPane, constraintContentPane);
constraintContentPane.fill = GridBagConstraints.BOTH;
constraintContentPane.weightx = 1;
constraintContentPane.weighty = 1;
constraintContentPane.gridheight = 1;
constraintContentPane.gridwidth = 1;
constraintContentPane.gridx = 3;
constraintContentPane.gridy = 4;
contentPane.add(save, constraintContentPane);
constraintContentPane.fill = GridBagConstraints.BOTH;
constraintContentPane.weightx = 1;
constraintContentPane.weighty = 1;
constraintContentPane.gridheight = 1;
constraintContentPane.gridwidth = 1;
constraintContentPane.gridx = 4;
constraintContentPane.gridy = 4;
contentPane.add(abort, constraintContentPane);
// JFrame - Einstellungen
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// setExtendedState(JFrame.MAXIMIZED_BOTH);
setMinimumSize(new Dimension(1000,550));
//setBounds(100, 100, 1000, 600);
setLayout(new GridBagLayout()); // GridLayout setzen
setVisible(true);
pack();
GridBagConstraints constraintJFrame = new GridBagConstraints();
// constraintJFrame.insets = new Insets(10,10,10,10); //top padding
constraintJFrame.fill = GridBagConstraints.BOTH;
constraintJFrame.gridheight = 4;
constraintJFrame.gridwidth = 4;
constraintJFrame.gridx = 1;
constraintJFrame.gridy = 1;
add(contentPane, constraintJFrame);
JMenuItem itemOefnnen = new JMenuItem("\u00D6ffnen");
//MAT-Nr Spalte unsichtbar setzen
htcm = new HidableTableColumnModel(table.getColumnModel());
htcm.setColumnVisible(1, false);
//Spaltenbreite vergeben
table.getColumnModel().getColumn(0).setPreferredWidth(48);
table.getColumnModel().getColumn(2).setPreferredWidth(94);
table.getColumnModel().getColumn(3).setPreferredWidth(100);
table.getColumnModel().getColumn(4).setPreferredWidth(95);
table.getColumnModel().getColumn(5).setPreferredWidth(100);
table.getColumnModel().getColumn(6).setPreferredWidth(60);
table.getColumnModel().getColumn(7).setPreferredWidth(115);
//Erlaubt nur Doube in der Spalte "Menge" bis zu 100.000 Stk / Artikel
table.getColumnModel().getColumn(0).setCellEditor(new DoubleEditor(0,100000));
///////////////////////////////
// Erstellen von Gesamtkomponenten befüllen
///////////////////////////////
///////////////////////////////
// Ende von Gesamtkomponenten befüllen
///////////////////////////////
} //End of constructor Explorer
public int doubledRow(TableModel tableModel,int MaterialNr){
int row=-1;
for (int z = 0; z < tableModel.getRowCount(); z++) {
if(tableModel.getValueAt(z, 1).equals(MaterialNr)) {
row=z;
System.out.println("Doppelt");
}
}
return row;
} //end of doubledRow
public DefaultMutableTreeNode getTree() {
List<String[]> flatData = new ArrayList<String[]>();
int numberofLevels=2;
for(int i=0;i<listDB.size();i++){
String NR= ""+listDB.get(i).getMaterialNR();
flatData.add(new String[] {listDB.get(i).getMaterial(),listDB.get(i).getArtikel(),
listDB.get(i).getSize(),NR,listDB.get(i).getProducer(),
String.valueOf(listDB.get(i).getPurchasePrice()),String.valueOf(listDB.get(i).getSellingPrice()),
String.valueOf(listDB.get(i).getMaximumDiscount())});
}
final DefaultMutableTreeNode root = new DefaultMutableTreeNode();
root.setUserObject("Materialauswahl");
final Stack<DefaultMutableTreeNode> stack =
new Stack<DefaultMutableTreeNode>();
for (String[] row : flatData) {
// adjust stack to match level
final Iterator<DefaultMutableTreeNode> stackIt = stack.iterator();
for (int level = 0; level <=numberofLevels && stackIt.hasNext(); level++) {
if (!stackIt.next().getUserObject().equals(row[level])) {
stack.setSize(level);
break;
}
}
// rebuild trail of stack
for (int level = stack.size(); level <= numberofLevels; level++) {
final String s = row[level];
final MyLeaf child = new MyLeaf(s);
child.setMaterialNR(Integer.parseInt(row[3]));
child.setMaterialname(row[0]);
child.setArtikelname(row[1]);
child.setSizename(row[2]);
child.setProducer(row[4]);
child.setPurchasePrice(Double.parseDouble(row[5]));
child.setSellingPrice(Double.parseDouble(row[6]));
child.setMaximumDiscount(Double.parseDouble(row[7]));
(stack.isEmpty() ? root : stack.peek()).add(child);
stack.push(child);
}
}
return root;
} // end of getTree()
} //end of Class Explorer