2009-05-05 102 views
3

那麼,我已經查看了整個互聯網,並且一直未能找到這個問題的答案,所以也許有人可以提供一些見解。在Swing中爲表單輸入創建一個Java GUI

我正在開發一個相對簡單的Java應用程序,它將替換當前用於系統訪問請求的Word文檔。它旨在允許輸入新的員工聘用信息 - 名稱,需要的訪問等等。

所以這是我的問題。試圖製作一個帶有所有文本字段的GUI,所有內容都令人吃驚。因爲每個小部件都有點不同,所以填寫表單時獲取輸入似乎需要爲每個小部件分別引用,以便我可以單獨調用它們。這意味着一個部分的每個面板都有6-10個不同的專用字段。 (我試圖將所有類似的小部件添加到列表中,並在循環中調用它們,但這似乎不起作用。)

似乎網絡窗體在某些方面會更適合此,但我不會沒有可用的基礎設施來做到這一點。有沒有人發現比這更類似的東西更好的解決方案?它只是看起來像一噸代碼。請參閱下面的一個想法(我提出了一些意見,而不是實際的代碼,因爲它太長了)。感謝您的期待!

private JComboBox my_dates; 
    private JTextField my_date1; 
    private JTextField my_date2; 
    private JTextField my_request_date; 
    private JTextField my_new_legal_name; 
    private JTextField my_new_pref_name; 
    private JTextField my_new_username; 
    private JTextField my_prev_legal_name; 
    private JTextField my_prev_pref_name; 
    private JTextField my_prev_username; 
    private JTextField my_emp_id; 
    private JTextField my_manager; 
    private JTextField my_auth_requestor; 
    private JTextField my_auth_phone; 

    public NameChangePanel(FormSection the_section) 
    { 
     super(); 
     initialize(); 
     buildPanel(the_section.getFields()); 
    } 

    private void initialize() 
    { 
     // Create all the widgets individuall 
    } 

    private void buildPanel(List the_fields) 
    { 
     // add a field label 
     // add a component 
     // repeat for all values 
    } 

    public List getFormValues() 
    { 
     // Call all of the private fields individually 
     return values; 
    } 
} 
+0

謝謝大家誰回答 - 我最終得到的純「醇搖擺效果還不錯,但也有很多很好的建議,我會嘗試爲未來的項目。非常感激。 – Feanor 2009-05-10 08:26:21

回答

5

Vanilla Swing是冗長的 - 沒有參數。基本上,對於這種事情,我最終依賴一些自制的util/factory方法,如createTextBox(),它被參數化爲通用用法,並將執行必要的3-8條語句。

我有時甚至會參數化佈局。我傾向於將所有的佈局減少到GridBagLayout(其他人做BorderLayout等;這只是個人喜好的問題),然後創建方法將控制在網格中的特定點。

如果你不打算以網絡爲基礎,我會堅持使用Swing。它可能是冗長的,但對於簡單的表單來說並不是那麼困難。

1

Netbeans有一個gui的建設者,大多數帳戶相當不錯。此屏幕演示展示了可能對您有用的數據綁定功能。

另一種選擇可能是推出自己的展示框架,這取決於你想要的複雜程度,並不那麼困難和有趣。只需使用反射來將字段拉出對象並將這些字段翻譯成小部件並再次返回。請務必使用佈局管理器爲您完成大部分繁重工作。

是的,總的來說,gui的東西並不是java的強項,但你應該覺得它夠好的。

1

如果您喜歡冒險,可以嘗試在groovy中使用griffon。 Griffon是一個GUI構建框架,通過自動執行重複部分,可以使gui輕鬆建立。有關更多詳細信息,請參閱http://griffon.codehaus.org/

如果你知道如何使用grails,griffon會感覺相似,因爲它使用類似的概念和隱喻來構建。

0

看看BetterBeansBinding。這是一個工具,可以很容易地在對象之間綁定各種JavaBean類似的屬性。您將設置一個保存請求的對象,並將該對象的屬性綁定到各種gui組件。當你完成後,只需返回綁定的對象,它應該填寫所有的字段。

請注意,我以前沒有真正使用過這個,但我已經看到了這個概念,並且在發佈之前做了類似的事情。

0

我將創建一個這樣的形式從一個XML文件,像

​​

,然後使用​​那麼我會生成一個POJO和使用這個定義了Swing 接口的Java代碼。

class MyFormPojo 
{ 
private String name; 
private String comment; 
(...) 
} 

class MyFormPane extends JPanel 
{ 
JTextField field4name; 
    JTextArea field4comment; 
(...) 
MyFormPane() 
    { 
    (...) 
    field4name= new JTextField(); 
    (.. create labels, etc...) 
    } 
} 
3

叫我瘋了,但我不喜歡gui建設者。我更喜歡手寫代碼帶來的額外控制。另外,當你自己編寫代碼時,它使調試變得更容易。重要的是按照邏輯順序佈置代碼並使用有方法的變量名稱。

您提到嘗試使用列表。但是,我不明白這會如何爲您節省很多時間(或者我曾暗示過,您在實施過程中節省的時間,在調試過程中會丟失)。我猜測,當你開始理智檢查你的JTextFields的輸入時,頭痛就開始了。我建議將JTextField繼承爲MoneyTextField,PhoneNumberTextField等,這可以用來設置ActionListener來阻止人們做愚蠢的事情。