Search code examples
javaswingjoptionpane

Return the value from JOptionPane


I have made a JOptionPane which contains a JPanel. The panel contains one button and one Jtable.

JPanel p = atomicAttack.getPanel(); //make the panel and return it
JOptionPane.showOptionDialog(null, p,"Atomic Attacks", 
            JOptionPane.DEFAULT_OPTION,JOptionPane.INFORMATION_MESSAGE, 
            null, new Object[]{}, null);

and inside the JButton i have:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
    selectedId=jTable1.getValueAt(jTable1.getSelectedRow(), 0).toString();
}  

I need to when the user clicks on the button, the JOption get closed and the selectedId get return from the JOptionPane?

I have seen this, but it is not exactly what i am looking for. Because the button does not return the value for me.


Solution

  • Focus on the models and things will be easier.

    public static void main(String[] args) {
        DefaultTableModel tableModel = new DefaultTableModel();
        tableModel.addColumn("Selection", new Object[] { "A", "B", "C" });
    
        JTable table = new JTable(tableModel);
        ListSelectionModel selectionModel = table.getSelectionModel();
    
        JPanel p = new JPanel(new BorderLayout());
        p.add(table, BorderLayout.CENTER);
    
        int option = JOptionPane.showConfirmDialog(null, p, "Atomic Attacks", JOptionPane.OK_CANCEL_OPTION,
                JOptionPane.INFORMATION_MESSAGE);
    
        if (JOptionPane.OK_OPTION == option) {
            printSelection(selectionModel, tableModel);
        } else {
            selectionModel.clearSelection();
        }
    
    }
    
    private static void printSelection(ListSelectionModel selectionModel, TableModel tableModel) {
        for (int i = selectionModel.getMinSelectionIndex(); i <= selectionModel.getMaxSelectionIndex(); i++) {
            if (selectionModel.isSelectedIndex(i)) {
                Object selectedValue = tableModel.getValueAt(i, 0);
                System.out.println(selectedValue);
            }
        }
    }
    

    If you now select multiple rows

    Table model selection in JOptionPane

    and press the ok button the result will be

    A
    C
    

    If you want a single selection you can just set

    ListSelectionModel selectionModel = table.getSelectionModel();      
    selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);