【问题标题】:need assistance with GUIs and java swing需要 GUI 和 java swing 方面的帮助
【发布时间】:2013-12-20 11:10:01
【问题描述】:

这是我下面的程序,我试图找出我的主要方法应该在哪里。我已经看到了一些在程序的最后实现它的例子,但是 main 与我的不同。

主要方法(待实现):

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



             });
             }
             }

【问题讨论】:

  • 为什么要在中间保留 import 语句?带他们去TOP。并且您可以将 main 保留在 Java 类中的任何位置,它不会影响功能。但是,它通常保留为类中的第一个或最后一个方法
  • 一般来说,只要它在正确的范围内,它不会有太大的不同。就个人而言,我喜欢它在顶部,因为它更容易找到(恕我直言)。您可能还想看看Initial Threads,这可能解释了为什么您的main 方法与其他人不同...
  • @payeli 哦,不,在顶部我应该用一个文字隔开它,说我的程序而不是......我在我的程序中的主要方法不像我只是问我是否可以使用这个和如何。
  • @MadProgrammer SwingUtilities.invokeLater(new Runnable() { public void run() {JFrame frame = new JFrame(); frame.setTitle("组件文件"); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } 我的方法会是这样吗?

标签: java swing


【解决方案1】:

您的“主要”可能看起来不同,因为您没有使用 SwingUtilities.invokeLater(Runnable doRun) ?

嗯,简单地说,您必须始终使用它。所以,修改你的代码并使用它:

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

另外,为什么你的班级命名为 JFrame ?避免使用已经被 Java 类使用的名称。

【讨论】:

  • 像这样 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); }
  • @user3019552 编辑您的问题并在标题下发布更新:Update 1 但看起来您明白了 =)
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
相关资源
最近更新 更多