如何从主类加载Java GUI类?

我是java UI编程的新手。

我如何从java中的主类调用UI类

public static void main(String[] args) { // TODO code application logic here FileExtractorGUI gui = new FileExtractorGUI(); gui.setVisible(true); } 

基本上

 FileExtractorGUI is a gui class. 

运行程序时如何加载GUI。 目前我运行代码时没有任何反应。

GUI CLass

 package fileextractor; import javax.swing.JOptionPane; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author */ public class FileExtractorGUI extends javax.swing.JPanel { /** * Creates new form FileExtractorGUI */ public FileExtractorGUI() { 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") //  private void initComponents() { SourceField = new javax.swing.JTextField(); jLabel1 = new javax.swing.JLabel(); DestinationField = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); Extract = new javax.swing.JButton(); SourceField.setText("SourceField"); SourceField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { SourceFieldActionPerformed(evt); } }); jLabel1.setText("SourceFolder"); DestinationField.setText("DestinationField"); jLabel2.setText("DestinationFolder"); Extract.setText("Extract"); Extract.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { ExtractActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addGap(38, 38, 38) .addComponent(SourceField, javax.swing.GroupLayout.PREFERRED_SIZE, 208, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 24, Short.MAX_VALUE) .addComponent(DestinationField, javax.swing.GroupLayout.PREFERRED_SIZE, 208, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(74, 74, 74)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(Extract) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(26, 26, 26) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(SourceField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(DestinationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 194, Short.MAX_VALUE) .addComponent(Extract) .addContainerGap()) ); }//  private void SourceFieldActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void ExtractActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String src = SourceField.getText(); String dest = DestinationField.getText(); CopyDirectoryExample copy = new CopyDirectoryExample(); copy.extract(src, dest); JOptionPane.showMessageDialog(null, "Extracted!"); } // Variables declaration - do not modify private javax.swing.JTextField DestinationField; private javax.swing.JButton Extract; private javax.swing.JTextField SourceField; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; // End of variables declaration } 

根据评论中的请求,我已经上传了GUI类代码

 public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { FileExtractorGUI gui = new FileExtractorGUI(); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(gui); frame.pack(); frame.setVisible(true); } }); } 

您无法显示FileExtractorGUI因为它扩展了JPanel 。 每个组件必须是JFrameWindow的子组件。

改变线

 public class FileExtractorGUI extends javax.swing.JPanel 

 public class FileExtractorGUI extends JFrame 

首先是JFrame,然后用你的面板填充它。

来自doc

 //1. Create the frame. JFrame frame = new JFrame("YouFrame"); //2. Optional: What happens when the frame closes? frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //3. Create your panel and put it in the frame. frame.getContentPane().add(new FileExtractorGUI(), BorderLayout.CENTER); //4. Size the frame. frame.pack(); //5. Show it. frame.setVisible(true); 

尝试创建一个JFrame并添加Panel

  FileExtractorGUI gui = new FileExtractorGUI(); JFrame jf=new JFrame(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setSize(500, 500); jf.add(gui); jf.setVisible(true);