Swin Gui Netbeans IDE 7.2 entwickeln

Alles was mit Swing und AWT zu tun hat

Moderatoren: wegus, Olek77

Antworten
birtprofi
Beiträge: 21
Registriert: 29.08.2012, 08:15

Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von birtprofi » 18.10.2012, 12:11

Hallo zusammen,

ich habe mich jetzt etwas in die Netbeans IDE eingearbeitet. Bin aber noch am Anfang. Deshalb bitte ich um eure Kommentare wie Ihr vorgehen würdet.
Folgendes hätte ich mir Überlegt:

1. Ich erstelle ein java File und platziere dort ein JDesktopPane Element. (start.java)
2. Dann füge ich mein grundsätzliches Menü ein - JMenuBar. (siehe Anhang #1)
3. Wenn man dann z.B. auf "Kunden" klickt, dann sollte bei meinen Hauptfenster unterhalb des Menüs (start.java), z.B. die Datei kunde.java geladen werden. (siehe Anhang #2)

Meine Fragen:
1. Würde die Vorgehensweise so in etwa passen?
2. Bitte um Beantwortung des Punktes 3. Wie kann ich dies bewerkstelligen? Was muss ich im Menüpunkt "Kunden" hinterlegen, dass die kunde.java geladen wird? Wie kann ich die kunde.java in meine Datei start.java integrieren?

Bitte um Hilfe. :?:
danke.
lg
Dateianhänge
2.PNG
2.PNG (17.08 KiB) 17383 mal betrachtet
1.PNG
1.PNG (3.7 KiB) 17383 mal betrachtet

Benutzeravatar
Olek77
Beiträge: 669
Registriert: 21.03.2009, 13:09

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von Olek77 » 18.10.2012, 12:59

Hi,

Also deine Frage lässt sich nicht "so einfach" beantworten.

Es kommt darauf an wie viel Ahnung du schon von Java hast und wieviel Zeit du investieren kannst.

Grundlegend lässt sich sagen, dass du
erst mal versuchen solltest ein Modell zu entwickel für deine Kundendaten ( z.B. gleich von TableModel/AbstractTableModel implementierend/erbend ).
Siehe dazu die Java API Doc @javax.swing.table.*

Als nächstes bietet sich ein ein sogenanntes ValueObject ( VO ) für einen Kundensatz anzulegen.
Das ist eine Klasse, die als Container für einen Kunden dient. Also alle Parameter die ein Kunde ausmacht speichert.
Die könntest du ClientVO.java nennen.
Dies wiederum solltest du "gegen" ein Interface - sagen wir ClientIF.java - programmieren.
In diesem bestimmst du alle "getter"-methoden, die du später "herumreichen" möchtest.
Also du abstrahierst von der "echten" Klasse ClientVO.java, die das Interface ClientIF implementiert.

Wenn nun ein Datensatz geladen werden soll erzeugst du nun eine neue Instanz von ClientIF ( auf "geschickte" Art und Weise ).
Je nachdem wo du deine Rohedaten für den Kunden her hast ( Datenbank, File auf der Platte, entfernter Rechner, ... ).

z.B.
ClientIF

Code: Alles auswählen

public interface ClientIF {

   String getLastName();

   String getFirstName();

   String getStreet();

   String getZip();

   //...
}
ClientVO

Code: Alles auswählen

public class ClientVO implements ClientIF{
    
    private String lastName, firstName, street, zip, ...;
    
    private ClientVO( final String lastName, final String firstName, final String street, final String zip /**,...*/ ) {
        this.lastName = lastName;
        // ...
        this.zip = zip;
        
    }
   

    public static ClientVO getClientInstance( final String firstName, final String street final String zip, /**,...*/ ) {
         // Hier erst noch Wertebereichprüfung, habe ich jetzt weggelassen
         return new ClientVO( lastName, firstName, street, zip );
     
    }
    

    public String getLastName() {
        return lastName;
    }

}
Wie du siehst setze ich alle Parameter final. Dies ist im Moment noch nicht so wichtig,
sollte man sich aber angewöhnen um jede Klasse so weit es geht immutable zu machen.
Mehr dazu findest du bei google und der Fachliteratur.
Dazu verwende ich keinen öffentlich Konstruktor, sonder eine statische Zugriffsmethode

Code: Alles auswählen

public static ClientVO getClientInstance( ... );
Dies wird in der Fachliteratur häufig vorgeschlagen. Näheres wie gesagt findest du in guter Fachliteratur ( allen Voran Michael Indens Buch "Der Weg zum Java-Profi" ).

Jetzt musst du noch mit diesem clientVO-Object deine Tabelle füllen.
Dies machst du indem du deine Klasse, die ein Tabellenmodell implementiert/davon erbt
dieses clientVO-Object übergibst ...

Ich umreiße es hier mal:

Code: Alles auswählen

// ... hier bist du irgendwo in deiner main-Klasse.
// ich gehe mal davon aus, dass du deine Rohedaten aus ner DB hast
// was dbResultSet auch immer sein mag ...
String lastName = dbResultSet.getLastName();
String firstName = dbResultSet.getFirstName();
// ...


// hier legst du eine neue Instanz von ClientIF an
ClientIF newClient = ClientVO.getInstance( lastName, firstName, street, zip /**,...*/ );


// diese Methode ist in deiner Tabellenmodellklasse
public void addClient( final ClientIF newClient ) {
    tableModel.addRow( new Object[]{ newClient.getLastName(), newClient.getFirstName(), newClient.getStreet(), newClient.getZip() /**,...*/ } );
}
So in etwa könnte es gehen.
Dieser Ansatz ist nicht der einfachste aber ein objektorientierter und Muster-Orientiert.

Es geht auch viel einfacher aber man sollte sich gleich einen guten Stil angewöhnen um sich später Arbeit zu sparan.

Viele Grüße,

Tim
- Netbeans Certified Associate -

birtprofi
Beiträge: 21
Registriert: 29.08.2012, 08:15

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von birtprofi » 18.10.2012, 14:59

Hallo Tim,

danke erstmals für dein ausführliches Feedback. Fachliteratur habe ich schon zuhause. Da bin ich dabei dies durchzuackern.
Werde mal übers Wochenende schauen wie weit ich komme, bzw. inwieweit ich deine Tipps umsetzen kann und melde mich dann wieder.

lg

Benutzeravatar
smurfi
Site Admin
Beiträge: 1639
Registriert: 29.06.2006, 11:33
Wohnort: Wuppertal
Kontaktdaten:

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von smurfi » 18.10.2012, 16:20

Hallo,

und falls es eine größerer Anwendung werden soll vergesse nicht dir eine NetBeans RCP Anwendung anzusehen.
Das kann einem eine menge Arbeit ersparen, bedeutet aber auch mehr zu lernen.

Gruß
Michael

birtprofi
Beiträge: 21
Registriert: 29.08.2012, 08:15

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von birtprofi » 18.10.2012, 16:30

wird fürs erste eine kleinere Anwendung werden. Also Kunden + Produktverwaltung. Sowie die Möglichkeit pro Kunde noch Vorgänge (=Beratungen) zu hinterlegen.
lg

Death89
Beiträge: 21
Registriert: 20.12.2011, 12:25

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von Death89 » 21.10.2012, 18:00

Ich denke einfacher wäre es mit Cardlayouts zu arbeiten. Wenn du dann auf einen bestimmten Kunden klickst, werden aus einer Datenbank die Kundendaten geladen und die einzelnen Textfelder befüllt

birtprofi
Beiträge: 21
Registriert: 29.08.2012, 08:15

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von birtprofi » 21.10.2012, 19:09

konkret würde ich gerne folgendes jetzt testweise durchführen. Habe mir auf der Seite:
http://docs.oracle.com/javase/tutorial/ ... index.html
die Beispiele etwas zu näher angesehen

Meine Frage:
Wenn ich mein Menü ähnlich wie MenuLayoutDemo http://docs.oracle.com/javase/tutorialJ ... tDemo.jnlp
aufbaue, kann ich dann z.B. je gewähltem Menüpunkt auf der "rechten" Seite dies anzeigen lassen?

Also Konkret: Ich würde gerne, wenn ich das MenuLayoutDemo aufrufen, dann bei Menu1 -> Submenu item#1 folgendes auf der Seite rechts Anzeigen lassen:
http://docs.oracle.com/javase/tutorialJ ... eDemo.jnlp

Irgendwie habe ich dazu leider noch keine Anleitung gefunden, wie man das "richtig" umsetzt.
danke und sorry für meine vielleicht etwas komplizierte Ausdrucksweise.

lg

birtprofi
Beiträge: 21
Registriert: 29.08.2012, 08:15

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von birtprofi » 22.10.2012, 13:07

Ok, nochmals ein Update zu vorherigen Beitrag von mir.

Habe jetzt die GUI folgende aufgebaut:

1. Ein JFrame als mein mainframe File erstellt. In diesen habe ich dann den Container "Desktop Pane" gezogen und ein Menü erstellt
2. Dann habe ich jetzt testweise 2 Files mit JInternalFrame erstellt. Diese Rufe ich von meiner mainframe wie folgt auf:

Code: Alles auswählen

    private void jMenuItem_kundenActionPerformed(java.awt.event.ActionEvent evt) {
        InternalFrame_Kunde fk = new InternalFrame_Kunde();
        desktop.add(fk);
        fk.setVisible(true);
        
    }
Frage: Ist diese Vorgehensweise für ein GUI in Ordnung, bitte um Info?
Weitere Fragen kommen, dann wenn dies geklärt ist. :D

lg


lg

Benutzeravatar
Olek77
Beiträge: 669
Registriert: 21.03.2009, 13:09

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von Olek77 » 22.10.2012, 14:02

Hallo,
Frage: Ist diese Vorgehensweise für ein GUI in Ordnung, bitte um Info?
Dazu wirst du kaum eine vernünftige Antwort bekommen.
Es gibt zig Varianten ein GUI zu bauen.
Was der Kunde möchte ist meistens das ausschlaggebende.
Bzw. was sich leicht umsetzen lässt und leicht warten/ergänzen lässt.

Viele Grüße,

Olek
- Netbeans Certified Associate -

birtprofi
Beiträge: 21
Registriert: 29.08.2012, 08:15

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von birtprofi » 22.10.2012, 15:40

Hallo,

danke für die Info erstmals. So habe jetzt mal ein Produkt-Daten Model entworfen und kann die Daten auch bearbeiten.
Hätte jetzt eine konkrete Frage zu beigefügter Datei. (#5)

Ich habe ein JPanel, darin eine JTable und wenn ich einen Datensatz markiere, dann werden mir die Details angezeigt. Das ist soweit ok.
Jetzt kann ich auch anstatt des Feldes Status (= integer und nur 0 oder 1) auch eine Checkbox setzen. Das funktioniert auch.

Meine Frage: Wie kann ich im JTable anstatt mir den Wert 0 oder 1 bei "STATUS" auch die Checkbox anzeigen lassen? Geht das, wie kann ich das lösen?

lg
Dateianhänge
5.PNG
5.PNG (21.58 KiB) 17238 mal betrachtet

birtprofi
Beiträge: 21
Registriert: 29.08.2012, 08:15

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von birtprofi » 22.10.2012, 17:47

habe ich selbst gelöst. Wenn man den Datentype von String auf boolean ändert, dann rendert JTable das automatisch in eine Checkbox.

Benutzeravatar
Olek77
Beiträge: 669
Registriert: 21.03.2009, 13:09

Re: Swin Gui Netbeans IDE 7.2 entwickeln

Beitrag von Olek77 » 23.10.2012, 13:50

Hi,

Swing bietet für die meisten nativen Datentypen ein spezielles "Rendering".
Strings sind linksbündig. Alle Zahlen rechtsbündig. Booleans werden als Checkbox dargestellt.
Man muss nur den "Wrapper" des nativen Datentyp verwenden, also Integer anstelle von int ( Integer.valueOf( int value ) ),
Double.valueOf ( .. ) usw.

Übrigens empfiehlt es sich eine Offline-Javadoc auf der Platte zu haben.
Das ist ein Standart-Tool um sich einen ersten Eindruck über unbekannte Klassen und vor
allem deren Methoden zu machen. Gerade auch bei GUI-Komponenten.
Diese haben nämlich oft einige "Komfort"-Methoden.

Viele Grüße,

Olek
- Netbeans Certified Associate -

Antworten