2011-06-24 60 views
1

好吧,所以基本上我很難用Java Swing JButton來執行一些操作。我有一種感覺,我的問題是,對於熟練的程序員,我的「基本」問題如此光禿:按鈕點擊修改變量/其他swing對象

我想要做的是修改其他JComponent的內容,並可能修改按鈕單擊某些變量。看起來相對容易,但我想在「已經聲明」的變量(或已經創建的JComponents)上執行它

無論我在哪裏搜索,我總是會得到一些例子,其中一切都是從頭開始聲明的ActionPerformed函數JButton的,就像這裏:

http://zetcode.com/tutorials/javaswingtutorial/swingevents/ //上面可以看到,在「的actionPerformed」功能,他們定義新的變量,如:串/日期/區域/ StringBuffer的

這樣的解決方案不被滿足我的需求任何手段。我想修改/顯示之前由於用戶點擊使用屬於不同類別的功能而定義的變量。

好吧也許會更清楚,如果我會告訴你我想在示範源代碼做什麼:

class Number_String { 

    public String change_add_MOD (String sss){   
     String str_modified = sss + "_modified";   
     return str_modified; 
    } 
    public int change_plus1 (int z){   
     int z_modified = z + 1; 
     return z_modified; 
    } 
    public static void main(String[] args) { 
     // TODO code application logic here 
    } 
} 

public class probTESTswing extends javax.swing.JFrame { 

    public probTESTswing() { 
     initComponents(); 
    } 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     jLabel1.setText("done");   
     jLabel2.setText(mystring2);   
     jLabel3.setText(ns.change_add_MOD(mystring3)); 
    } 

    public static void main(String args[]) {   

     Number_String ns=null; 
     String first_str="myFIRSTstring";   
     String mystring2 = ns.change_add_MOD(first_str); 
     String mystring3 = "third_str"; 

     probTESTswing testing= new probTESTswing(); 
     testing.setVisible(true); 
    } 
} 

問候大家誰作出努力,讓這裏;)

So lem簡單地解釋:

主類是「swing gui」,其中main()函數使用第二類初始化一些變量,現在我想要顯示使用我的Number_String類「處理」這些變量的結果,但是Java拒絕配合我的編程技巧你可能注意到了一些基本知識。

你可以觀察到我想用兩種方式做「它」:其中jButton1ActionPerformed裏面我想從我的Number_String類(使用'mystring3')訪問函數,另一種方式我想以訪問剛纔定義的變量(mystring2)

任何幫助極大APARECIATED。

  • 我應該「重載」jButton1ActionPerformed函數(爲了將變量作爲參數)? (是的,我知道它的私人 - >我用Netbeans Swing設計器創建它) - 我應該手動設計我的GUI,然後超載它們? (不知道這樣的過載是否可能)

  • 或者我應該爲我想用我的Jbutton修改的變量定義一些「緩衝區」(整數和字段爲字符串的字段),然後將它們放在「probTESTswing 「班? (+編寫相應的函數來處理,我使用它的功能,這樣的方式對其他類?)

  • 或可能(因爲我NUMBER_STRING不具有任何變量 - 只是功能)移動到GUI類的功能(probTESTswing)

  • 或者我應該使用一些指針/引用?(是啊,這似乎是我需要在這裏,不幸的指針/引用是我什麼都不知道的:(但是,我想學習它很多,因爲它似乎是強制性的,因爲我現在發現 - 很難找到教程你,因爲據我所知沒有指針,我不知道如何使用引用以這種方式,使所需的功能將實現 - 正如你可以看到我的問題)

  • 或者也許有完全不同的方式來處理正是這樣的問題/個案?

請微啓我,我想「有效地」解決我的問題,在一個良好的編程方式,爲了學習高效,優化,合理,快速解決方案,如何永遠不會絕望的幫助,所以任何建議非常感謝。

問候

+1

我很抱歉,但只是太多的文字,它的書面太差,我真正花時間和破譯這一切。我認爲本教程將幫助您 - http://download.oracle.com/javase/tutorial/uiswing/index.html – mre

回答

2

的一種方法是對數據模型從使用Model–View–Controller圖案的視圖分開,討論here

附錄:更簡單地說,你可能只是需要給ProbTestSwing類合適的成員變量:

private Number_String ns = new Number_String(); 
+0

注意'ProbTestSwing'中的大小寫更改;類名通常使用首字母大寫字母。 – trashgod

+0

是的,這工作正常,謝謝,只是爲了照亮其他人:在Actonperformed我用this.ns =/* ...合適的代碼* /爲了進一步處理它 –

0

JButtons,像幾乎所有Swing組件,有一大堆東西叫做「的ActionListeners」。這些ActionListeners是實現一個接口的類... ActionListener!他們有一個名爲actionPerformed的方法。每次點擊按鈕,他都會告訴他的每個ActionListener調用他們的actionPerformed函數。所以,你給你的按鈕一個ActionListener,然後讓它的actionPerformed方法進行你想要的所有更改。

就好像你每次門鈴響起時,你(如JButton)都會打電話給所有那些認爲沒有人會去拜訪你的絕望親戚。事實上,他們告訴你,每次你的門鈴響起,他們都會付錢給你。因此,門鈴響了(點擊按鈕),然後你(JButton)打電話給你的親戚(ActionListeners),然後每個人都付錢給你(actionPerformed方法)。

實例代碼:

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 


public class Test implements ActionListener{ 
    int count = 0; 
    public static void main(String[] args){ 
     JFrame frame = new JFrame(); 
     JButton button = new JButton(); 

     button.addActionListener(new Test()); 
     button.setText("I have been clicked 0 times"); 

     frame.setSize(200, 50); 
     frame.add(button); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    } 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     JButton button = (JButton) (arg0.getSource()); 
     count++; 
     button.setText("I have been clicked "+count+" times"); 
    } 


}