How To Call JFrame from another Java class

前端 未结 5 1894
渐次进展
渐次进展 2020-12-06 14:46

I am trying to do a simple Jform and call it from another class. I want to use this Jframe in a server client application, but I don\'t know how to open the JFrame class fro

相关标签:
5条回答
  • 2020-12-06 15:25
     Calculas CAL = new Calculas();
      CAL.Calculus();
    

    maybe, CAL.Calculas(); I dont know java but I realized that, sorry about my english:)

    0 讨论(0)
  • 2020-12-06 15:34

    Forgive me if this is naive, as Im not anything of a Java programmer... But isnt it just because you need to set visible?

    Calculas CAL = new Calculas();
    CAL.setVisible(true);
    
    0 讨论(0)
  • 2020-12-06 15:40

    Here's an example of a basic structure you can use:

    import java.awt.*;
    import javax.swing.*;
    
    
    
    class MyGui {
    
        private JFrame window = new JFrame("This is the title");
    
        public MyGui() {
            initComponents();
    
            window.setBounds(100, 50, 600, 400); //location, size
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            window.setVisible(true);
        }
    
        public void initComponents() {
            Container cp = window.getContentPane();
            cp.setLayout(new FlowLayout() );
            cp.add(new JLabel("Hello world") );
        }
    }
    
    
    public class MyProg {
        private static void createAndShowGUI() {
            new MyGui();
        }
    
       public static void main(String[] args) {
            //Schedule a job for the event dispatch thread:
            //creating and showing this application's GUI.
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }
    

    And in separate files:

    MyGui.java

    import java.awt.*;
    import javax.swing.*;
    
    public class MyGui {
    
        private JFrame window = new JFrame("This is the title");
    
        public MyGui() {
            initComponents();
    
            window.setBounds(100, 50, 600, 400); //location, size
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            window.setVisible(true);
        }
    
        public void initComponents() {
            Container cp = window.getContentPane();
            cp.setLayout(new FlowLayout() );
            cp.add(new JLabel("Hello world") );
        }
    }
    

    MyProg.java

    import javax.swing.*;
    
    public class MyProg {
    
        private static void createAndShowGUI() {
            new MyGui();
        }
    
       public static void main(String[] args) {
            //Schedule a job for the event dispatch thread:
            //creating and showing this application's GUI.
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }
    
    0 讨论(0)
  • 2020-12-06 15:46

    In it's current form of your code, you can call the main method of your Calculas class in Test class or move the code to the Test class.

    Warning: Extending JFrame is not a good Idea.

    First alternative: You don't need to extend JFrame in Test

      public class Test{
        public static void main(String args[])
        {
            Calculas.main(new String[0]);
        }
       }
    

    You haven't mentioned in your question how you want to be able to chose close or open, in console or in another JFrame or something...

    Second Alternative:

    But If I were you I could do something like this: wrap the code for look and feel in a separate method and call this from Test' s main.

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    /**
     *
     * @author user
     */
    public class Calculas extends javax.swing.JFrame {
    
        /**
         * Creates new form Calculas
         */
        public Calculas() {
            initComponents();
        }
    
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
    
            a1Text = new javax.swing.JTextField();
            a2Text = new javax.swing.JTextField();
            jLabel1 = new javax.swing.JLabel();
            jButton1 = new javax.swing.JButton();
            answer = new javax.swing.JLabel();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    
            jButton1.setText("jButton1");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addContainerGap()
                            .addComponent(a1Text, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(a2Text, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(87, 87, 87)
                            .addComponent(answer, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(layout.createSequentialGroup()
                            .addGap(113, 113, 113)
                            .addComponent(jLabel1))
                        .addGroup(layout.createSequentialGroup()
                            .addContainerGap()
                            .addComponent(jButton1)))
                    .addContainerGap(86, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(19, 19, 19)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(a1Text, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(a2Text, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addComponent(answer, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(60, 60, 60)
                    .addComponent(jLabel1)
                    .addGap(34, 34, 34)
                    .addComponent(jButton1)
                    .addContainerGap(140, Short.MAX_VALUE))
            );
    
            pack();
        }// </editor-fold>                        
    
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    int a;
    a = Integer.parseInt(a1Text.getText()) + Integer.parseInt(a2Text.getText());
    answer.setText("Answer" + a);
    
            // TODO add your handling code here:
        }                                        
        public static setNimbusFeel(){
              /* 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(Calculas.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(Calculas.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(Calculas.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(Calculas.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
    
        }
        // Variables declaration - do not modify                     
        private javax.swing.JTextField a1Text;
        private javax.swing.JTextField a2Text;
        private javax.swing.JLabel answer;
        private javax.swing.JButton jButton1;
        private javax.swing.JLabel jLabel1;
        // End of variables declaration                   
    }
    

    And test class like this:

      public class Test{
        public static void main(String args[])
        {
            Calculas cal=new Calculas();
            //</editor-fold>
            Calculas.setNimbusFeel();
           /* Create and display the form */
           java.awt.EventQueue.invokeLater(new Runnable() {
              public void run() {
                new Calculas().setVisible(true);
              }
           });
          }
         }
    

    Like this:

    0 讨论(0)
  • 2020-12-06 15:49

    The constructor of Calculas doesn't show (setVisible) the frame.

    If you want to interact with the Calculas class in this manner, you should also be calling CAL.setVisible(true)

    Also, by convention, all Java instance variables, should start with a lower case character and use camelCase conventions

    0 讨论(0)
提交回复
热议问题