Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

13.07.2010, 21:05

So das hier ist die Variante des Programmes erstellt in Netbeans und Matisse. Das einzige, was ich gemacht habe, war die Komponenten zu platzieren, zu benennen und nach einem Doppelklick auf den Button den Zweizeiler zu schreiben...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package test;

public class MyWindow extends javax.swing.JFrame {

    /** Creates new form MyWindow */
    public MyWindow() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        btnBerechne = new javax.swing.JButton();
        tfName = new javax.swing.JTextField();
        tfAusgabe = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        btnBerechne.setText("Berechne");
        btnBerechne.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBerechneActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(tfName, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                    .addComponent(tfAusgabe, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                    .addComponent(btnBerechne, javax.swing.GroupLayout.Alignment.TRAILING))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(tfName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tfAusgabe, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnBerechne)
                .addGap(10, 10, 10))
        );

        pack();
    }// </editor-fold>

    private void btnBerechneActionPerformed(java.awt.event.ActionEvent evt) {
        String name=tfName.getText();
        tfAusgabe.setText(name);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MyWindow().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton btnBerechne;
    private javax.swing.JTextField tfAusgabe;
    private javax.swing.JTextField tfName;
    // End of variables declaration

}

Diese Variante benutzt das Default-FreeDesign vom Matisse Editor - daher die etwas schwer lesbaren layout-Konstrukte.

Jetzt mal eine Variante mit einem Gridlayout (per Rechtsklick auf den JFrame im Editor das Layout geändert).

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package test;

public class MyWindow extends javax.swing.JFrame {

    /** Creates new form MyWindow */
    public MyWindow() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        tfName = new javax.swing.JTextField();
        tfAusgabe = new javax.swing.JTextField();
        btnBerechne = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.GridLayout(3, 0, 0, 5));
        getContentPane().add(tfName);
        getContentPane().add(tfAusgabe);

        btnBerechne.setText("Berechne");
        btnBerechne.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBerechneActionPerformed(evt);
            }
        });
        getContentPane().add(btnBerechne);

        pack();
    }// </editor-fold>

    private void btnBerechneActionPerformed(java.awt.event.ActionEvent evt) {
        String name=tfName.getText();
        tfAusgabe.setText(name);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MyWindow().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton btnBerechne;
    private javax.swing.JTextField tfAusgabe;
    private javax.swing.JTextField tfName;
    // End of variables declaration

}

Was kann man da noch sauberer machen? Das ganze skaliert gut und auch bei wesentlich mehr Komponenten bleibt der Code so wie man ihn selbst schreiben müsste - minimaler geht es nicht...

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

12

13.07.2010, 21:07

naja wer kommentieren muss hat zu wenig aussagekräftige funktionen...sollte eigentlich selbsterklärend sein... (ausnahmen bestätigen die regel).

13

13.07.2010, 21:14

Das ist doch Schwachsinn (sorry, aber das hat jetzt echt nichts mehr mit Meinungsverschiedenheiten zu tun)... Gute Kommentare z.B. JavaDoc-Kommentare sind unstreitbar sinnvoll. Bei kleinen Projekten kommt man vielleicht auch ohne aus, aber wenn man dann mal für ein richtiges kommerzielles Projekt mit ein paar tausend Klassen programmieren muss, dann ist man für jedes Kommentar dankbar. Man muss es nicht übertreiben, aber wenn man ein richtiges historisch gewachsenes Projekt mit vielen Interdependenzen bearbeiten muss, dann ist ein Kommentar, das angibt wie die einzelnen Funktionen zusammenarbeiten und benutzt werden sollen, unerlässlich und höchst lästig, wenn es fehlt.

Was glauben Kommentar-Doof-Finder eigentlich warum Kommentare in jeder Programmiersprache möglich sind? Und warum sind Tools wie Doxygen oder JavaDoc so beliebt?

