I’d like to develop an application with a complex GUI (combobox with animation, charts with spline, transparent layers, …). I have good experience with C# 2.0 and I’m studying WPF, but I read that, unfortunately, there is no plan to port WPF to Mono.
If I stick with C# and create custom GUI controls using OpenGL (via OpenTK), I feel it will be a hard work (integration with GTK#, debugging, hard to use to design forms).
I can use Java (with JOGL), but I’m not very skilled with it, and I don’t know about performance issues.
Last option is C++, but I have to do a big revision (years since last time I used it), and I find it hard to develop GUI and portable applications in C++. (Maybe I’m wrong! Still, I’m quite afraid to develop such complex application with this language.)
What is your advice? Had I better choose C# + OpenTK, Java + JOGL, or return to C++?
I would go with Qt. Take a look at http://qt.nokia.com/products/ . If you are afraid of C++ (but there is no reason to be afraid of it), you can try with Java Swing. I think that those are the best options to go with multi platform desktop GUI development.
I would suggest Mono and GTK#. Developing apps with .Net is far more effective than doing it in C++ vanilla. Sure, you have to stick with C# 3.0 and .Net 2.0 (some features from 3.5 is implemented, like LINQ). But it still gives you a lot more than C++ with, for instance QT, would give you.
Go C# for productivity. Nothing against C++ but it's a bit verbose.
As for the GUI library, I think WinForms used to work on Mono. Alternatively, GTK#.
I would not suggest using wpf for it is a platform dependant platform. Silverlight might be a better option.
But if you are developing a web application, jquery would be a nice option you also might consider adobe flex and adobe air; http://www.adobe.com/products/air/
Does multi-platform have to include iDevices? Can it be on the web? Those are 2 questions you have to answer first.
If you can live without iPad/iPhone suppport, then Flex/Flash/Air is good option for highly graphical things. It is multi-platform for sure and easily integrates to the web. Probably your best option for this case with the limited details given.
Qt could work for you as well, although I can't say for sure if it's graphic library will make it easy. I've personally never worked with it, so other would have to answer that. But since it is in C++, you could use other libraries as well.
Java Swing sounds rough to me for this complex of a GUI. Making some basic stuff isn't too bad, but if you are expecting an experience like with C# I think you will be frustrated. Just a personal opinion of course.
Lastly, if it can be a web app, why not stick with C# and Silverlight? A .NET solution may work well for you since you are already learning it.
Silverlight runs on Windows/Mac/Linux and some handhelds, and is being ported to more handhelds. I believe Silverlight will ultimately be ported to every popular device.
Silverlight is:
Much, much more powerful than Flex/Flash/Air.
Much, much more powerful than Qt.
Ridiculously more powerful than GTK+ or GTK#.
Ridiculously more powerful than JOGL.
Silverlight has all of the features you have requested.
Silverlight works very well with C#, which is a much more productive language to work in than C++.
Silverlight is basically a very large subset of WPF, so if you already know WPF, you already know Silverlight.
Unless you absolutely require iPhone/iPad support I think the decision is perfectly obvious.
See this comparison of WPF and Cocoa to get some feeling of how WPF/Silverlight compares with the likes of Qt, Flash/Flex/Air, and GTK#, all of which use a primitive WinForms-like object model similar to the one used by Cocoa.
At my day job (a well-known microprocessor company) we develop complex engineering apps with Java, Eclipse RCP, and Java OpenGL. Performance is good -- we can easily get many millions of polygons/second and up to 100 frames/second. The SWT widgets in Eclipse are fast enough where we haven't had to render any custom controls with JOGL.
I've got a set of tutorials that shows how to get started with this kind of programming. The series starts with http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/.
First, don’t use C# for anything that should be portable. Mono is a bad option for GUI for two reasons:
Mono goes always several steps behind .NET.
Mono does not support WPF, so the only way to develop GUI is using something like GTK#.
My personal opinion – use C++. It would give you very good portability and independence.
You have two options:
Qt4 – very good GUI toolkit, makes GUI development very easy, and highly portable.
GTKmm – also very good toolkit, but it feels less natural on Windows.
Also, Java has Swing toolkit that comes with JDK and is available on all Java platforms, even very strange ones like OpenVMS.
Related
I've used C# quite a lot, it was my main programming language during University and I wondered which of the two languages for developing for Android or iPhone are easiest to learn bearing that in mind.
I'm interested in people's opinions on the two languages, I've dabbled a little in both but nothing more than a couple of hours. I'm also interested in people's opinions on Windows Phone 7 as an app/game platform, as this uses C# so would be an obvious choice for transitioning into that area.
Opinions?
That would be Java but you will miss LINQ a lot.
You can develop in C# for the iPhone with MonoTouch but it's not free and you'll never know if Apple sends them out in the cold (unlikely). Soon you can even use C# for Android development with MonoDroid but I kind of feel that that's a smaller win for a C# programmer than not having to learn Objective-C. Java and C# are so close that the transition most probably will be smooth.
As a C# programmer I think that the Windows Phone 7 development platform looks very promising but my experience tells me to wait and see. Microsoft has a terrible track record in the mobile business and they also have a tendency to make big changes between early releases.
Java I think. The semantic model for C# is closer, and ObjectiveC for iPhone apparently is not garbage collected. You will probably miss some of the features of C#, but most people get over it.
Your choice of language will depend on your motives. If you intend to write commercial software that you want to sell, it's probably best to go for Objective-C and aim at the iPhone/iPod Touch/iPad. Objective-C is a steeper learning curve for a C# programmer than Java but that is as nothing compared with actually thinking up an app that people will want to buy and getting it to commercial quality. And people who own iDevices are still more numerous than people with Android devices and they probably have more expectation of having to pay for apps.
If you are doing it as a hobby then you will want to choose whichever platform your current smartphone/tablet or whatever supports. You are going to be the primary user of your apps. It makes sense to develop apps that you can use. Another consideration, if you are a hobbyist: to develop an iPhone app you need an Intel Macintosh and a $99 Apple electronic certificate to deploy apps to an iPhone even for testing.
The actual language is a relatively minor consideration. A reasonably competent programmer can pick up Objective-C in a couple of weeks. The frameworks will take a little longer, but if you are doing it as a learning experience, it will be a more rewarding experience than learning Java which is nearly the same as C# by comparison.
I have a co-worker who made an attempt to learn Objective C to do I-phone development. We are both .Net developers working mostly in C#. He had a very long learning curve and finally abandoned trying to learn Objective C not only because of the language barrier but also because of the setup. Coming from a C# background, expect a long haul getting your arms around Objective C. Java on the other hand is more like C# and might be better to start with. I am in the same boat as you and actually decided on Windows Phone 7 development first because it is C#. I would go after the droid market next as I think it would be easier to learn.
I know this has been said before, I figured I would point out a fact, C# came about because of the law suit surrouding Microsoft's Java Virtual Machine. I would describe C# as the son of Java and C++, at least in early versions. C# 4.0 has added features neither of them have, its really matured into its own language.
So if you come from a C# background then you should be able to pick up Java effortlessly. Of course Objective-C is C++ on crack, so it should still be possible, what you will miss is Visual Studio and all the features it brings. The reason C# is so easy to develop for is all the features in Visual Studio and most of the features of the language are supported.
As you can see, C# is partially based on Java, so that step would be a lot easier.
I'm also familiar with Java, C# and ObjC and started out with C#, then did Java and now use Objective-C..
And the C# -> Java part was because my education did it that way.. ;-)
And because WEBAPPS are a thing that is HOT right now.. i would say.. Java is a safer choice, because you could base a webapp on that.. although ObjC might also have those possibilities, i just don't know about it..
I switched from C# to Java because I needed to code a lot of systems integration. C# was just not powerful enough / limited to .NET systems. I agree that LINQ is a nice feature, and that generics in C# are a lot more straightforward, but if you start looking at the whole Java ecosystem, I guess these are just minor losses.
Just to sum up some great things you get when switching to Java: Eclipse IDE, maven build system, Spring dependency injection and aspect oriented programming framework + OSGi, GlassFish application server, Grizzly, Jetty, Hadoop, the apache commons libraries, ... . All these things come in Java, and are very useful when you start programming services.
I don't know about Objective-C
Hope this helps,
J.
Have you considered using MonoTouch?
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I am taking software engineering classes at my university. I just took data structures and i am almost done taking design patterns. With the design patterns class the instructor let us choose what Language to use and what IDE to use on our labs. Since, i know C++ mostly i used that. Most of the class used c# and some used java..
Well, i just signed up for GUI programming spring term, and its the same teacher, and he said we can use whatever we like. Since, i have never really used C# i might be better of using c++? I have looked into using QT4 but i dont know how hard it is, and how much helps really out there? Since, there wont be much lecturing..
I am considering using C# since i have taken classes in VB.NET and have used winforms quite a bit. However, i would love to use C++ what are your thoughts? Is c++ gui something i might use in the future in the real world? or am i better off trying to learn C#
I would love to stick with C++ in my career path though..
I dont want to be stuck learning C# and GUI at the same time either.
Is QT4 a good way to go?
qt is not that difficult to work with. I have tried some gui tool kits for c++ and this is my experience in terms of c++
Qt
For c++ development and gui's i would overwhelmingly favour Qt instead of alternative libraries like win32 api, Microsoft foundation classes, etc.
Advantages
qt is cross platform and can be used on windows, linux, symbian, windows ce, mac osx
qt is not that difficult to learn. If you understand the basics of c++ classes and some template programming
qt is used to professionally create guis. I don't recall exactly but i think autodesk maya and adobe photoshop may be using qt for their gui's
qt4 has more than just gui programming ie it has libraries for networking, internationalisation, phonon for video and audio, animation framework, etc etc
Disadvantages
it's not a native library so your application would be larger than if you used win32 api but even then i still think its smaller than .net run time
To start learning qt now
find the book c++ gui programming using qt4 second edition. or another good resource
download the qt sdk for visual studio 2008
download the qt visual studio addin for visual studio 2008
create a new qt4 project and compile and run your first project
C#
i should state from the outset that i am not a c# developer but i know it has some good stuff
Known advantages
allows you to use windows forms, wpf, linq (language integrated query) etc
wpf is what you would be most interested in as a c# developer
Disadvantages
like all .net languages, it is still slower than native applications made in c++
not portable to different operating systems like mac osx, linux(But remember MOST USERS (90%) ARE RUNNING WINDOWS)
If you target users of windows xp, you would have to inconvenience them with having to download .net in order for your application to work. To me this is the biggest disadvantage of .net languages since most users i know have slow internet connections
To start learning gui development using c#
find the book windows presentation foundation unleashed or any good c#/ wpf book
Warning
i am not an expert in c++ or c# and am just giving my opinion or experience.
i have limited experience in c#
I am considering using C# since i have taken classes in VB.NET and have used winforms quite a bit. However, i would love to use C++ what are your thoughts?
If you want to use Windows Forms, and C++, then you might use C++/CLI (formerly known as Managed C++). This uses extensions to C++ to support .NET, and is the only .NET language that allows mixed CLI and native code, so once you glued you interface code to your application code, you can use ISO C++ exclusively.
That said except where I have been implementing an interface for existing C++ code, I have found it easier to simply learn C# which is designed from the ground-up to be a .NET language so is generally a much more comfortable fit.
In the ISO C++ arena, choices include Qt and WxWidgets, both of which are cross-platform and well supported by books and on-line information and communities.
I've used WxWidgets before (C++). It's easy and fun. Afaik, a significant amount of UI design is done with design editors or various XML/LUA importers, so the toolkit you use essentially doesn't really matter, because the event-driven code you will write will be very similar for almost everything.
The WxWidgets tutorials are great and the forums are helpful. If you're wondering how WxWidgets compares to other Toolkits, they have a great wiki page dedicated to it
Another question whose responses can be debated for time eternity. From my experience, I would say both languages have equally mature toolkits for creating user interfaces.
Hence for any project it only depends on what would be your preference. Generally, developing a UI using .NET is easier due to the fantastic RAD support provided by Visual Studio which unfortunately does not provide that level of sophistication for C++ based projects.
Having said that keep in mind that user interfaces exist on all operating systems; not just Windows. Hence you should focus on the basic tenets of GUI programming and treat the language only as a means of putting your thoughts into execution.
Hence if you really wanna do UI programming across all platforms; then C++ is the best bet ( of course these days you have Mono but not sure if they have a QT based toolkit you are looking at).
Quite a mouthful - but to make it short:
It is all about your choice and learning. If you wanna learn C# and use it go ahead. But if you are comfortable with C++, you can still use it and there is nothing that can be done in C# but cannot be done using C++.
Well, I couldn't possibly give a better answer than Dr.Deo, but I can share my bit. I used to do a lot of GUI programming before (more than 5 years ago, with Borland's VCL in either Delphi or C++). I recently had to produce a GUI for a little project, so I went for Qt4. I was able to almost entirely finish the GUI in one day without any prior knowledge of Qt4 (of course, it was a simple, one-window GUI). I found it very easy to use and quick to learn. If you have any GUI experience at all, it will be very intuitive. As for C++ knowledge required, it's minimal. You have to be comfortable with a fair dose of inheritance and polymorphism, but that is very typical of GUI tools and it really is just basic C++ knowledge of OOP.
I think several people have already made the point about being cross-platform. This will be more and more important in the future as alternatives to Windows are becoming mainstream (basically all the people I work with either have a Mac or run a distro of Linux) and as more in-between phone and tablet-PC products are emerging.
And, anyways, the language you use for programming a GUI isn't really that important, it is the tool-set. I think Qt4 is very complete. It also save you the trouble of interfacing to your existing code (let alone learning C#). Finally, Qt4 is very nicely usable with any IDE or build system (if you don't want to switch your code to qmake and/or Qt-Creator).
It kind of depends on what you are trying to learn.
If you want to learn about how GUI libraries work as opposed to how to use them then you want to look at plain Win32.
If you want to learn how to use them then you'll find C# or VB with WinForms the easiest to pick up. And of course they let you use a great designer.
Don't worry about issues like cross platform whilst you are learning the basics! You should focus on learning principles rather than specifics.
As #David Heffernan said, don't worry about cross platform unless you must have it (premature optimization). There is a price to pay for that flexibility that most cross platform kits offer. Further, from my years of experience as both a developer and a user, native platform toolkits generally offer a better end user experience (often less surprises about what and how the user is allowed and not allowed to do with each control or surface).
In a learning environment, you want to consider what you hope to accomplish in a semester. A typical three month overall semester schedule with successive milestones suggests you'll want low friction. Learning a gui library can be an excellent achievement, but you'll probably want some basic familiarity with at least the environment or context before you get started in order to actually complete the intermediate tasks in a timely manner: presumably interactions and otherwise general user experience are at the core of the class' focus.
For these reasons, I would consider sticking with c++, as you have a sense for the paradigm and fundamentals of the language and tools. But, because it is a learning environment, I would strongly consider something less mainstream, but ripe with potential in the library. I might look at hardware accelerated windowing libraries, either OpenGl based xgl if targeting unix/linux, or Windows Presentation Foundation if targeting Windows.
For GUI programming you could go for Visual C++.
It's hard to code everything in VC++ so people go for MFC.
MFC provides 100s of classes that make life much easier. So all you need to do is learn the basics of VC++ and learn MFC.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I am nearly done with a course about using OOP in C++ and all the programs we wrote in that course were console applications . I also finished a university course in C programming so I think I have solid C programming basics and now is the time to make a big step towards GUI .
I did a lot of googling and each time I read more pages I get more confused , I learned that there were too famous options in the past which are WinAPI and MFC. I tried to look into the WinAPI but It seems pretty tough and needs a lot of time so I asked my instructor's advice and he told me that If I wanna write GUI programs I would better learn C# or Java rather than using C++ which is faster but better designed for low level programming applications like drivers and so . So I searched the web to find if C++ is still used in writing nowadays applications and to my surprise Firefox, Google Chrome, Notepad++ and many other GUI applications on sourceforge.net are written in C++ in contradiction with my instructor's advice.
Also I learned that you can use QT or GTK libraries to build GUI applications in C++ but I have no idea ow to do that or if that is true.
So My question is what are the nowadays best available options to write GUI programs efficiently no matter how steep is the learning curve. I googled for C++ GUI options because It think it will be faster than Java or C# apps, If anyone has a different opinion state it please.
First of all, if you want to lean to write platform independent GUI then C# is no go.
When you write GUI in C++ there is a question of toolkit, Qt and GTKmm provide you very solid cross platform toolkits. While Qt has more "native" look and feel on Windows than GTKmm, Java Swing allows you to write very good GUI as well but it would be heavier and slower then one written with Qt or GTKmm.
Now... C#/WPF same issues as Java GUI - slower then native, but also it also locks you on one platform only.
My personal advice start from Qt.
If you are new to GUI programming C#/WinForms will be best for you. It rather simple, have a great community around it, have a lot of ready-to-use controls.. and best documentation ever - MSDN.
Sure, if you are looking for deep knowledge of "how things works" you then have to understand Win32 GUI. So, you can always back to C++/MFC for that. I would not suggest any other C++ libraries (as Qt), not because they are bad, but because they require good experience to start up.
My suggestion is start with WinForms, undestand the basic and learn to create simple application. As soon as you are master in that, go deeper :)
Try Juce.
The fastest way is to use C# and WPF. It's fast and simple for small applications but can be pretty complex in my opinion and there is a lot to learn. At least you are future proof, Microsoft is pushing WPF themselves finally. (Visual Studio uses it, and there will be a lot more versions to come)
The only real downside is, that you will only be able to run the application in Windows.
If you really want the "low level" access, there a lot of interop options with C++ code.
It depends on what kind of GUI application you want to write. If you want to write a shrink-wrapped app like MS Word or Firefox, then C++ is the way to go, because the market demands the last little bit of performance, with minimal dependencies. OTOH, if you want to write (for example) an interface to your company's database, the performance of the GUI is normally not important, but delivering something quickly and cheaply is, so you should use something more RAD, like C#.
Qt is very good. People say WTL is also nice, but I didn't used it.
Java and GUI does not fit very well in my head. There are some native to Java GUI libraries (AWT, Swing) but they are slow and don't provide interface native to platform it runs on. There is also SWT, which is used by Eclipse, but haven't seen any app besides Eclipse using it.
If GUI needs are simple I'd stick to C#: you drop some controls on your form, write some logics behind it and you are ready to go. If you need some really complex GUI then I don't think there would be a huge difference in development time between different languages.
C++ is good for speed (HTML rendering tools like chrome / firefox or image editors like photoshop) and for performing "feats" you might not otherwise be able to do on other platforms.
But it is more painful to use and there is much more of a luearning curve on any of the C++ based UI libraries than you would care to learn.
Since you do not seem to require any of this, as is clear from your question, your default choice should be C# or Java or Web based like your tutor advised.
C++ never dies, so that learning it is not a wrong decision. However, it is quite difficult to write GUI applications using C++ during early days. Therefore, I suggest you to use C# t write some GUI applications before switching back to C++.
Not exactly an answer to your question, but if you are still in learning and not in the production line, try learning Win API. Actually, I am surprised nobody told you that.
You see, all other frameworks /API /SDKs are actually just wrappers around this API, and chances are that whenever you are asked to do something non-standard in your GUI you will not find a solution within your framework and will need to dig down to Win API anyway.
Yes, it is Windows only API, still knowing what is actually going on behind the scene may be very handy at times.
Just my 2 cents.
If you decide for C++, have a look at wxwidgets - this way you don't limit yourself to just one operating system (windows in this case with MFC). Also QT should be good, but I've never tried them (I do not have much experience with wxwidgets either, but the few times I had to do something with them, they worked pretty well).
If you don't need high performance in the gui, have a look at scripting languages - Python has a default library that works well (tkinter) and also binding to wxwidgets
If you insist on using C++, try Win32 or GTK. See this thread.
Otherwise I recommend you try another language such as Python for the GUI part of your applications: Keep the rest in your preferred language and wrap. Do not forget the best feature of C++: binary compatibility with C.
If you have c++ foundation and want to expand that I recommend to start from Qt. It's distribution includes graphical UI designer and Asistant - browser for documentation. There is also separate product Qt Creator - complete IDE tailored for Qt which have everything integrated (including compiler). All of this if free and really easy to setup. Excellent tutorials included. Qt also includes non gui classes for common programming problems (like containers, variant type, etc.). You can convert your console application to GUI in a matter of few hours and decide if you want to continue learn it or try some other toolkit.
Just go to http://qt.nokia.com/downloads download SDK, install it and you have everyting to start coding.
QT is nice, but I have tried JUCE and now I think it is better.
JUCE is fast, clean an easy to use. You can integrate it with Eclipse and GCC (and minGW), use debug features (gdb under Eclipse) and more.
You can compile your code in Windows, Linux, OSX, IOS and Androis without makes much changes.
Keep an eye on their website:
http://www.rawmaterialsoftware.com/juce.php
If you speak Spanish look at this link:
http://juceratot.eshost.es
Regard
I have just finished my first real commercial application written in C++ / MFC.
The application consisted of agent installed on users workstations which in turn was controlled from a GUI Application on an administrators workstation. I choose C++ / MFC for these reasons.
Because I didn't know C#
Because I was not sure how long it would take for me to become as productive in a new lanuage
Because I did not want the hassle of installing the .NET runtime on workstations some of which might be W2K.
Now I am thinking of my second application which will again consist of an agent & a GUI Application. I am happy to continue on the same track with the agent for the reasons above but the GUI application will be much more complicated then the first. The first GUI app took a very long time to develop, was torturous and looked out of date even though it was freshly made.
Should I just bite the bullet with .net c# or look into something like QT.
TIA.
If you want really fast results, use .NET WinForms. Nothing beats the speed of putting together a GUI app and filling it with life, except maybe Delphi. The C# language and the .NET Base Class Library will also give you a huge productivity gain, even over the already great Qt framework. If you stick to the basic Windows Forms controls, it will even run on Mono.
WPF is even more productive once you're used to it, but getting used to it takes way more time than for Windows Forms.
.NET C# is a very good choice for GUI applications more generally. It's simple, to-the-point and there are vast resources on the internet.
The only thing against it I can think of, is platform compatibility, but if you're limiting yourself to C++/MFC, that shouldn't be a concern to you.
Even if you want to go platform-independent some time later, you can make a separate Gtk in .NET on Linux (Mono, the open-source .NET framework). Heck, there's even a Cocoa (Mac OS X) binding, I just don't know how mature it is. Furthermore Windows Forms is largely supported in Mono already... it really surprised me how mature it is when I was trying it out, although my primary experience with C# is on Windows.
For GUI application, you won't regret using C#. Even if you want to go cross-platform, and certainly not if you intend to only target Windows clients.
C# will almost definitely make you more productive!
Delphi. Produces stand-alone Windows executables which will work fine on Win2K (best OS Microsoft ever produced - this post is being written on it). Only disadvantage is Object Pascal, but if you know C++ it's very easy to pick up - and its was designed buy the guy who designed C#. The IDE is several orders of magnitude more productive than MFC with VS.
I've done them all - a monkey can use C#, it's all drag and drop interfacing and public accessors. I wouldn't wish using MFC upon my worst enemy, and QT just wasn't as intuitive as C# for me. It's also really easy to make C# look nice. Difficult things like changing colors and flashing controls are trivial in C#. It also has built in styles to use. I use it professionally daily. The only time I use C++ is if I'm programming a server where every microsecond counts.
The first question would be exactly what caused the difficulty in developing the GUI with MFC. Was it inherent to MFC, or what it because you were learning something new, and didn't really know what you were doing? To put it slightly differently, if you had to do it again today, how would the difficulty compare?
Make no mistake about it -- MFC is an old design with far more than its share of problems, shortcoming and design flaws. .NET is a lot newer, but has far more than its share of problems, shortcoming and design flaws as well.
Along with that, .NET is just plain huge. It's reasonably well organized, which helps, but it still takes quite a while to digest the sheer volume of information necessary to use it well. Likewise, while C# (for the most obvious example) is a perfectly decent language, learning to use it well isn't an overnight task either. This is probably a smaller issue though: C# doesn't really have many new concepts compared to C++. Just for example, a competent C++ programmer can easily read C# almost immediately, and while he may not use it optimally, can also write bits of C# immediately as well.
on which platform will your second app run on?
if it's XP and up i'll suggest C# / WinForms / GDI.
C# isn't that hard to adapt to, and there are literally a ton of examples online, and great books (the Head First one caught my eye as you can code a nethack clone and other fun projects). I've had to transition from C++ to C# myself, and it wasn't that rough at all (in fact it seemed like a pretty easy transition), and allowed me to rapidly prototype.
Good luck!
I wanted to learn to program and looked at both Java and C#. I decided to go with C# because it was so easy to just open a form and plop some buttons and text boxes on it. With just one download, C# Express got me going.
From what I saw with Java that couldn’t be done. At least not without downloading and configuring other software. All of which I found no easy instructions for. But I really wanted to learn Java.
I really don’t want to learn how to create UIs AND a new language. I’d rather just to concentrate on the code itself. Is there an easy way (like C# basically) to create Java apps?
Are you talking about a GUI builder?
There are many GUI builders out there. Some IDEs like Netbeans come with nice GUI builders for Java.
There are options in the Java community for 'one-stop downloads' like you mention. They are out there, they're just not as public as Visual Studio is. EasyEclipse is one of my favorites.
I've done a fair bit of work (> 4 years) on both platforms and the biggest difference I have found is not so much with the languages per se, but with the whole development environment. Specifically:
In .Net (be it ASP.Net, C# or VB.Net) the examples you find on MSDN or elsewhere tend to just work without a whole lot of tweaking, and the documentation is more reliable, whereas Java examples - especially the open source ones - often don't work out of the box and the documentation (yes, Apache Slide and Shindig - I'm looking at YOU!) is sometimes non-existent.
Having said that, the sheer amount of choice for plugins, libraries and the like for the Java platform is enormous, which is unsurprising considering its (largely) non-proprietary nature.
It seems to me the best and easier way to get what you want is to use Netbeans (JDK 6u14 with NetBeans IDE 6.5.1 Bundle).
It has both the JDK and the IDE in one download. And it has a easy and very good GUI builder.
Java is a very good platform and as you said it is easier to create cross platform applications, however, don't except this from the Desktop UI which, although still cross platform, not always gets right on all platforms with out modification.
You would have to add some code specific for each target desktop, but definitely that's a lot easier than write three different application ( One in Visual C#, other in GTK, and other in Cocoa )
I been learning to program in C# for a few months, but recently I signed up for a course which required Java. So I started playing around with java, first tried Netbeans then Eclipse.
I'm kinda a computer programming noobie (background mainly in web design) so take my perspective as a student. After messing around with Java for a bit i still prefer C#. While both are excellent the factors that tipped C# in my case are as follows
Easier documentation and a large variety of easy to view Video Tutorials, yes I know netbeans have a very large collection of video tutorials as well, they are encoded at such a terrible resolution and bitrate that they are largely unwatchable
Slightly easier to learn, maybe it's cause of the IDE or the syntax, but I found C# easier to pick up.
More functionality exposed right after using the IDE, you will find more controls in visual studio than compared to Netbeans. Eclipse was quite confusing for a noobie like me wading through it's massive plugins.
I think the only thing java has going for it, is that it's supported on more platforms. Though Mono is making up for the linux and Apple side so i guess it's not that bad. Either way they are both extremely productive environments, just in my humble noobie opninion C# is just slightly more intuitive to pick up.
The ability to learn to program in one language or another should most certainly not be based upon how to drag and drop GUI controls, especially since that measure is irrelevant to the language itself.
Side note: Java and C# are so similar that you'll pretty much be learning both as you go regardless.
I'd have to agree with dxmio, I switch back and forth between c# and java quite often. The two languages are quite similar.
The best way of learning programming .. is to write code!
If you know your way around Java, It's a mater of syntax to learn C#.
Programming is just as much a way of thinking in code, as knowing a language.
Personally, I didn't start with GUI. I started with BlueJ, a free "learning" compiler, for Java code.
No programmer in the world knows any language 100%. Their all sitting in their office, and playing with stackoverflow and google all day. Remember, Google is your best friend! (May be a bit of caffe too !)
Reminder: The best way to learn to write code, is to write code! If it's C, C++, C#, Java, PHP, Python or whatever you prefer, it's a matter of framework and syntax.
If you have Java in your browser, all you need is the latest Eclipse bundle.
I would suggest the Java EE edition for your platform from http://www.eclipse.org/downloads/
It appears that there are video tutorials starting from scratch at http://eclipsetutorial.sourceforge.net/totalbeginner.html
Using Netbeans, you can create Java based Swing GUIs pretty easily. Netbeans comes with a pretty nice GUI builder.
If you learn how to program in Java, I don't think it would really be that much of a stretch to create Java Swing applications from scratch. It's just a matter of learning the Swing libraries.
Not being from a .NET background, I can't comment on learning C# GUIs, but from my experience Swing was very easy to learn and it helps A LOT to understand the code underlying what the GUI builder in Netbeans generates.
I decided to go with C# because it was so easy to just open a form and plop some buttons and text boxes on it.
You can do this using builders in either language without writing any code.
With just one download, C# Express got me going.
Netbeans is the same deal for Java.
From what I saw with Java that couldn’t be done. At least not with out downloading and configuring other software.
True, you cannot develop Java with C# Express and you cannot develop in c~ using Netbeans. You do need to install two pieces of software.
All of which I found no easy instructions for.
I suggest you try http://www.google.co.uk/search?q=netbeans+gui+builder+tutorials 55,100 hits or http://www.google.co.uk/search?q=java+gui+tutorials 1,340,000 hits
But I really wanted to learn Java.
It doesn't appear you want to actually write any code or install more than one program at a time. You will find that learning to program in a language will be asking more from you than this.
Was I missing something?
Quite a bit I imagine.
I really don’t want to have to learn how to create UI’s AND a new language.
You can use a GUI builder to layout your windows, but if you want your program to do something useful, you will have to do some programing in a language.
I’d rather just want to concentrate on the code itself.
That appears to contradict everything you have just said. You can't concentrate on the code without learning the language.
Is there an easy way (like C# basically) to create Java apps?
To write apps that do something useful you are going to have to learn how to program and at least one language. I suggest you also learn how to debug and profile your program.
i found this for designing java winform application for you .
please check out
www.formdev.com
JFormDesigner™ is a professional GUI designer for Java™ Swing user interfaces. Its outstanding support for JGoodies FormLayout, GroupLayout (Free Design), TableLayout and GridBagLayout makes it easy to create professional looking forms.