繁体   English   中英

需要有关GUI和Java Swing的帮助

[英]need assistance with GUIs and java swing

这是下面的程序,我试图弄清楚我的主要方法应该在哪里。 我已经看到了一些在程序结束时实施的示例,但主要与我的有所不同。

主要方法(待实施):

               public class JFrame
                   {
                  public static void main(String[] args)
                   {


                   JFrame frame = new JFrame(); 

                    frame.setTitle("Components File");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setVisible(true); 
                    }
                       }

我的程序

  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JTextField;

  public class Lab_10 extends JFrame
  {

  private final double EARTHQUAKE_RATE= 8.0;
  private final int FRAME_WIDTH= 300;
  private final int FRAME_HEIGHT= 200;

  private JLabel rLabel;
  private JTextField eField;
  private JButton button;
  private JLabel earthLabel;

  public Lab_10()
  {
  JLabel earthLabel = new JLabel("Most structures fall");

  makeTextField();
  makeButton();
  makePanel();
  setSize(FRAME_WIDTH, FRAME_HEIGHT);
   }

  private void makeTextField()
   {
    JLabel rLabel = new JLabel("Richter");

    final int FIELD_WIDTH = 10;
    eField = new JTextField(FIELD_WIDTH);
    eField.setText("" + EARTHQUAKE_RATE);
    }


    class AddLabelListener implements ActionListener
     {
     public void actionPerformed(ActionEvent event)
      {
     earthLabel.setText("Most structures fall");
        }
       }

      private void makeButton()
       {
      JButton button = new JButton("Enter");

       ActionListener listener = new AddLabelListener();
       button.addActionListener(listener);
        }

       private void makePanel()
        {
       JPanel panel = new JPanel();
       panel.add(rLabel);
       panel.add(eField);
       panel.add(button);
       panel.add(earthLabel);
       add(panel);
        }
         }

更新的代码(正在编译但正在运行,但存在逻辑错误,因为它实现了一个空框架[从我拥有的主要方法中推测出很多]):

  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JTextField;

  public class Lab_10 extends JFrame
  {

  private final double EARTHQUAKE_RATE= 8.0;
  private final int FRAME_WIDTH= 300;
  private final int FRAME_HEIGHT= 200;

  private JLabel rLabel;
  private JTextField eField;
  private JButton button;
  private JLabel earthLabel;

  public Lab_10()
  {
  JLabel earthLabel = new JLabel("Most structures fall");

  makeTextField();
  makeButton();
  makePanel();
  setSize(FRAME_WIDTH, FRAME_HEIGHT);
   }

   private void makeTextField()
    {
   JLabel rLabel = new JLabel("Richter");

    final int FIELD_WIDTH = 10;
     eField = new JTextField(FIELD_WIDTH);
     eField.setText("" + EARTHQUAKE_RATE);
     }


         class AddLabelListener implements ActionListener
          {
         public void actionPerformed(ActionEvent event)
           {
         earthLabel.setText("Most structures fall");
            }
           }

          private void makeButton()
          {
          JButton button = new JButton("Enter");

          ActionListener listener = new AddLabelListener();
           button.addActionListener(listener);
            }

          private void makePanel()
           {
           JPanel panel = new JPanel();
          panel.add(rLabel);
          panel.add(eField);
          panel.add(button);
          panel.add(earthLabel);
          add(panel);
           }
          public static void main(String[] args){
          javax.swing.SwingUtilities.invokeLater(new Runnable(){
           @Override
             public void run()
          { JFrame frame = new JFrame(); 

            frame.setTitle("Components File");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             frame.setVisible(true); 
             }



             });
             }
             }

您的“主”外观可能有所不同,因为您没有使用SwingUtilities.invokeLater(Runnable doRun)吗?

好吧,简单地说,您必须始终使用它。 因此,修改您的代码并使用此代码:

SwingUtilities.invokeLater(new Runnable(){
   @Override
   public void run(){
      // copy-paste your main() code
   }
});  

另外,为什么您的类命名为JFrame 不要使用Java类已经使用的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM