2013-09-11 37 views
-1

好吧,我有一個我正在爲課程做的程序。我必須將輸入形式放​​入文本字​​段中,然後將其投入重載構造函數,該構造函數將字符串作爲參數。還有一些與構造函數有關的其他事情,所以在我的代碼中,您會看到一些超出此問題的內容。此外,我不會發布我的方法,因爲它是作業的重要組成部分,並且這些工作都很好,(在我嘗試將信息傳遞給構造函數之前)。我想知道的是,我有一種方法可以將文本字段信息傳遞到構造函數中,因爲我現在已經在這裏工作了幾個小時,但顯然我不明白這一點。如果你只是想引導我到某個地方,我可以學習如何做到這一點,我將不勝感激。將文本字段值傳遞給構造函數

代碼:

package lab4; 

import java.awt.*; 
import java.awt.List; 
import javax.swing.*; 
import java.awt.event.*; 
import java.lang.Iterable.*; 
import java.util.*; 

public class Lab4 extends JFrame{ 

private JTextField jTextField1; 
private JButton doSome; 
private JLabel ansTxt; 
private JLabel asciSum; 
private JLabel jLabel1; 
private JLabel jLabel3; 
private JLabel jLabel4; 
private JLabel jLabel5; 
private JLabel jLabel6; 
private JLabel lowCnt; 
private JLabel numDigit; 
private JLabel upCnt; 
private JLabel vowelCnt; 
private String userInput = jTextField1.getText(); 

public Lab4() 
{   
    initComponents(); 
} 
public Lab4(String x) 
{ 
    this.userInput = x; 
} 
public Lab4(char[] x) 
{ 

} 
public Lab4(byte[] x) 
{ 

} 

private void initComponents() { 

    jTextField1 = new JTextField(); 
    jLabel1 = new JLabel(); 
    doSome = new JButton(); 
    ansTxt = new JLabel(); 
    jLabel3 = new JLabel(); 
    jLabel4 = new JLabel(); 
    jLabel5 = new JLabel(); 
    jLabel6 = new JLabel(); 
    asciSum = new JLabel(); 
    vowelCnt = new JLabel(); 
    numDigit = new JLabel(); 
    upCnt = new JLabel(); 
    lowCnt = new JLabel(); 

    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    setAutoRequestFocus(false); 
    setFont(new java.awt.Font("Comic Sans MS", 1, 12)); // NOI18N 

    jLabel1.setText("Enter a string Here and I'll show you some info about it!"); 

    doSome.setToolTipText("This Will Do Something"); 
    doSome.setInheritsPopupMenu(true); 
    doSome.setLabel("Click Me When Your Done!"); 
    doSome.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      doSomeActionPerformed(evt); 
     } 
    }); 

    ansTxt.setText("ASCII SUM:"); 

    jLabel3.setText("Number of Vowels:"); 

    jLabel4.setText("Number of Digits:"); 

    jLabel5.setText("Number Of Uppercase:"); 

    jLabel6.setText("Number Of Lowercase:"); 

    GroupLayout layout = new GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
        .addContainerGap() 
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false) 
         .addComponent(ansTxt) 
         .addComponent(jLabel5, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addComponent(jLabel4, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addComponent(jLabel3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addComponent(jLabel6, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
        .addGap(84, 84, 84) 
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) 
         .addComponent(lowCnt) 
         .addComponent(vowelCnt) 
         .addComponent(asciSum) 
         .addComponent(numDigit) 
         .addComponent(upCnt))) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(95, 95, 95) 
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false) 
         .addComponent(jTextField1) 
         .addComponent(jLabel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addComponent(doSome, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) 
      .addContainerGap(239, Short.MAX_VALUE)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGap(34, 34, 34) 
      .addComponent(jLabel1) 
      .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jTextField1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
      .addGap(18, 18, 18) 
      .addComponent(doSome) 
      .addGap(34, 34, 34) 
      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
       .addComponent(ansTxt) 
       .addComponent(asciSum)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
       .addComponent(jLabel3) 
       .addComponent(vowelCnt)) 
      .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) 
      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
       .addComponent(jLabel4) 
       .addComponent(numDigit)) 
      .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) 
      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
       .addComponent(jLabel5) 
       .addComponent(upCnt)) 
      .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) 
      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
       .addComponent(jLabel6) 
       .addComponent(lowCnt)) 
      .addContainerGap(157, Short.MAX_VALUE)) 
    ); 

    pack(); 
} 

private void doSomeActionPerformed(ActionEvent evt) 
{ 
    String takeTfIn = this.jTextField1.getText(); 
    this.asciSum.setText(getAsciiSum(takeTfIn)); 
    this.vowelCnt.setText(getNumVowels(takeTfIn)); 
    this.numDigit.setText(getNumDigits(takeTfIn)); 
    this.upCnt.setText(getNumUpperCase(takeTfIn)); 
    this.lowCnt.setText(getNumLowerCase(takeTfIn)); 
} 

// Excluded methods go here... 


public static void main(String[] args) 
{ 
    Lab4 test = new Lab4(); 
    test.setVisible(true); 
} 
} 
+0

我不太明白的問題;你想要將文本字段的內容傳遞到創建並顯示文本字段的類中,從中可以獲得要創建和顯示文本字段的文本字段...以及。 –

+0

不完全確定問題是什麼......如果您想要使用聲明爲「public Lab4(String x)'的構造函數,則使用新的Lab4(」text「)或」new Lab4(some-other-string表達)'會做到這一點。你可能還想確保_all_你的構造函數調用'initComponents()',否則它不會自動發生。 – ajb

+0

我必須將用戶輸入形式傳遞給具有字符串的構造函數,然後可以將其用於輸入所有我的方法。我們必須這樣做,因爲我假設在某個時刻,教師會讓我們使用其他構造函數來傳入非字符串數據,然後將其轉換爲字符串,通過字符串構造函數傳遞,然後轉移到方法上, (它簡單地加上ascii字符,掃描元音,大寫和小寫字母,等等。) –

回答

0

你需要創建lab4的新實例您填寫TEX字段的值,然後點擊提交後。上的點擊提交,你可以像這樣

this.setVisible(false);//Hide current instance 
    Lab4 test = new Lab4(this.jTextField1.getText()); // create new instance 
    test.setVisible(true); // set new instance visible 

不要忘了添加下面的構造:

public Lab4 (String value) 
    { 
    this.jTextField1.setText(value); // if you like to set value back to textbox 
    } 
+0

好吧,但是如何將它傳遞給我的doSomeActionPerformed,以便我可以完成用戶輸入的工作?我試過Lab4 test = new Lab4(this.jTextField1.getText());然後將測試插入方法:this.asciSum.setText(getAsciiSum(test));,但我剛剛得到錯誤 –

+0

爲什麼您需要將值傳遞給doSomeActionPerformed?如果您的實例將值賦給了jTextField1,那麼您應該可以在doSomeActionPerformed方法中訪問它的值,因爲它是內部方法。您需要檢查actionPerformed方法與組件的綁定。看到這裏http://stackoverflow.com/a/8720793/1356109它可能會幫助。 – Eez

+0

每個方法都必須包含一個字符串,所以像這樣:private String getAsciiSum(String x)。我必須能夠將來自構造函數的用戶輸入傳遞給方法,這是我使用doSomeActionPerformed做的 –