Heute noch C++ für Unternehmenssoftware
-
Artchi schrieb:
Vista! Nö, es lässt nur vermuten, das C++ so langsam C im Embeddedbereich eingeholt hat...
das lässt es nicht. lies doch nochmal genau, was er geschrieben hat...
-
Swing-Anwendungen haben z.B. kein Kontextmenü im JTextfield (Textfeld). Eine ganz einfache Sache unter Windows, weil das jedes EDIT-Control serienmäßig dabei hat. Immer wieder rufen User bei uns an, und fragen wie sie einen Text aus einem Textfeld kopieren können? Natürlich mit Ctrl+C! Aber das interessiert den normalen Anwender nicht, der es gewohnt ist die rechte Mousetaste zu drücken. Ich weiß nicht ob es unter Java 1.6 besser geworden ist. Unter Java 1.5 war das noch nicht eingebaut. Es gibt noch ein paar andere Sachen, wo einfach Inkonsistenten für den Normal-User auftauchen. Ich als Technikfan suche mir nen Ausweg und gewöhn mich schnell um. Aber die meisten User haben mit PCs nichts am Hut, es ist ein notwendiges Übel um die Arbeit zu erledigen.
Z.B. kann man das Kontextmenü des Edit-Felds erweitern. Mein Kontextmenü auf meinem Privat-PC hat neben Copy-Paste-Menüs noch ein paar andere Einträge. Die würde ich gerne in allen Textfeldern aller Anwendungen haben.
Mach das doch einfach! Ich habe auch in meinem Textfeld ein Contex-Menu eingebaut. Nichts einfnacher als das, einfach das MouseListener-Interface implementieren und zu dem Textfeld eintragen: textfeld.addMouseListener(new MyMouseListener());
Ich bezweifle das man in der WinAPI so ein Contex-Menu standardmäßig schon bei jedem Control dabei ist. Vielleicht irre ich mich, hab das letzte mal vor 10 Jahren mich mit der WinAPI beschäftigt.
Es geht um Look&Feel!!!
Richtig programmiert verhält sich ein Java-Programm nicht anders als ein WinAPI-Programm. Z.b. mein GlobalScalingRechner, VisualParadigm, ArgoUML oder Azereus. Unter Java kannst du sogar dein eigenes Look&Feel definieren. Ausserdem wie aha schon treffend gesagt hat, hat doch jedes Programm ein eigenes Look and Feel.
-
DEvent schrieb:
Das war bis jetzt die unquilifizierste Bemerkung im ganzen Thread.
An deiner Stelle würde ich den Ball mal flach halten
-
DEvent schrieb:
Mach das doch einfach! Ich habe auch in meinem Textfeld ein Contex-Menu eingebaut. Nichts einfnacher als das, einfach das MouseListener-Interface implementieren und zu dem Textfeld eintragen: textfeld.addMouseListener(new MyMouseListener());
Ne, das ist Dreck. Genauso wie der File Dialog niemals geil sein wird. Ich hab ein Subversion-Plugin im Explorer, der mir den Status der Dateien anzeigt, das wird in einem Swing-File Dialog auch nie zu sehen sein, in jedem normalen Dialog aber schon. Und die ganze Explorer-Funktionalität darin wie kopieren von Dateien und Ordnern ist auch mega-schlecht umgesetzt. Und da können sie noch so viel rumfrickeln, jedesmal wenn es ein neues Windows gibt, wo der Dialog wieder anders aussieht (wie jetzt in Vista) brauchen sie wieder 5 Jahre, damit es immer noch nicht geil ist. Völliger Mist, das selber zeichnen.
-
Richtig programmiert verhält sich ein Java-Programm nicht anders als ein WinAPI-Programm. Z.b. mein GlobalScalingRechner, VisualParadigm, ArgoUML oder Azereus. Unter Java kannst du sogar dein eigenes Look&Feel definieren. Ausserdem wie aha schon treffend gesagt hat, hat doch jedes Programm ein eigenes Look and Feel.
Ganz ehrlich, dein GlobalScalingRechner sieht, zumindestens auf den Screenshots, salop formuliert nicht sehr in das System integriert aus. Ich muss allerdings fairerweise auch gestehen, dass ich nicht bereit war 340,- Euro auszugeben, nur um deine achso beispielhafte Swing-basierte Desktopanwendung genauer zu evaluieren. Abgesehen davon ist Azureus, meiner Meinung nach das einzige Programm aus deiner Liste, von dem man behaupten kann, dass es sich gut ins System integriert, ebenfalls eine SWT Anwendung.
-
Wobei ich diese komischen Tabs auch sehr grenzwertig finde.
-
Vielleicht mach ich was falsch oder die Version, die wir in der Schule haben ist steinalt, aber wenn das halbwegs integriert aussieht fress ich nen Besen^^ Swing ist es garantiert.
Ich komm leider jetzt nicht an das eug, da ferien (
) sonst könnte ich nen screen liefern.
Was muss ich den machen, damit meine Swinganwendung sich integriert?
-
UIManager.setLookandFeel(UIManager.getSystemLookandFeel);
sowas in der art.
-
Thx werd ich nach den Ferien mal ausprobieren
-
Ach kommt schon, Swing ist schon eine nette Sache und hat v.a. auch ein schönes Programmiermodell, aber es ist jeder nativen GUI unterlegen wenn es um Dinge wie Integration,Geschwindigkeit usw.. geht. Natürlich wurde und wird das immer mehr verbessert, aber wer behauptet dass man mit Swing all das was native GUI-APIs bieten auch erreichen kann, dem kann man auch nicht mehr helfen.
Bestes Beispiel ist doch das von jemandem erwähnte ArgoUML. Das Ding ist relativ träge und wer hier behauptet dass das gut integriert sei, der hat echt einen am Dach...
Ist doch ausserdem auch gar nicht so schlimm dass Swing so ist. Für viele GUIs ist es ausreichend, aber für manche eben eher weniger, und für solche Fälle gibt es ja dann auch sowas wie SWT
-
Ist doch ausserdem auch gar nicht so schlimm dass Swing so ist.
Eben! Auch GTK-Programme sind nicht unter Windows optimal integriert. Genauso wie FLTK, FOX oder Qt. Hier hat auch niemand behauptet, das z.B. Swing schlecht zu programmieren ist. (habe ich ja auch gesagt, das ich es gerne als Progger benutze!) Es ist halt einfach nur Fakt. Zumal ich ja für Java eine Lanze bzgl. GUI gebrochen habe, in dem ich SWT als Alternative genannt habe. Aber die Herren Javaisten sind sich zu fein, Kritik an ihrer Lieblingssprache zu zuilassen. Jetzt kommt aber die Wahrheit raus. :p
-
Nachdem ich soviel geflame gelesen habe bin ich ganz dursting. Gibts hier irgendwo nen Getränkeautmat?
-
KarlHeinzRamsi schrieb:
Nachdem ich soviel geflame gelesen habe bin ich ganz dursting. Gibts hier irgendwo nen Getränkeautmat?
Ist der dan wenigstens mit c++ programmiert?
-
Artchi schrieb:
Zumal ich ja für Java eine Lanze bzgl. GUI gebrochen habe, in dem ich SWT als Alternative genannt habe. Aber die Herren Javaisten sind sich zu fein, Kritik an ihrer Lieblingssprache zu zuilassen.
es war diesmal auch ein recht schwacher versuch von dir, auf diffizile art den flamewar anzuheizen. das hast du schon mal besser hingekriegt...
-
Artchi schrieb:
Aber die Herren Javaisten sind sich zu fein, Kritik an ihrer Lieblingssprache zu zuilassen. Jetzt kommt aber die Wahrheit raus. :p
Mmmmmmmmhhhhhhhmmmmmm, jetzt darf neuerdings nicht mehr jeder seine eigene Meinung zu Swing haben, ok.
-
Nachdem ich soviel geflame gelesen habe bin ich ganz dursting. Gibts hier irgendwo nen Getränkeautmat?
Ist der dan wenigstens mit c++ programmiert?
// Klassendeklaration zur Simulation eines Getränkeautomaten #ifndef AUTOMAT_H #define AUTOMAT_H class GetraenkeAutomat { public: GetraenkeAutomat( int Anzahl, int Dosenpreis ); bool istGesperrt() const { return gesperrt; } bool istRueckgeldVorhanden() const { return Rueckgeld > 0; } bool DoseHerausgegeben() const { return DoseInAusgabe;} int getGetraenkePreis() const { return PreisProDose;} void DoseFreigeben() { DoseInAusgabe = false; } void GeldPruefenUndDoseHerausgeben(); void MuenzenAkzeptieren( int M ); int GeldRueckGabe(); int getAnzahlDosen() { return AnzahlDosen; } private: int AnzahlDosen; int PreisProDose; int Einnahmen; int eingeworfeneMuenzen; int Rueckgeld; bool DoseInAusgabe; bool gesperrt; GetraenkeAutomat( const GetraenkeAutomat & ); // Übergabe per Wert verbieten }; #endif
#include "automat.h" #include <iostream> using namespace std; GetraenkeAutomat::GetraenkeAutomat( int Anzahl, int Dosenpreis) : AnzahlDosen(Anzahl), PreisProDose(Dosenpreis), Einnahmen(0), Rueckgeld(0), DoseInAusgabe(false), gesperrt(Anzahl <= 0) {} void GetraenkeAutomat::GeldPruefenUndDoseHerausgeben() { if( gesperrt ) { cout << " Automat leer/gesperrt!" << endl; Rueckgeld = eingeworfeneMuenzen; } else if (eingeworfeneMuenzen < PreisProDose) { cout << " Geld reicht nicht!" << endl; Rueckgeld = eingeworfeneMuenzen; } else { Einnahmen += PreisProDose; Rueckgeld = eingeworfeneMuenzen - PreisProDose; cout << " Dose faellt in Ausgabe! (rumpel)" << endl; DoseInAusgabe = true; if( --AnzahlDosen == 0 ) gesperrt = true; } } void GetraenkeAutomat::MuenzenAkzeptieren(int M) { eingeworfeneMuenzen = M; cout<< " " << M << " Euro eingeworfen" << endl; } int GetraenkeAutomat::GeldRueckGabe() { int temp = Rueckgeld; Rueckgeld = 0; cout << " Geldrueckgabe: " << temp << " Euro" << endl; return temp; }
// Alle Methoden sind inline, weil sie sehr kurz sind, daher keine cpp-Datei. #ifndef PERSON_H #define PERSON_H #include <iostream> #include <string> #include "automat.h" using namespace std; class Person { public: // Konstruktor mit Initialisierungsliste Person( int anfaenglicheGelEuroenge ) : Geld( anfaenglicheGelEuroenge ) { cout << endl << " Eine Person mit " << Geld << " Euro kommt." << endl; } ~Person() // Destruktor { cout << " Eine Person geht mit " << Geld << " Euro." << endl; } bool genugGeld( int Preis ) const { return Preis <= Geld; } int wievielGeld() const { return Geld; } void sagt( string text ) const { cout << text << endl; } void trinkt() const { sagt(" Person sagt: \"gluckgluck... aaaah!\""); } void DoseEntnehmen( GetraenkeAutomat & a ) const { a.DoseFreigeben(); } void GeldEntnehmen( int Muenzen) { Geld += Muenzen; } void GeldEinwerfen( GetraenkeAutomat & a, int Muenzen ) { Geld -= Muenzen; a.MuenzenAkzeptieren( Muenzen ); } void KnopfDruecken( GetraenkeAutomat & a ) { a.GeldPruefenUndDoseHerausgeben(); } private: int Geld; // Die wichtigste Eigenschaft von Kunden! }; #endif
// Basiert auf einem Programm aus dem Lehrbuch von Prof. Ulrich Breymann // C++ Eine Einführung, 5. Auflage, Hanser-Verlag #include "person.h" #include "automat.h" #include <cstdlib> #include <conio.h> int zufall( int x ) // Pseudo-Zufallszahl zwischen 0 und x { return rand() % x + 1; } int main() { const int DOSENANZAHL = 5, DOSENPREIS = 2, MAXGELD = 10; GetraenkeAutomat objAutomat( DOSENANZAHL, DOSENPREIS ); // Objekt Automat while( !objAutomat.istGesperrt() ) // solange Dosen im Automat sind { cout << endl << " Anzahl Dosen: " << objAutomat.getAnzahlDosen() << endl; Person objPerson( zufall(MAXGELD) ); // eine Person betritt die Szene (ctor) if( objPerson.genugGeld( objAutomat.getGetraenkePreis() ) ) { int geld = zufall( objPerson.wievielGeld() ); objPerson.GeldEinwerfen( objAutomat, geld ); objPerson.KnopfDruecken( objAutomat ); if( objAutomat.istRueckgeldVorhanden() ) objPerson.GeldEntnehmen( objAutomat.GeldRueckGabe() ); if( objAutomat.DoseHerausgegeben() ) { objPerson.DoseEntnehmen( objAutomat ); objPerson.trinkt(); } if( objAutomat.istGesperrt() ) cout << endl << " AUTOMAT GESPERRT!!! (leer)" << endl << endl; } else objPerson.sagt( " Leider zuwenig Geld." ); }// eine Person verlässt die Szene (dtor) getch(); }
-
Optimizer schrieb:
Artchi schrieb:
Aber die Herren Javaisten sind sich zu fein, Kritik an ihrer Lieblingssprache zu zuilassen. Jetzt kommt aber die Wahrheit raus. :p
Mmmmmmmmhhhhhhhmmmmmm, jetzt darf neuerdings nicht mehr jeder seine eigene Meinung zu Swing haben, ok.
Ach komm. Du weißt doch ganz genau wie ich das gemeint habe...
-
vista schrieb:
Artchi schrieb:
Zumal ich ja für Java eine Lanze bzgl. GUI gebrochen habe, in dem ich SWT als Alternative genannt habe. Aber die Herren Javaisten sind sich zu fein, Kritik an ihrer Lieblingssprache zu zuilassen.
es war diesmal auch ein recht schwacher versuch von dir, auf diffizile art den flamewar anzuheizen. das hast du schon mal besser hingekriegt...
Du bist wohl hier im Forum, um mir immer vorzuhalten, das ich Flamewars anzettel. Naja, haste wenigstens deine Berufung gefunden. Können wir uns beide die Hand reichen!
-
Artchi schrieb:
Aber die Herren Javaisten sind sich zu fein, Kritik an ihrer Lieblingssprache zu zuilassen. Jetzt kommt aber die Wahrheit raus. :p
Kritik an Java wird von der Java-Community durchaus wahrgenommen und auch von Organisationen, die im JCP organisiert sind. Entsprechend werden die Schwächen von Java durchaus in jeder neuen Version verringert. Das betrifft die Performance, das betrifft auch die Integration. Mit Java 6 sind zum Beispiel solche Sachen wie die Tray-Icon-API oder auch die Tools-API hinzugekommen, die eine bessere Integration ermöglichen. Auch am Look&Feel wird ständig gearbeitet und inzwischen ist es schon ziemlich gut.
Mit der Kritik von Java ist es aber auch so eine Sache. Java entwickelt sich weiterhin relativ schnell weiter. Man hat alle 2 Jahre oder so eine neue Version, die auch starke Fortschritte macht. Das wird von den Kritikern im Allgemeinen nicht gewürdigt. Stattdesen wird die Kritik so geäußert, dass man als Nutzer einer neueren Javaversion den Eindruck hat, dass dort Probleme angesprochen werden, die einfach schon lange gelöst sind oder zumindest inzwischen stark abgeschwächt wurden.
Die Vorteile von SWT gegenüber Swing sind zum Beispiel auch so ein Beispiel. IMHO hat SWT heutzutage keine wirkliche Daseinsberechtigung mehr. Zumindest nicht für neue Projekte. Die Vorteile von SWT haben sich inzwischen stark relativiert und die Nachteile in Form von einem echt miesen Design spielen somit eine viel stärkere Rolle.
Disclaimer: "Mieses Design" ist vielleicht der falsch Ausdruck. SWT zwingt einen halt zu einem Programmierstil, der nicht zu Java passt.
-
IMHO hat SWT heutzutage keine wirkliche Daseinsberechtigung mehr. Zumindest nicht für neue Projekte. Die Vorteile von SWT haben sich inzwischen stark relativiert und die Nachteile in Form von einem echt miesen Design spielen somit eine viel stärkere Rolle.
Das würde ich so auch nicht behaupten, denn so sehr Swing auch technisch gesehen aufholen mag, SWT ist meiner Meinung nach immer noch vorne. Ich setze beispielsweise unter Linux zwei, manchmal drei verschiedene Java IDEs ein und Eclipse hat integrationstechnisch die Nase einfach weit vorne. Ab und an verwende ich gerne mal die Beryl-XGL Kombo, nachdem Features wie die Exposé-Kopie ganz angenehm zur Fensterverwaltung beitragen. Eclipse läuft wie gewohnt völlig anstandslos, sämtliche Effekte werden sowohl bei Popups, Menüs, etc.. übernommen. Netbeans hingegen stürzt entweder ab oder es wird einfach nichts gerendert, damit ist es also nicht nur unnötig erschwert sondern sogar völlig unmöglich zu arbeiten. Natürlich kenne ich auch die entsprechenden Workarounds, allerdings ist das meiner Meinung nach nicht Sinn der Sache.
Ansonsten würde es mich halt interessieren, wie es da zukunftsmäßig weitergehen soll mit Java am Desktop, denn wer sich Demos von der Microsoft Windows Presentation Foundation oder von Adobe Apollo angesehen hat, überlegt schon, wie Java da mithalten will.
P.S: Aussagen wie "Aber die Herren Javaisten sind sich zu fein, Kritik an ihrer Lieblingssprache zu zuilassen." sind meiner Meinung nach unnötige Tiefschläge. Wie wenn es unmöglich wäre objektiv zu beurteilen, wenn man Java Anhänger ist. Das scheint ein Privileg zu sein, dass C++ Programmierern vorbehalten ist.
(Auch wenn es in diesem Beitrag nicht hervorgeht, ich bin auch überzeugter Java Programmierer).