Search code examples
javastringswinguser-interfacejoptionpane

JOption call method from String text?


I'm not too sure how to ask this question but here it is. Please look at my code (which I abbreviated for your convenience, and don't worry about the "Sam" its temporary)

public class JeopardyGUI_Main11 extends javax.swing.JFrame {

/**
 * Creates new form JeopardyGUI_Main
 */

public JeopardyGUI_Main11() {
    initComponents();
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
public void info(){
           String[] am = new String[25];
   String[] sp = new String[25];
   String[] mu = new String[25];
   String[] spe = new String[25];
   String[] tv = new String[25];
   String[] mo = new String[25];

   String[] ama = new String[25];
   String[] spa = new String[25];
   String[] mua = new String[25];
   String[] spea = new String[25];
   String[] tva = new String[25];
   String[] moa = new String[25];

   am[0] = "Sam";ama[0] = "Sam";
   am[1] = "Sam";ama[1] = "Sam";
   ...
   am[23] = "Sam";ama[23] = "Sam";
   am[24] = "Sam";ama[24] = "Sam";

   mu[0] = "Sam";mua[0] = "Sam";
   mu[1] = "Sam";mua[1] = "Sam";
   ...
   mu[23] = "Sam";mua[23] = "Sam";
   mu[24] = "Sam";mua[24] = "Sam";



   spe[0] = "Sam";spea[0] = "Sam";
   spe[1] = "Sam";spea[1] = "Sam";
   ...
   spe[23] = "Sam";spea[23] = "Sam";
   spe[24] = "Sam";spea[24] = "Sam";


   tv[0] = "Sam";tva[0] = "Sam";
   tv[1] = "Sam";tva[1] = "Sam";
  ...
   tv[23] = "Sam";tva[23] = "Sam";
   tv[24] = "Sam";tva[24] = "Sam";


   sp[0] = "Sam";spa[0] = "Sam";
   sp[1] = "Sam";spa[1] = "Sam";
  ...
   sp[23] = "Sam";spa[23] = "Sam";
   sp[24] = "Sam";spa[24] = "Sam";


   mo[0] = "Sam";moa[0] = "Sam";
   mo[1] = "Sam";moa[1] = "Sam";
   ...
   mo[23] = "Sam";moa[23] = "Sam";
   mo[24] = "Sam";moa[24] = "Sam";

    int random_int = (int) (Math.random() * ( 0 - 24 ));  

  String am_qu = am[random_int];
  String am_an = ama[random_int];  

  String sp_qu = sp[random_int];
  String sp_an = spa[random_int];

  String mu_qu = mu[random_int];
  String mu_an = mua[random_int];

  String spe_qu = sp[random_int];
  String spe_an = spa[random_int];

  String tv_qu = tv[random_int];
  String tv_an = tva[random_int];

  String mo_qu = mo[random_int];
  String mo_an = moa[random_int];
  }

    pack();
    setLocationRelativeTo(null);
}// </editor-fold>                        

private void sp1ActionPerformed(java.awt.event.ActionEvent evt) {                                    
    // TODO add your handling code here:
}                                                                     


private void sp2ActionPerformed(java.awt.event.ActionEvent evt) {                                    
    // TODO add your handling code here:
}                                   

private void am1ActionPerformed(java.awt.event.ActionEvent evt) {                                    
    // TODO add your handling code here:
    Object[] options = {"Yes, please",
                "No way!"};
int n = JOptionPane.showOptionDialog(null,
""+am_qu,          <-------------------------------------AREA IN QUESTION
"",
JOptionPane.YES_NO_OPTION,
JOptionPane.PLAIN_MESSAGE,
null,     //do not use a custom Icon
options,  //the titles of buttons
options[0]); //default button title



}                                   

private void mo1ActionPerformed(java.awt.event.ActionEvent evt) {                                    
    // TODO add your handling code here:
}                                   

private void am1MouseClicked(java.awt.event.MouseEvent evt) {                                 
    // TODO add your handling code here:
}                                

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(JeopardyGUI_Main11.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(JeopardyGUI_Main11.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(JeopardyGUI_Main11.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(JeopardyGUI_Main11.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new JeopardyGUI_Main11().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton am1;
private javax.swing.JButton am2;
private javax.swing.JButton am3;
...
private javax.swing.JButton am4;
private javax.swing.JButton am5;

// End of variables declaration                   


}

At the "AREA IN QUESTION" I put is the location of the problem. The optionDialog box needs a String for the text, but i want to replace it with the String from the "public void info()" which will be randomized with the Math.Random.

So, the optionDialog should read "Sam" (in the middle text area) if I were to run it properly.

I'm sorry if I did not make this clear enough, ask anything, i'll be waiting for a response, thanks!


Solution

  • Here is a basic example of a different way you could structure your program which may be more efficient:

    public class SO {
    public static void main(String[] args) throws ClassNotFoundException{
        getinfo();//Set the random question and answer
    
        Object[] options = {"Yes, please", "No way!"};
        int n = JOptionPane.showOptionDialog(null,
                SO.question,//Reference the question set
                "",
                JOptionPane.YES_NO_OPTION,
                JOptionPane.PLAIN_MESSAGE,
                null,     //do not use a custom Icon
                options,  //the titles of buttons
                options[0]); //default button title
    
        JOptionPane.showMessageDialog(null, SO.answer);
    }
    
    public static void getinfo(){ //Will set question and answer
        int category = new Random().nextInt(2 - 0);//Random number to get a category
        int choice = new Random().nextInt(2 - 0);//Random to get a selection
    
        SO.question = questions[category][choice];//Get question
        SO.answer = answers[category][choice];//Answer is located in same position in answers array
    }
    
    /*Each category is represented by a seperate array within the questions
     * 2 dimensional array.  These are declared as static fields or 'Global fields'
     * This way they are easily accessible and only initialised once
     */
    private static String[][] questions = new String[][]{ 
        {"Question 1, category 1", "Question 2 category 1"},//questions[0][*] for one category 
        {"Question 1 category 2", "Question 2 category 2"}//questions[1][*] on another category
    };
    
    /*The answers array mirrors the other array so each answer in this 2D array 
     * is in the same position as the relevant question in the questions array
     * 
     */
    private static String[][] answers = new String[][]{ 
        {"Answer 1 category 1", "Answer 2 category 1"}, //answers[0][*] for questions [0][*]  
        {"Answer 1 category 2", "Answer 2 category 2"}//answers[1][*] for questions [1][*]
    };
    
    //These will each hold a question and an answer
    private static String question;
    private static String answer;
    

    }

    I have made it a lot smaller so you can get a feel for how it's working. The 'Global variable' that have been suggested to you are at the bottom. This should hopefully allow you to get your question and answer that you require for the JOPtionPane and prevent the continual re-initialisation of your arrays.

    Once again, if unsure comment me back and I'll see what I can do. Good Luck!