Witam.
Mam taki fragment kodu
import java.awt.BorderLayout;
public class GUI extends JFrame implements Serializable, ListSelectionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
private final static SessionFactory factory;
static {
Configuration cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
}
private JFrame frame;
private JTable table;
private JTree tree;
private EditBeneficjent dialog;
private DefaultMutableTreeNode node_1;
private DefaultMutableTreeNode node_2;
private DefaultMutableTreeNode node_3;
private DefaultMutableTreeNode node_4;
private Object nodeInfo;
private Beneficjent beneficjent;
public GUI(){
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (UnsupportedLookAndFeelException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
frame = new JFrame();
frame.setBounds(100, 100, 1151, 520);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JToolBar toolBar = new JToolBar();
toolBar.setEnabled(false);
frame.getContentPane().add(toolBar, BorderLayout.NORTH);
JButton btnNewButton = new JButton("Dodaj");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
toolBar.add(btnNewButton);
JButton btnEdytuj = new JButton("Edytuj");
btnEdytuj.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (nodeInfo.toString()=="Beneficjenci" ){
try {
if (dialog==null)
{
dialog = new EditBeneficjent(beneficjent);
}
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception f) {
f.printStackTrace();
}
}
}
});
toolBar.add(btnEdytuj);
JButton btnNewButton_1 = new JButton("Usu\u0144");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
btnNewButton_1.setForeground(Color.RED);
toolBar.add(btnNewButton_1);
JSplitPane splitPane = new JSplitPane();
frame.getContentPane().add(splitPane, BorderLayout.CENTER);
table = new JTable(ladowaniaTabeli());
table.getSelectionModel().addListSelectionListener(this);
JScrollPane pane = new JScrollPane(table);
splitPane.setRightComponent(pane);
final ArrayList<String> beneficjent = new ArrayList<String>();
beneficjent.add("BENEFICJENT");
beneficjent.add("Beneficjenci");
beneficjent.add("Komputery");
beneficjent.add("Drukarki");
beneficjent.add("Hasła");
beneficjent.add("Połączenia");
tree = new JTree();
DefaultMutableTreeNode obj = new DefaultMutableTreeNode("START"){
{
node_1 = new DefaultMutableTreeNode(beneficjent.get(0));
for(int i=1;i<beneficjent.size();i++){
node_1.add(new DefaultMutableTreeNode(beneficjent.get(i)));
}
add(node_1);
node_2 = new DefaultMutableTreeNode(serwis.get(0));
for(int i=1;i<serwis.size();i++){
node_2.add(new DefaultMutableTreeNode(serwis.get(i)));
}
add(node_2);
node_3 = new DefaultMutableTreeNode(dokument.get(0));
for(int i=1;i<dokument.size();i++){
node_3.add(new DefaultMutableTreeNode(dokument.get(i)));
}
add(node_3);
node_4 = new DefaultMutableTreeNode(administracja.get(0));
for(int i=1;i<administracja.size();i++){
node_4.add(new DefaultMutableTreeNode(administracja.get(i)));
}
add(node_4);
}
};
tree.setModel(new DefaultTreeModel(obj));
tree.addTreeSelectionListener(listener());
splitPane.setLeftComponent(tree);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu mnNewMenu = new JMenu("New menu");
menuBar.add(mnNewMenu);
JMenuItem mnNewMenu_1 = new JMenuItem("New menu1");
mnNewMenu.add(mnNewMenu_1);
JMenu mnTest = new JMenu("Test");
menuBar.add(mnTest);
frame.setVisible(true);
}
TreeSelectionListener listener() {
TreeSelectionListener objTreeListener = new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
nodeInfo = node.getUserObject();
switch(nodeInfo.toString()){
case "Beneficjenci":
System.out.println("Beneficjent");
break;
}
}
};
return objTreeListener;
}
public BeneficjentModel ladowaniaTabeli(){
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Beneficjent.class);
List<Beneficjent> sysinfo = criteria.list();
BeneficjentModel km = new BeneficjentModel();
List<Beneficjent>listaDoModelu = new LinkedList<Beneficjent>();
for (Iterator<Beneficjent> it = sysinfo.iterator(); it.hasNext();){
Beneficjent sysi = (Beneficjent) it.next();
System.out.println("Ladowanie do tabeli : "+sysi.getImie());
listaDoModelu.add(sysi);
}
km.setData(listaDoModelu);
km.fireTableDataChanged();
tx.commit();
session.close();
return km;
}
public Beneficjent getBeneficjentID(int ID){
Beneficjent tmpBeneficjent = new Beneficjent();
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Beneficjent.class);
criteria.add(Restrictions.idEq(ID));
List<Beneficjent> lista = criteria.list();
for (Iterator<Beneficjent> it = lista.iterator(); it.hasNext();){
tmpBeneficjent = (Beneficjent) it.next();
}
tx.commit();
session.close();
return tmpBeneficjent;
}
@Override
public void valueChanged(ListSelectionEvent e) {
// TODO Auto-generated method stub
int first;
first = table.getSelectedRow();
System.out.println("Table get SelectedRow: "+first);
first = table.convertRowIndexToModel(first);//konwertuje indexy z tabeli na indexy modelu, istotne przy wyszukiwaniu danych w tabeli lub sortowaniu.
System.out.println("ConverRowIndexToModel: "+first);
getBeneficjentID(first);
}
}
problem pojawia sie tutaj:
@Override
public void valueChanged(ListSelectionEvent e) {
// TODO Auto-generated method stub
int first;
first = table.getSelectedRow();
System.out.println("Table get SelectedRow: "+first);
first = table.convertRowIndexToModel(first);//konwertuje indexy z tabeli na indexy modelu, istotne przy wyszukiwaniu danych w tabeli lub sortowaniu.
System.out.println("ConverRowIndexToModel: "+first);
getBeneficjentID(first);
}
Testowo zrobiłem sobie taka metodę aby sprawdzić jak wygląda sprawa pobieranie ID z modelu.
I niestety obydwie metody get.SelectedRow i ConverRowIndexToModel dają taka samą wartość która nijak jest zgodna z tym co jest w tabeli. ( Tak jak by do wartość dodawane było + 3).
Bardzo prosiłbym bym o pomoc ponieważ trochę się z tym już mecze.
Model wygląda następująco.
import java.util.LinkedList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class BeneficjentModel extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
public String[] colName={"ID","Imię","Nazwisko","Adres"};
private List<Beneficjent> data = new LinkedList<Beneficjent>();
public BeneficjentModel(){
}
public void setData(List<Beneficjent> listDoModelu){
this.data=listDoModelu;
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return colName.length;
}
@Override
public String getColumnName(int columnIndex){
return colName[columnIndex].toString();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
Beneficjent r = (Beneficjent) data.get(rowIndex);
switch(columnIndex){
case 0:
return r.getId();
case 1:
return r.getImie();
case 2:
return r.getNazwisko();
case 3:
return r.getAdres();
}
return null;
}
}