簡體   English   中英

JTextField顯示來自另一個類的字符串

[英]JTextField to display string from another class

我有一個小問題:例如,我的第一堂課打印出一個名為“ average”的字符串。 字符串平均值說“你好”。

例如:

package downloadpage;

public class DownLoadPage {

public void main(String[] args) throws IOException {
  string average;
  average = "hello";
  System.out.print(average);

我的第二個類app.java顯示一個文本字段。

package downloadpage;

public class app {

private JFrame frame;
JTextField textField1;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                app window = new app();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public app() {
    initialize();
}


/**
 * 
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    textField1 = new JTextField();

    frame.getContentPane().add(textField1, BorderLayout.NORTH);
    textField1.setColumns(10);
}
}

運行app.java以使textField1downloadpage.java顯示"string average"中的數據時,如何得到它?

任何幫助將不勝感激。

另外,當我運行app.java如何設置它首先運行downloadpage.java以獲得平均信息? 這樣,當app.java運行時app.java能夠擁有適當的數據,因為只有downloadpage.java運行時才生成數據?

問題:

  • 您在這里濫用繼承是因為第二類應用程序不應擴展下載頁面。 這里沒有“是”關系-GUI不是下載頁面的專用版本。
  • 您的downloadpage類不過是一種主要方法而已。 您的平均變量是main方法的局部變量,而不是class字段。使用此設置幾乎無濟於事。
  • 請注意,按照peeskillets的注釋,此類甚至都不應具有main方法。 實際上,此類不應具有靜態方法。
  • 而是將downloadpage(將其重命名為DownLoadPage)變成一個完整的類,其中包含非靜態字段和方法。
  • 更好地定義您的實際目標。 您是否想給您的非GUI類一個String,如果該String發生更改,它將更改GUI中的顯示? 如果是這樣,請考慮使用PropertyChangeSupport和PropertyChangeListeners使其成為“綁定”屬性。
  • 如果您是Java的新手,請考慮在學習GUI編碼之前先學習一些入門Java,因為在進行GUI編碼之前需要充分了解其基礎知識。 您不會后悔的。
  • 學習Java命名約定並使用它們,因為這將幫助其他人理解您的代碼:類名以大寫字母開頭,而方法和變量以小寫字母開頭。

編輯
例如:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.*;
import javax.swing.event.SwingPropertyChangeSupport;

@SuppressWarnings("serial")
public class GuiClass extends JPanel {
   private NonGuiClass nonGuiClass;
   private JTextField field = new JTextField(15);

   public GuiClass(NonGuiClass nonGuiClazz) {
      this.nonGuiClass = nonGuiClazz;
      add(field);
      nonGuiClass.addPropertyChangeListener(new PropertyChangeListener() {

         @Override
         public void propertyChange(PropertyChangeEvent pcEvt) {
            if (NonGuiClass.ADDRESS.equals(pcEvt.getPropertyName())) {
               field.setText(nonGuiClass.getAddress());
            }
         }
      });
   }

   private static void createAndShowGUI() {
      final NonGuiClass nonGuiClass = new NonGuiClass();
      GuiClass paintEg = new GuiClass(nonGuiClass);

      JFrame frame = new JFrame("GUI");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(paintEg);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);

      final String[] testStrings = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};

      int timerDelay = 1000;
      new Timer(timerDelay, new ActionListener() {
         private int index = 0;

         @Override
         public void actionPerformed(ActionEvent evt) {
            nonGuiClass.setAddress(testStrings[index]);
            index++;
            index %= testStrings.length;
         }
      }).start();
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGUI();
         }
      });
   }
}

class NonGuiClass {
   public static final String ADDRESS = "address";
   private SwingPropertyChangeSupport propChangeSupport = 
         new SwingPropertyChangeSupport(this);
   private String address = "";

   public String getAddress() {
      return address;
   }

   public void setAddress(String address) {
      String oldValue = this.address;
      String newValue = address;
      this.address = address;
      propChangeSupport.firePropertyChange(ADDRESS, oldValue, newValue);
   }

   public void addPropertyChangeListener(PropertyChangeListener listener) {
      propChangeSupport.addPropertyChangeListener(listener);
   }

   public void removePropertyChangeListener(PropertyChangeListener listener) {
      propChangeSupport.removePropertyChangeListener(listener);
   }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM