Jump to content

Need to make a GUI desktop app. Which language should I use?

Merkey

Hi, so I am planning to make a desktop GUI Windows app as a part of my physics seminar work. The app would let the user easily make and arrange a few magnets, and then it would calculate and draw their magnetic field. The problem is that I don't know which IDE or language should I use to create it. I have got quite decent experience in C# or Java, so I was thinking of a Windows Form Application or a JavaFX app. Would it be a good solution or are there any better ones? 

Link to comment
Share on other sites

Link to post
Share on other sites

I will just give you a little list of choices you've got:

  • HTML/JS based App
  • JavaFX
  • C# Windows Forms
  • C# WPF
  • C# UWP (only via Windows 10 Store)
  • C++ QT
  • C++ QT with QML
  • Matlab

Of course there are more solutions, but I selected them based on what I know (plus JavaFX cause you mentioned it)

I highlighted those which I would recommend based on technology and your personal knowledge.

So here some points you might wanna consider too:

  • Cross-Plattform, should the application work on more than just windows? Then don't use C#
  • Are you need a very flexible UI, then use html/JS or maybe WPF. Do you want something that looks like a normal/classical windows program? Then use everything except the html App, since it is more work to get the same experience as you've got on a normal desktop application.

What would I do? I really like WPF and got some experience with it, and for some projects I might go with it, but since I mainly target cross-plattform development, I would do it with HTML/JS (probably with Typescript and React). With electron or nodewebkit you can create Desktop Apps which can access basically any system functionality, but using the same technology as is used in the web.

 

I didn't used Matlab for any kind of UI experience, but it might be worth considering due to the powerful calculation functionality it has builtin, since I guess you need it for your project? Of course for every other language I mentioned above such a library would exist too, but you have too look for it and how to use it...

 

Basically if you feel comfortable with one of the above mentioned technology use it, since it will make your life easier if you don't have to learn something completely new while actually focusing on developing your app. But if you don't really have much experience in any of thoose, I would recommend using HTML/JS with node-webkit.

Link to comment
Share on other sites

Link to post
Share on other sites

54 minutes ago, lal12 said:

I will just give you a little list of choices you've got:

  • HTML/JS based App
  • JavaFX
  • C# Windows Forms
  • C# WPF
  • C# UWP (only via Windows 10 Store)
  • C++ QT
  • C++ QT with QML
  • Matlab

Of course there are more solutions, but I selected them based on what I know (plus JavaFX cause you mentioned it)

I highlighted those which I would recommend based on technology and your personal knowledge.

So here some points you might wanna consider too:

  • Cross-Plattform, should the application work on more than just windows? Then don't use C#
  • Are you need a very flexible UI, then use html/JS or maybe WPF. Do you want something that looks like a normal/classical windows program? Then use everything except the html App, since it is more work to get the same experience as you've got on a normal desktop application.

What would I do? I really like WPF and got some experience with it, and for some projects I might go with it, but since I mainly target cross-plattform development, I would do it with HTML/JS (probably with Typescript and React). With electron or nodewebkit you can create Desktop Apps which can access basically any system functionality, but using the same technology as is used in the web.

 

I didn't used Matlab for any kind of UI experience, but it might be worth considering due to the powerful calculation functionality it has builtin, since I guess you need it for your project? Of course for every other language I mentioned above such a library would exist too, but you have too look for it and how to use it...

 

Basically if you feel comfortable with one of the above mentioned technology use it, since it will make your life easier if you don't have to learn something completely new while actually focusing on developing your app. But if you don't really have much experience in any of thoose, I would recommend using HTML/JS with node-webkit.

Thanks for the list, WPF or JavaFX would be probably the best options. I've also heard about OpenGL API, would it be a good option as well?

Link to comment
Share on other sites

Link to post
Share on other sites

4 hours ago, Merkey said:

Thanks for the list, WPF or JavaFX would be probably the best options.

Do C# with WPF. Barnacules nerdgasm has a web browser tutorial that basically gives you enough to figure out how to use the rest of WPF. 

4 hours ago, Merkey said:

I've also heard about OpenGL API, would it be a good option as well?

No. Open GL is a 3D acceleration standard not a graphics API. Open GL requires a windowing system like SDL or SFML to run inside. They aren’t meant for your basic text box and button application. They require you to basically custom draw every pixel (basically) and don’t hand a lot of stuff. You can look into it but if you want text, buttons & basic stuff, use WPF with C#. If you want to make a game, use SDL (or sfml) and open GL but even then I’d suggest for you to use a game engine like game maker or Unity 3D. 

Link to comment
Share on other sites

Link to post
Share on other sites

4 hours ago, fpo said:

Do C# with WPF. Barnacules nerdgasm has a web browser tutorial that basically gives you enough to figure out how to use the rest of WPF. 

No. Open GL is a 3D acceleration standard not a graphics API. Open GL requires a windowing system like SDL or SFML to run inside. They aren’t meant for your basic text box and button application. They require you to basically custom draw every pixel (basically) and don’t hand a lot of stuff. You can look into it but if you want text, buttons & basic stuff, use WPF with C#. If you want to make a game, use SDL (or sfml) and open GL but even then I’d suggest for you to use a game engine like game maker or Unity 3D. 

I don't want to make a game, I just don't know how difficult or inefficient would it be to make more advanced GUI in WPF. I was making some simple games in WFA couple years ago, and every simple animation(like moving a rectangle in the window) was very resource hungry, I was at around 75% CPU usage when I made space attack like game...

Link to comment
Share on other sites

Link to post
Share on other sites

