2013-06-10 3 views
2

Я пытаюсь сделать простую Jform и называть ее из другого класса. Я хочу использовать эту Jframe в клиентском приложении сервера, но я не знаю, как открыть класс JFrame из другого класса.Как вызвать JFrame из другого класса Java

Как пользователь должен выбрать

1- открыть JFrame.

2- Для выхода.

Так что я делаю неправильно?

Ниже приведены коды:

JFrame класс под названием Calculas.java

/* 
* 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: 
    }           

    /** 
    * @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(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); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new Calculas().setVisible(true); 
      } 
     }); 
    } 
    // 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     
} 

испытания класса под названием Test.java

public class Test extends JFrame { 
    public static void main(String args[]) 
    { 
    Calculas CAL = new Calculas(); 
    CAL.Calculus(); 
} 
} 
+0

Просто запустите класс calculas. Это уже основной метод. –

+0

@ZouZou Что делать, если OP хочет включить класс Calculas в другой класс и нуждается в ссылке на класс Calculas для других вещей, таких как настройка/получение свойств? Вызов Calculas.main напрямую не достигнет этого - просто скажите – MadProgrammer

+0

@MadProgrammer Хорошо, получилось =). @JonathanLopez Вы можете просто скопировать/вставить основной метод под строкой 'Calculas CAL = new Calculas();' и изменить строку 'new Calculas(). SetVisible (true);' to 'CAL.setVisible (true);' класса Calculas (чтобы иметь вид Nimbus). –

ответ

11

Прости меня, если это наивно, так как им не ничего Java-программиста ... Но разве это не потому, что вам нужно установить видимость?

Calculas CAL = new Calculas(); 
CAL.setVisible(true); 
+0

+1 Ударьте меня это – MadProgrammer

+0

Нет, потому что есть и другие ошибки. – 7stud

3

Конструктор Calculas не показывает (setVisible) кадра.

Если вы хотите, чтобы взаимодействовать с Calculas класса таким образом, вы также должны быть вызовом CAL.setVisible(true)

Кроме того, по соглашению, все переменные экземпляра Java, должны начинаться с прописной характер и использовать соглашения верблюжьего

+0

На самом деле он уже является основным в классе Calculas, который показывает кадр. –

+0

Но OP не вызывает Calculas.main, они напрямую строят класс. Вообще говоря, вы должны попробовать и построить классы с помощью основного метода, если только вы не пытаетесь проверить все приложение, которое не задано в вопросе;) – MadProgrammer

+0

Я полностью согласен с вами, но я думаю, что ОП является новичком, потому что он просто скопировать/вставить код и попытаться запустить его с новым классом, который содержит основной. –

2

В текущей форме вашего кода вы можете вызвать основной метод вашего класса Calculas в классе Test или переместить код в Test класс.

Предупреждение. Расширение JFrame не является хорошей идеей.

Первый вариант: Вам не нужно продлить JFrame в тесте

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

Вы не упомянули в своем вопросе, как вы хотите, чтобы быть в состоянии выбрать закрыть или открыть в консоли или в другом JFrame или что-то ...

Вторая альтернатива:

Но если бы я тебя, я мог бы сделать что-то вроде этого: обернуть код выглядеть и чувствовать себя в отдельный метод и называют это от Test.

/* 
* 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     
} 

И тестовый класс, как это:

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

Как это:

1

Вот пример базовой структуры можно использовать:

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

И в отдельных файлах:

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
Calculas CAL = new Calculas(); 
    CAL.Calculus(); 

может быть, CAL.Calculas(); я не знаю Java, но я понял, что, извините мой английский :)

Смежные вопросы