Btw in Netbeans und Eclipse kann man über /** das JavaDoc/Doxygen-Kommentar-Templates ausgeben lassen.

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »Chromanoid« (13.07.2010, 21:35)


David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

14

13.07.2010, 21:29

naja wer kommentieren muss hat zu wenig aussagekräftige funktionen...sollte eigentlich selbsterklärend sein... (ausnahmen bestätigen die regel).


Seh ich komplett anders! Und jedes Vorgehensmodell sowie praktische Erfahrung stimmt mir da zu.
@D13_Dreinig

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

15

14.07.2010, 12:54

naja wer kommentieren muss hat zu wenig aussagekräftige funktionen...sollte eigentlich selbsterklärend sein... (ausnahmen bestätigen die regel).


Seh ich komplett anders! Und jedes Vorgehensmodell sowie praktische Erfahrung stimmt mir da zu.
hab genau das gegenteilige sowohl erfahren als auch gelesen. wenn wir kommentare verwenden, dann um irgendwo auf was wahnsinnig dringendes aufmerksam zu machen, ansonsten sind kommentare eher störend. wenn ich mir guten code anchaue, braucht man keine kommentare, dann sind die öffentlichen schnittstellen selbsterklärend (sollten sie zumindest möglichst).

mit kommentare meine ich NICHT dokumentierende wie javadoc oder doxygen, die erzeugen eine externe dokumentation, das ist durchaus sinnvoll.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

16

14.07.2010, 13:59


hab genau das gegenteilige sowohl erfahren als auch gelesen. wenn wir kommentare verwenden, dann um irgendwo auf was wahnsinnig dringendes aufmerksam zu machen, ansonsten sind kommentare eher störend. wenn ich mir guten code anchaue, braucht man keine kommentare, dann sind die öffentlichen schnittstellen selbsterklärend (sollten sie zumindest möglichst).


Dann gib doch bitte die Quellen an. Erfahrungswerte zeigen nämlich das Kommentierung äußerst sinnvoll ist, gerade wenn man in Teams an gleichen Modulen arbeitet. Und das sind auch Erfahrungen die ich wärend meiner bisherigen Zeit als Softwareentwickler ständig gemacht habe!
@D13_Dreinig

17

14.07.2010, 14:15

@Errschaffer
Klappt das jetzt?
Du hast da einen import den du gar nicht benutzt --> import java.awt.Window;

wenn du den raus haust dann geht es zumindest bei mir... Welche Netbeans- und JDK-Version benutzt du eigentlich? bei mir hat nämlich der Compiler gleich gemeckert, dass java.awt.Window keinen Window() konstruktor hat. Beim nächsten Mal solltest du deine Namen besser wählen. Achja und wie schon oben erwähnt passieren genau solche Fehler noch häufiger, wenn man wildcards in den Importen benutzt...

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

18

14.07.2010, 17:05

@Errschaffer
Klappt das jetzt?
Du hast da einen import den du gar nicht benutzt --> import java.awt.Window;

wenn du den raus haust dann geht es zumindest bei mir... Welche Netbeans- und JDK-Version benutzt du eigentlich? bei mir hat nämlich der Compiler gleich gemeckert, dass java.awt.Window keinen Window() konstruktor hat. Beim nächsten Mal solltest du deine Namen besser wählen. Achja und wie schon oben erwähnt passieren genau solche Fehler noch häufiger, wenn man wildcards in den Importen benutzt...



Ja es funktioniert 0.o. Ich habs auch erst ohne includieren versucht und jetzt gehts. Also Sachen gibts ?(
Aber muss ich nicht erstmal eine Klasse includieren bevor ich sie benutzen kann oder geht das bei Java automatisch?
Oder wird das über die packages organisiert?

Ich nutze die aktuellste Version.

Und was ist jetzt der unterschied zu Swing. Ist das nicht Swing was ich da benutze ? Weil der Code von BLU3 L30PARD sieht anders aus bindet aber die selben Dateien ein.

19

14.07.2010, 17:52

Du benutzt Swing.

Das Problem war, dass du in Main.java eine AWT Klasse (Window) importiert hast, weil du sie mit deiner eigenen verwechselt hast.

Klassen im selben Paket/Namespace sind automatisch für einander sichtbar.

Der ganze Stress mit includes, den man in C++ haben kann, fällt eigentlich weg. Du kannst alles egal wann und wo einbinden...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chromanoid« (14.07.2010, 22:09)


TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

20

15.07.2010, 21:28


hab genau das gegenteilige sowohl erfahren als auch gelesen. wenn wir kommentare verwenden, dann um irgendwo auf was wahnsinnig dringendes aufmerksam zu machen, ansonsten sind kommentare eher störend. wenn ich mir guten code anchaue, braucht man keine kommentare, dann sind die öffentlichen schnittstellen selbsterklärend (sollten sie zumindest möglichst).


Dann gib doch bitte die Quellen an. Erfahrungswerte zeigen nämlich das Kommentierung äußerst sinnvoll ist, gerade wenn man in Teams an gleichen Modulen arbeitet. Und das sind auch Erfahrungen die ich wärend meiner bisherigen Zeit als Softwareentwickler ständig gemacht habe!

hier zum beispiel
ich persönlich empfinde seine argumentation sehr sauber und haben mir gezeigt, das kommentare in 99% aller fälle überflüssig sind.
ich gebe auch zu, dass meine erfahrungen bisher sich auf nur 1,5 jahre beschränken und das ich mit kommentaren ausgestatteten code nicht viel schlauer war als unkommentierten (bisher). aber ich will mich nicht hier mit dir streiten, ich fand diese vertretung einfach sinnvoll und nutze sie deswegen auch so ;)

Werbeanzeige