2017-04-08 183 views
2

我做了一个JOptionPane其中包含一个JPanel。该面板包含一个按钮和一个Jtable。从JOptionPane返回值

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); 

和里面的JButton我有:

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

我需要当用户点击该按钮时,JOption得到关闭从JOptionPane的的selectedId获取回报?

我看过this,但它不完全是我在找的东西。 因为按钮不会为我返回值。

回答

3

专注于模型和事情会更容易。

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); 
     } 
    } 
} 

如果现在选择多行

Table model selection in JOptionPane

,然后按OK按钮,结果将是

A 
C 

如果你愿意,你可以只设置

单个选择
ListSelectionModel selectionModel = table.getSelectionModel();  
selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
+0

如果我正确地得到你,你的意思是我应该删除面板中的jButton,并使用JoptionPane按钮。真正? – user5363938

+0

你不需要删除它。如果使用按钮关闭选项窗格,上面的示例也可以工作。我只是使用了默认的选项窗格按钮,使我的示例更容易一些,并且默认的按钮是开箱即用的语言。 –

+0

是的,但没有任何意义的是拥有2个功能相同的按钮 – user5363938