Witam serdecznie,
Jestem początkującym programistą języka Java i pierwszy raz mam styczność z komponentami JTable. Jestem w trakcje pisania małego programiku który będzie tworzył tabelę w której będą znajdować się produkty. Podczas dodawania kolejnych produktów chcę żeby program sprawdzał czy w istniejących już wierszach istnieje produkt który ma taką samą nazwę i taką samą cenę jeżeli tak to zamiast dodawać nowy produkt do tabeli ma dodawać do już istniejącego wiersza ilość sztuk. Problem zaznaczyłem komentarzem w kodzie. Ogólnie proszę też o uwagi i ewentualnie inne propozycje bo może robię wszystko okrężną drogą.
Pozdrawiam Grzesiek
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class Tabela extends JPanel{
private static int licznik = 1;
private final int NAZWA = 0;
private final int WIERSZ = 0;
private final int ILOSC = 1;
private final int CENA = 2;
private final int PIERWSZA = 0;
private final int DRUGA = 1;
private String[] columnNames = {"Lp.", "Nazwa", "Ilość", "Rabat [%]", "Cena", "Suma",};
private String[] columnNameTemp = {"Nazwa","Ilość","Cena",};
private Object[][] data;
private Object[][] dataTemp = {{"Ozdoby do włosów", "1", "0.0"}};
private final DefaultTableModel model = new DefaultTableModel(data, columnNames);
private final JTable tab = new JTable(model);
private final DefaultTableModel modelTemp = new DefaultTableModel(dataTemp, columnNameTemp);
private final JTable tabTemp = new JTable(modelTemp);
private DecimalFormat df = new DecimalFormat("#.##");
public Tabela(){
tab.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
tab.setPreferredScrollableViewportSize(new Dimension(700, 400));
tab.setFillsViewportHeight(true);
tab.setRowHeight(20);
TableColumn column = null;
column = tab.getColumnModel().getColumn(PIERWSZA);
column.setPreferredWidth(10);
column = tab.getColumnModel().getColumn(DRUGA);
column.setPreferredWidth(300);
tabTemp.setPreferredScrollableViewportSize(new Dimension(700, 20));
tabTemp.setFillsViewportHeight(true);
tabTemp.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
tabTemp.setRowHeight(20);
column = tabTemp.getColumnModel().getColumn(PIERWSZA);
column.setPreferredWidth(300);
JComboBox comboBox = new JComboBox();
comboBox.addItem("Ozdoby do włosów");
comboBox.addItem("Biżuteria sztuczna");
comboBox.addItem("Pudełka");
column.setCellEditor(new DefaultCellEditor(comboBox));
JButton dodaj = new JButton("Dodaj");
dodaj.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String nazwa = (String)tabTemp.getModel().getValueAt(WIERSZ, NAZWA);
String ilosc = (String)tabTemp.getValueAt(WIERSZ, ILOSC);
int iloscT = Integer.parseInt(ilosc);
String cena = (String)tabTemp.getModel().getValueAt(WIERSZ, CENA);
double cenaT = Double.parseDouble(cena);
//Problem zaczuna sie tutaj !!! :)
for(int i = 0; i < model.getRowCount(); i++){
System.out.println(model.getRowCount());
//Narazie porownuje tylko same ceny
if(cena.equals((String)tab.getModel().getValueAt(i, 4))){
System.out.println("Taka sama ilosc");
int temp = 0;
String tempIlosciBedacej = (String)tab.getModel().getValueAt(i, 2);
temp = Integer.parseInt(tempIlosciBedacej);
tab.setValueAt((ilosc+temp), i, 2);
if(i >= 1){
model.removeRow(i);
licznik--;
}
}else
System.out.println("Inna ilosc");
}
Object[] dd = {licznik++ ,nazwa , ilosc, "", cena, df.format(iloscT*cenaT)};
model.addRow(dd);
refresh();
}
});
JButton nowy = new JButton("Nowy");
nowy.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
while (model.getRowCount()>0){
model.removeRow(0);
}
licznik = 1;
}
});
setLayout(new BorderLayout());
add(new JScrollPane(tab),BorderLayout.NORTH);
add(new JScrollPane(tabTemp),BorderLayout.CENTER);
add(nowy,BorderLayout.SOUTH);
add(dodaj,BorderLayout.EAST);
}
private void refresh(){
tab.scrollRectToVisible(tab.getCellRect(tab.getRowCount()-1,tab.getColumnCount(), true));
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("TableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Tabela newContentPane = new Tabela();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}