13 hours ago, Merkey said:

Thanks for the list, WPF or JavaFX would be probably the best options. I've also heard about OpenGL API, would it be a good option as well?

If you have no experience with WPF let me warn you that since you plan on moving object in the window you will have a lot to test and learn while if you have winform experience this kind of project probably takes about 2-3 hours to complete. I am not saying to not learn WPF. Just saying if you are short in time keep to winforms as it takes about 5 minutes to make object drag-drop in a form.

Link to comment
Share on other sites

Link to post
Share on other sites

5 hours ago, Merkey said:

I don't want to make a game, I just don't know how difficult or inefficient would it be to make more advanced GUI in WPF. I was making some simple games in WFA couple years ago, and every simple animation(like moving a rectangle in the window) was very resource hungry, I was at around 75% CPU usage when I made space attack like game...

If you want to make an animation and know java, use Princeton’s STDDraw library. It’s soooo easy

 

edit

or use animation software. Not sure what you’re trying to demonstrate. Just shooting in the dark rn

Link to comment
Share on other sites

Link to post
Share on other sites

44 minutes ago, fpo said:

If you want to make an animation and know java, use Princeton’s STDDraw library. It’s soooo easy

 

edit

or use animation software. Not sure what you’re trying to demonstrate. Just shooting in the dark rn

I agree, STDDraw is pretty simple. If you are fluent with Java go for it. If you prefer winforms just convert animation to animated GIF and put it in a picture box end of the story.

Link to comment
Share on other sites

Link to post
Share on other sites

18 hours ago, fpo said:

If you want to make an animation and know java, use Princeton’s STDDraw library. It’s soooo easy

 

edit

or use animation software. Not sure what you’re trying to demonstrate. Just shooting in the dark rn

The only animation I plan to do is object drag drop style. All other parts of the app would be just GUI(buttons, labels, texboxes etc.) and calculations. STDDraw looks like a library to just draw a shape in a window, I need a lot more functionality.

Link to comment
Share on other sites

Link to post
Share on other sites

19 hours ago, Franck said:

If you have no experience with WPF let me warn you that since you plan on moving object in the window you will have a lot to test and learn while if you have winform experience this kind of project probably takes about 2-3 hours to complete. I am not saying to not learn WPF. Just saying if you are short in time keep to winforms as it takes about 5 minutes to make object drag-drop in a form.

It doesn't matter, drag drop animation will be the only animation in the whole program. I am not short in time, just wanted to know which tool or library(JavaFX, WPF, WFA etc.) would be the most suitable for this project

Link to comment
Share on other sites

Link to post
Share on other sites

On 9/15/2018 at 3:31 AM, Merkey said:

The only animation I plan to do is object drag drop style. All other parts of the app would be just GUI(buttons, labels, texboxes etc.) and calculations. STDDraw looks like a library to just draw a shape in a window, I need a lot more functionality.

STD DRAW is that deceivingly simple. You can put text, boxes, png images, read mouse & keyboard input. 

You can create buttons very easily if you’re even slightly mathematically inclined. Text already exists and can be drawn very easily. 

 

I don’t know what you mean object drag drop style. 

 

Otherwise I think WPF has a video player object. You could easily animate something with Krita or Gimp (or just draw an image a bunch of times in paint & make it a video with a video editing software) 

and then when you need that animation to play, you just play the video. 

 

Edit:

yep, there’s a video component.

https://www.wpf-tutorial.com/audio-video/playing-video/

 

EDIT EDIT
I have written a fully functional Pong game in STD DRAW. 

Link to comment
Share on other sites

Link to post
Share on other sites

Electron / nodejs

CPU:R9 3900x@4.5Ghz RAM:Vengeance Pro LPX @ 3200mhz MOBO:MSI Tomohawk B350 GPU:PNY GTX 1080 XLR8

DRIVES:500GB Samsung 970 Pro + Patriot Blast 480GB x2 + 12tb RAID10 NAS

MONITORS:Pixio PX329 32inch 1440p 165hz, LG 34UM68-p 1080p 75hz

 

 

 

Link to comment
Share on other sites

Link to post
Share on other sites

On 9/15/2018 at 10:06 PM, JohnDongus said:

Electron / nodejs

yeah if you want to make super modern guis, it's pretty hard to avoid just making the front end in JS. Desktop application tech stacks are increasingly looking a lot like web tech stacks. I've got a side project of mine where I'm trying to set up a project through node addons so that you can do all your business logic in C++ and render everything in static react components all inside a single executable, but that's me just fighting the system since I don't really like web development lol

Gaming build:

CPU: i7-7700k (5.0ghz, 1.312v)

GPU(s): Asus Strix 1080ti OC (~2063mhz)

Memory: 32GB (4x8) DDR4 G.Skill TridentZ RGB 3000mhz

Motherboard: Asus Prime z270-AR

PSU: Seasonic Prime Titanium 850W

Cooler: Custom water loop (420mm rad + 360mm rad)

Case: Be quiet! Dark base pro 900 (silver)
Primary storage: Samsung 960 evo m.2 SSD (500gb)

Secondary storage: Samsung 850 evo SSD (250gb)

 

Server build:

OS: Ubuntu server 16.04 LTS (though will probably upgrade to 17.04 for better ryzen support)

CPU: Ryzen R7 1700x

Memory: Ballistix Sport LT 16GB

Motherboard: Asrock B350 m4 pro

PSU: Corsair CX550M

Cooler: Cooler master hyper 212 evo

Storage: 2TB WD Red x1, 128gb OCZ SSD for OS

Case: HAF 932 adv

 

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×