2011-08-15 47 views
0

我即將在這裏分享有關java編程及其變量的有趣案例。Swing上的Java及其變量(有許多's')

我想首先要說的是,我們在這些情況:

  1. 我們有很多的JLabel命名約定* jll_txtNormalCnn *)。
  2. 'nn'字面意思是座標(x,y)。準確地說是 ,它是(0-9)的一個數字。
  3. many Variables used here的屏幕截圖。

在截圖中;我們可能會看到有5 x 3桌子。 並且每列包含放置在其上的每個JLabel。所以這是模仿作爲董事會與文本。

我非常簡單的問題不是關於接口,而是;它是關於編程風格的。 如果...變量是sooOOO很多。假設有100個變量使用這種命名約定。一旦我們想要設置文本()到每個變量,我們想要簡化編碼 - 而不是一個一個地輸入....我們想用循環到達每一個變量....但是,我意識到這是不可能的。

下面的代碼根本不起作用;

for (int x=00; x<101; x++){ 
(jll_txtNormalC+x).setText("Something"); 
} 

有沒有辦法解決這個問題? 我不確定這是否是動態變量的主題,因爲我從來沒有在Java中聽說過它,除了'泛型',是的,我聽說過。

+0

有些相關的問題上:http://stackoverflow.com/questions/3113040/use-a-variable-within-a-variable-java – Thilo

+0

好嗎,這看起來很直向前...但是,如何使用上面提到的JLabel案例來爲接口定位?由於JLabel在主板上的定位(截圖 - 以前),讓我發佈這個問題.... @Thilo。 – gumuruh

回答

1

1)如果您的要求(S)嚴格的二次和有JLabelsJTextFields(其搖擺嵌套/繼承方法及其衍生物包括pictures),

2)如果你需要週期性的變化爲Component's內容

3)如果你想一排尿內存泄漏或GPU服務表現或凍結

4)如果你想簡單易得/組數據或更改

然後把那個給JTable,通過defalut包含在細胞JLabel,通過defalut包含JTextField上CellEdit(鼠標或鍵盤輸入)

1),那麼你可以很到忘了命名,possitionig和其他動物園,從MVC和JTable三個方面都將依然保持一致

2),您可以訪問數據僅來自visibl E /過濾/分類/除去/渲染TableView

3)可以從TableModel

4)加加入/從的Java6

5卡梅斯所有JTable's特徵訪問所有數據)節省大量的時間LayoutManager,possitioning屏幕,Listeners,獲得了混凝土Component

+0

再次感謝你,@mKorbel。 :d – gumuruh

6

我不認爲這是一個泛型的問題。它也不是關於動態變量的。這聽起來像是你有問題,因爲你已經在變量名稱的網格中嵌入了關於標籤位置的信息。在我看來,這是一個非常糟糕的主意。

也許一個更好的主意是將該信息封裝在另一個對象內並讓它維護標籤網格。這比你在匈牙利符號上的變化要好得多。

+0

Ya @Duffymo,我最近意識到,這就是您提到的放置Interface&The Variable問題的方式。嗯....我想知道....將inf封裝到另一個對象是相當「okey」我想...並且... DId我提​​到關於「匈牙利標記」? :D – gumuruh

0

將jlabels存儲在數組中(5x3或10x10)。

4

簡而言之:不要爲此分別使用命名變量。使用某種類型的集合,無論它是一個數組(可能是JLabel[][]),一張地圖或任何合適的東西。

0

您需要使用某種UI容器組件(類似於網格)或者可能只是一個數組。

0

OTOH的想法:創建一個ArrayList或一個數組並用Jlabels填充它。遍歷集合併爲每個集合調用setText。

1

通常,在使用網格或矩陣處理時,使用2d數組。

將您的JLabel存儲在2d數組中。您可以遍歷它們或使用易於閱讀的[x][y]表示法在(x,y)網格座標處訪問標籤。

JLabel[][] labelArray = new JLabel[numRows][numCols]; 
for(int i = 0 ; i < labelArray.length; i++) { 
    for(int j = 0; j < labelArray[i].length; j++) { 
     labelArray[i][j].setText("Something");   
    } 
} 
+0

ya當然強調了@Thilo早期的答案,但案例是面板使用絕對式,並且許多JLabel都放在它上面......這就是爲什麼看起來我應該「直接觸摸」JLabel。 ..仍然困惑。 – gumuruh

0

該探測器的答案是幾次提到的2D數組。

但是,如果你的標籤必須保持單一變量,你也可以用反射解決這個問題:

for (int x=00; x<101; x++){ 
    Field f = getClass().getDeclaredField("jll_txtNormalC" + x); 
    JLabel l = (JLabel)f.get(this); 
    l.setText("Something"); 
} 
+0

你*可以*使用反射,但不是沒有一個很好的理由...... :-) – KarlP

+0

waw ....我從來沒有碰過這個「領域」的東西之前....看起來很棒。我應該先嚐試...... D – gumuruh