Sidst jeg brugte JTabel mener jeg at vi fik hentet et result set ud fra en sql forespørgsel. Der havde vi så de oplysninger vi skulle bruge med rækker osv. og kunne på den baggrund lave en TabelModel (tror jeg nok den hedder) og foder den ind i vores JTabel.
Skal ikke sige om det er den mest optimale løsning
Kan se at jeg har brugt en AbstractTabelModel så du får lige noget kode til sådan en fætter, og så ser jeg lige om jeg kan finde hvor det bliver puttet i en JTabel...
/* Fil: OrdreTableModel.java Klasse som styre datamodellen for en ordre når den oprettes */
import javax.swing.table.*; import java.util.*;
public class OrderTableModel extends AbstractTableModel { private static OrderTableModel reference; private Model model = Model.getInstance(); private ArrayList list; // Liste som holder Article objekter private ArrayList itemCount; // Liste der holder antallet
private OrderTableModel() { list = new ArrayList(); itemCount = new ArrayList(); }
public static OrderTableModel getInstance() { if(reference == null) reference = new OrderTableModel(); return reference; }
public Object getValueAt(int r, int c) { if(c == 0) return ((Article)list.get(r)).getValue(0); if(c == 1) return ((Article)list.get(r)).getValue(3); if(c == 2) return "Kr. " + ((Article)list.get(r)).getValue(1) + "0"; if(c == 3) return Integer.valueOf(itemCount.get(r).toString()); return new Object(); }
public int getColumnCount() { return 4; }
public int getRowCount() { return list.size(); }
public boolean isCellEditable(int r, int c) { if(c == 3) return true; else return false; }
public void setValueAt(Object value,int r, int c) { try { // Hvis antallet er mindre end 1 så skal varen fjernes fra listen if(Integer.parseInt(value.toString()) < 1) { list.remove(r); itemCount.remove(r); fireTableRowsDeleted(r,r); } else { itemCount.set(r, value); fireTableRowsUpdated(r,r); } } catch (NumberFormatException e) { } }
public void addRow(IDataElement element) { // Hvis objektet findes i listen skal antal forøges med 1 if(list.contains(element)) { int index = list.indexOf(element); int count = Integer.parseInt(itemCount.get(index).toString()); itemCount.remove(index); itemCount.add(index, String.valueOf(count + 1)); fireTableCellUpdated(index, 3); } else { list.add(0, element); itemCount.add(0, new Integer(1)); fireTableRowsInserted(0,0); } }
public String getColumnName(int c) { switch(c) { case 0: return "Vare nr:"; case 1: return "Vare navn:"; case 2: return "Pris:"; case 3: return "Antal:"; default: return ""; } }
public void clear() { int lines = getRowCount(); list = new ArrayList(); itemCount = new ArrayList(); fireTableRowsDeleted(0, lines); }
// Metode til at hente linierne ud så de kan blive gemt i db'en public List getLines() { ArrayList lines = new ArrayList(); for(int i = 0; i < list.size(); i++) { int antal = Integer.parseInt(itemCount.get(i).toString()); int varenr = Integer.parseInt(((IDataElement)list.get(i)).getValue(0).toString()); lines.add(new OrderLine(0,antal,0,varenr)); } return lines; } }
private OrderForm() { super(); // Sætter vores JTextFields op til at bruge en InputVerifier initFields(); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
// Når der bliver trykket på "tilføj vare" knappen addItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if(!items.isSelectionEmpty()) { tblModel.addRow((IDataElement)items.getSelectedValue()); } } } );
// Tilføjer de forskellige elementer til siden // med en standard afstand (space) int space = 5; head(); add(head); add(Box.createVerticalStrut(space)); add(paneItems); add(Box.createVerticalStrut(space)); add(addItem); add(Box.createVerticalStrut(space)); add(paneTable); add(Box.createVerticalStrut(space)); add(buttons()); }
public static OrderForm getInstance() { if(reference == null) reference = new OrderForm(); return reference; }
public JPanel orderForm() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.add(head); panel.add(items);
return panel; }
public void addItems(IDataElement element) { items.setListData(model.searchArticles(element)); }
// Danner den øverste del som indholder info omkring kunden og levering private void head() { JPanel bill = billing(); JPanel dest = destination(); JButton btn = new JButton("->"); bill.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(new Color(128,128,128), 1),"Faktura")); dest.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(new Color(128,128,128), 1),"Levering")); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { nameDest.setText(name.getText()); streetDest.setText(street.getText()); noDest.setText(no.getText()); zipDest.setText(zip.getText()); cityDest.setText(city.getText()); } } );
head.add(bill); head.add(btn); head.add(dest); }
// Dette er venstre del af head hvor faktura info står private JPanel billing() { billing.setLayout(new FlowLayout(FlowLayout.LEFT)); colLeftBill.setLayout(new BoxLayout(colLeftBill, BoxLayout.Y_AXIS)); colRightBill.setLayout(new BoxLayout(colRightBill, BoxLayout.Y_AXIS));
// Når cvr feltet mister fokus bliver cvr nummeret slåt op i databasen // Hvis den findes bliver informationen sat ind i de respektive felter cvr.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent e) { // Tjek også på om cvr er 8 char langt if(cvr.getText().length() != 8) return; // Tjek om der findes et object if(model.searchCustomers(new Customer(Integer.parseInt(cvr.getText()), "", new Adress("","",0,0), 0,' ')).size() == 0) return;
clearOrder.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { JOptionPane pane = new JOptionPane(); pane.setMessage("Er du sikker på at du vil ryde skærmen?"); pane.setMessageType(JOptionPane.QUESTION_MESSAGE); pane.setOptionType(JOptionPane.OK_OPTION); JDialog dialog = pane.createDialog(table, "Malthe Bruun Handelskompagni > Slet alt"); dialog.show(); Object selectedValue = pane.getValue(); if(Integer.parseInt(selectedValue.toString()) == 2) return; clear(); } } );
// Når man trykker på opret ordre createOrder.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { // Ser om der er ordrelinier, ellers fejl tilbage til brugeren if(tblModel.getLines().size() == 0) { JOptionPane.showMessageDialog(paneItems,"Kan ikke oprette ordren fordi at der ikke er tilføjet nogle ordrelinier. Klik OK for at fortsætte.","Malthe Bruun Handelskompagni > Ordre",JOptionPane.ERROR_MESSAGE); return; } // Opretter objekter som skal være med når ordren skal gemmes Adress adr1 = new Adress(street.getText(), city.getText(), Integer.parseInt(no.getText()), Integer.parseInt(zip.getText())); Adress adr2 = new Adress(streetDest.getText(), cityDest.getText(), Integer.parseInt(noDest.getText()), Integer.parseInt(zipDest.getText())); Customer billing = new Customer(Integer.parseInt(cvr.getText()), name.getText(), adr1, Integer.parseInt(phone.getText()), ' '); Order order = new Order(0, Integer.parseInt(cvr.getText()), "Modtaget", adr2, new java.sql.Date(System.currentTimeMillis()));
model.createOrder(billing, order, tblModel.getLines()); JOptionPane.showMessageDialog(paneItems,"Ordren er blevet gemt. Klik OK for at fortsætte.","Malthe Bruun Handelskompagni > Ordre",JOptionPane.INFORMATION_MESSAGE); clear(); } } );
// De forskellige swing objekter vi benytter os af private JPanel billing = new JPanel(); private JPanel destination = new JPanel(); private JPanel colLeftBill = new JPanel(); private JPanel colRightBill = new JPanel(); private JTextField cvr = new JTextField(); private JTextField name = new JTextField(20); private JTextField street = new JTextField(); private JTextField no = new JTextField(); private JTextField zip = new JTextField(); private JTextField city = new JTextField(); private JTextField phone = new JTextField(); private JPanel colLeftDest = new JPanel(); private JPanel colRightDest = new JPanel(); private JTextField nameDest = new JTextField(20); private JTextField streetDest = new JTextField(); private JTextField noDest = new JTextField(); private JTextField zipDest = new JTextField(); private JTextField cityDest = new JTextField(); private JList items = new JList(); private JPanel head = new JPanel(); private JPanel bill = new JPanel(); private JPanel dest = new JPanel(); private JPanel line = new JPanel(); private JButton addItem = new JButton("Tilføj vare"); private JButton createOrder = new JButton("Opret ordre"); private JButton clearOrder = new JButton("Fortryd"); private JTable table = new JTable(tblModel); private JScrollPane paneItems = new JScrollPane(items, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); private JScrollPane paneTable = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.