2014-01-07 37 views
-1

我有一個小問題:我的第一個類,例如打印出一個名爲「平均」的字符串。字符串平均值表示「你好」。JTextField從另一個類顯示字符串

例如:

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.javatextField1downloadpage.java顯示來自"string average"數據?

任何幫助將不勝感激。

另外,當我運行app.java時,我該如何設置它首先運行downloadpage.java以獲取平均信息?這樣當app.java運行時它能夠擁有正確的數據,因爲數據只會在downloadpage.java運行一次時生成?

+0

澄清你的** **實際需求。 –

+0

請再澄清一下 - 它在幹什麼?請顯示真實的代碼。同樣,你不希望DownLoadPage有一個主要的方法。 –

+0

最好每個線程提出一個問題。我建議你將最後一段移到自己的(問題)線程。 –

回答

3

問題:

  • 你在第二類濫用這裏繼承,應用不應延長下載頁面。這裏沒有「是 - 」關係 - GUI不是downloadpage的專用版本。
  • 你的下載頁面只是一個主要的方法,沒有別的。你的平均變量是主要方法的本地變量,而不是類別字段你可以用這個設置做很少的事情。
  • 請注意,根據peeskillets評論,這個類甚至不應該有一個主要的方法。實際上這個類應該沒有靜態方法。
  • 取而代之將下載頁面(將其重命名爲DownLoadPage)轉換爲完整的類,其中一個具有非靜態字段和方法。
  • 定義你的實際目標好一點。你想給你的非GUI類提供一個字符串,如果改變時,改變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); 
    } 

} 
+1

我甚至不知道從哪裏開始。我會留給你的。不要忘記提及兩個'main's :) –

+0

@peeskillet:謝謝。正式指出。 –

+0

OP也可以在'app'類中實例化'downloadPage',而不是擴展。Ang有一個'getter()' –

相關問題