Ciao
ho una JTable riempita di dati presi dal database, per ora è solo una lista di nomi, perciò ha solo una colonna. Al click del mouse su una determinata cella dovrei far comparire una scheda con le relative informazioni (sempre prese dal database).
Ho provato con un mouse listener, ma escono un sacco di errori, non so bene cosa sbaglio, quindi vorrei un aiuto.
Posto il codice:
Questo è il mouse listener che ho scritto:
class MousePressListener implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
int col = table.convertColumnIndexToModel(x);
int row = table.convertRowIndexToModel(y);
TableModel model = (TableModel)e.getSource();
String selezione = model.getValueAt(row, col).toString();
SchedaFrame c = new SchedaFrame(mainFrame);
c.showData(selezione);
mainFrame.goSchedaFrame();
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
Poi lo implemento nella classe in cui visualizzo la tabella in questo modo:
MouseListener l = new MousePressListener();
table.addMouseListener(l);
Sto utilizzando un card layout in un frame principale, che è questo:
public class MainFrame extends JFrame{
private Container contentPane = getContentPane();
private CardLayout cardLayout = new CardLayout();
public MainFrame()
{
setSize(900,700);
setLocation(250, 10);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
contentPane.setLayout(cardLayout);
contentPane.add(new HomeFrame(this), "Home");
getContentPane().add(new SchedaFrame(this), "scheda");
}
public void goHomeFrame()
{
this.setTitle("Home");
cardLayout.show(contentPane, "Home");
}
public void goSchedaFrame()
{
this.setTitle("Scheda");
cardLayout.show(contentPane, "scheda");
}
}
Ed infine, non so se possa essere utile ma vi inserisco tutto, la card che dovrei visualizzare al click sulla cella della table:
public class CardFrame extends JPanel
{
private JScrollPane scroll;
private JTable scheda;
public void showData(String selected)
{
ArrayList<TabellaDB> data = new ArrayList<TabellaDB>();
data = TabellaDBDAO.showAllData(selected);
TableModelCard table = new TableModelCard(data);
scheda = new JTable(table);
}
public CardFrame(MainFrame mainFrame) throws HeadlessException
{
scroll = new JScrollPane(scheda);
add(scroll);
}
}