Software | Java SMTools

SMTools (version 1.5.6) is a framework encapsulating several Java 1.8 classes that ease the development of graphical user interfaces (GUIs) and applications. As opposed to most existing frameworks that support the developer during the design phase by supplying tools that can draw up the GUI, SMTools only provides a library that gives the developer complete control from a bottom-up perspective. This means that explicit GUI development (positioning of labels, panels, ...) is still done inside the Java code.

Quick navigation:


Download Jump to top of page

You can download the following items:

  • The Java source code from the smtools package (ZIP, 3.3 MiB, 9422/8791 lines of code/comments)
  • The JAR containing the compiled code (JAR, 306 KiB)
  • The Java Docs (API documentation) (ZIP HTML bundle, 2.83 MiB)
  • All the necessary supporting JAR libraries (ZIP, 3.66 MiB)

There is also a direct link to the API documentation.

The software is also hosted on GitHub

If necessary, download the Java SE Runtime Environment 8, or for the Java SE Development Kit 8.


Screenshots Jump to top of page

As an example, the screenshots below show the about box, a GUI, two dialogs for choosing a date and time instant, and a progress indicator for running multithreaded tasks.





  



Licensing Information Jump to top of page

SMTools is a Java-based integrated framework providing various kinds of functionalities.

Copyright 2003-2020 Sven Maerivoet

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


Commit History Jump to top of page
Hash Date Subject
6df546ec Mar 16 13:06:59 2020 : CITRUSTask-Url:
d02868b1 Mar 16 11:26:06 2020 * Modified JARResources.java to always load from local disk when development mode is activated
edd5516f Mar 13 15:17:34 2020 * Added convertImageToBufferedImage() to JImageLoader.java * Added getBufferedImage() to JARResources.java
5390374b Mar 8 12:18:25 2020 * Modified JLabelBox to return a Rectangle instead of a Point
bdfff290 Mar 8 01:26:26 2020 * Added getMaxLength() to StringTools * Made I18NL10N to work with case-insensitive keys
83a7247c Mar 2 19:46:06 2020 * Added default and wait mouse cursors to JStandardGUIApplication * Added ZIP file support for TextFileParser
8cac9ec3 Nov 11 19:05:05 2019 Updated version numbering
22f303d5 Nov 11 19:01:38 2019 * Added map() function to MathTools.java
d594b294 Oct 29 20:00:59 2019 * Added formatInteger(), substring(), reverse(), convertTabsToSpaces(), convertSpacesToTabs() and getSoundex() to StringTools * Added loadImage(), rescaleImageWH(), rescaleImageW(), rescaleImageH() for BufferedImage to JImageLoader * Added getFontSize(), setFontSize(), getFontHeight(), setFontBold(), setFontItalic() and setFontBoldItalic() to JGraphics * Modified drawLabel() and drawLabelCentered() in JLabelBox to work with multiple lines of text and viewport bounds * Removed FileDoesNotExistException in favour of Java's own FileNotFoundException * Added static method fileExists() to JFileFilter * Allowed overloading of new method loadRegistry() in JStandardGUIApplication * Added Unix-time constructors to DateStamp and TimeStamp * Modified the constructor of DateStamp to take both DMY- and YMD-type strings * Added LatLongPosition to the org.sm.smtools.math package * Added getGreatCircleDistance() and getLatitudeLongitudeDisplacement() to MathTools * Fixed a bug in JStandardApplication's Java version checking * Refactored all method names in JStandardApplication for more clarity * Modified JStandardApplication and JARResources to default to the local file system if no JAR is specified
63da0b92 Aug 11 23:30:25 2019 * Removed previous versions of LICENSE and NOTICE
436979f1 Aug 11 23:29:51 2019 * Added github-related files (README, NOTICE, LICENSE, CONTRIBUTING and CODE_OF_CONDUCT)
621c5145 Aug 11 23:07:19 2019 * Updated HTML PRE-tags in javadocs * Added getToolBarInputMap() and getToolBarActionMap() to JStandardGUIApplication
760aae25 Aug 11 14:05:09 2019 * Updated numbers of release versions and dates in code and javadocs
8f5c7708 Aug 11 13:56:01 2019 * Added tool bar functionality to JStandardGUIApplication and JDerivedGUIApplication
73078ad9 Aug 7 02:11:20 2019 * Provided overriding of the initial sound set in JStandardGUIApplication * Modified MP3 sounds
25f9c9c2 Aug 7 01:15:13 2019 Refactored the system sounds Created JGUISounds.java enum Added GUI sound selection to the system menu of JStandardGUIApplication.java
ce1804ac Aug 2 19:26:14 2019 * TimeStamp.java: refactored the codebase to use Java's new Date and Time API * DateStamp.java: refactored the codebase to use Java's new Date and Time API * JDateChooser.java: modified to use the new DateStamp class * JTimeChooser.java: modified to use the new TimeStamp class * TextFileParser.java: modified to use the new DateStamp and TimeStamp classes, added a method to parse combined date-time strings * TextFileWriter.java: modified to use the new DateStamp and TimeStamp classes, added a method to write combined date-time strings
caafe006 Jun 30 16:42:03 2018 Refactored singletons and dialogs Registry.java: refactored the singleton pattern to use an enum DevelopMode.java: refactored the singleton pattern to use an enum JTimeChooser: changed the behaviour to continuously track the current time I18NL10N.java: refactored the singleton pattern to use an enum and fixed an error in the private declaration of an internal field Refactored all classes to use the new enum singletons JDefaultDialog: removed postponed activation (including for all derived dialogs) JStandardGUIApplication.java: refactored the use of the about box (and its related menu item)
451c2e0c Nov 1 01:34:27 2016 Added a blue-white colour map Added int() routines for finding minima and maxima in MathTools
201f54f4 Oct 29 02:54:07 2016 Allowed doubles for EmpiricalDistribution's percentile calculation
876e7b56 Sep 21 23:05:07 2016 Modified StringTools to have convertToCSV with a specified split character Added sinh, cosh, tanh and coth to ComplexNumber
48da2225 May 18 21:21:00 2016 Added JLabelBox and updated version number to 1.5.3
5dece69c Jun 23 22:35:45 2015 Refactored MemoryStatistics to SystemInformation and added OS-type detection Added a grayscale (trimmed) colour map
2db8218f Jun 4 02:02:13 2015 Fixed a bug not creating the last component in a random JGradientColorMap
94bb6e3d Feb 8 15:19:37 2015 Recompiled
f1397936 Feb 4 19:26:35 2015 Added support for random colour maps in JGradientColorMap
330eb76c Jan 19 00:53:58 2015 Added HMS display to timestamps when needed in JProgressUpdateGlassPane
413d1a20 Jan 18 18:54:20 2015 Renamed "applicatie" to "toepassing" for the Dutch locale
58bf15ef Jan 14 21:02:51 2015 Added displaying the specified locale to the startup sequence
3666b25b Jan 5 23:46:38 2015 Refactored Registry to abandon the concept of Hives and serialise the object list directly
7320c295 Jan 5 18:43:07 2015 Removed application registry functionality from JStandardGUIApplication (the system registry suffices)
0267853a Jan 2 21:11:24 2015 Updated sources to 2015
54a273bb Jan 2 20:52:58 2015 Release candidate v1.5.2
84fe38cb Dec 21 23:32:09 2014 Disabled setExtendedState() in JStandardGUIApplication due to a bug in Swing showing a JDialog's contentPane contents in the main JFrame window
dc5c425e Dec 16 14:20:32 2014 Removed unused left-over imports from JStandardGUIApplication
9fecc06c Dec 11 10:59:48 2014 Add explicit loadCustomColorMapComponents() and saveCustomColorMapComponents() methods for JGradientColorMap
da13bd56 Dec 9 16:15:46 2014 Changed the order of the colour maps in JGradientColorMap
aa8d7060 Dec 4 14:37:36 2014 Modified JNumberInputField to show a JWarningDialog in case of invalid input
71bde07a Dec 4 14:19:45 2014 Fixed a bug from JNumberInputField (should not show error dialog if none is provided)
ad0d24eb Dec 4 12:04:45 2014 Refactored JNumberInputField for better custom validations
5615c818 Nov 19 18:00:47 2014 Removed setPreferredSize() from JImagePanel's constructors
d2307e65 Nov 19 16:15:56 2014 Added JStandardGUIApplication::setDynamicLayout()
b0bb0dd4 Nov 19 01:12:35 2014 Added number of double decimals to MathTools
79cbe99d Nov 17 15:12:00 2014 Added kUltraLightPastel, kLightPastel, and kDarkPastel color maps
ec8beccb Nov 10 16:54:48 2014 Renamed TextFileWriter's writeInt() to writeInteger()
d1a98778 Nov 7 22:03:42 2014 -
1134d74a Nov 7 22:03:09 2014 Renamed JGradientColorRamp to JGradientColorMap and added custom palettes
4c7bf0df Oct 28 21:41:09 2014 Refactored Complex's arg() to default to the ]-PI,PI] interval instead of the [0,2PI[ interval
cc3641b2 Oct 12 23:04:25 2014 Modified ComplexNumber's argument() to return an angle between 0 and 2PI Added ComplexNumber's constants kTwo and kThree
641bb2b4 Oct 10 13:50:06 2014 Added cabs() to ComplexNumber
c9bc512d Oct 10 13:29:41 2014 Refactored ComplexNumber to have components instead of parts
95a9f815 Oct 10 01:37:10 2014 Refactored ComplexNumber, removed AComplexNumber and BigComplexNumber
412f92cf Oct 1 00:06:15 2014 -
0ef81b5e Oct 1 00:05:43 2014 Added AComplexNumber::inverse() Fixed AComplexNumber::pow() to deal with z = 0
f46072f8 Sep 28 12:58:33 2014 Made JCustomColorMapChooser's default directory the current one
c96b9179 Sep 24 14:14:21 2014 Removed unused locale strings
1432941a Sep 24 12:11:43 2014 Removed the GUI component cache from the framework
b7c0f1ac Sep 23 11:07:01 2014 Changed activation mode for JCustomColorMapChooser to kImmediately
e2a6fbf0 Sep 20 12:40:32 2014 Improved cancel() functionality for JDefaultDialog when activation is postponed
48fa12d0 Sep 6 00:12:35 2014 Various updates to JNumberInputField and ANumberFilter (number validation), JStatusBar (battery label), JDefaultDialog (ok and cancel callbacks), JCustomColorMapChooser (extract colormap components), JStandardGUIApplication (enable/disable window resizing)
4f5e00c5 Aug 1 01:20:01 2014 Fixed version numbering
3d3b64e2 Aug 1 01:14:42 2014 Recreated JavaDocs
8a204edf Aug 1 01:11:03 2014 Merge branch 'hotfix3' into release
ae123d78 Aug 1 01:04:09 2014 Fixed gitignore
95ce7f12 Aug 1 01:00:02 2014 Fixed Git commit
e0001cd3 Aug 1 00:57:37 2014 Removed binary class files
963a6fd9 Jul 23 13:14:30 2014 Refactored JGUIComponentCache to fail when a non-existing component is requested for retrieval
38e85fa1 Jul 23 12:37:25 2014 Fixed behaviour when using kImmediately in JDefaultDialog
efa18cd4 Jul 23 00:17:49 2014 Added hideMouseCursor() to JStandardGUIApplication
bd52cc64 Jul 22 16:58:27 2014 Fixed a bug in math.complex's calculation of pow()
268e8b25 Jul 17 17:06:35 2014 Updated JStandardGUIApplication with constructRadioButtonMenuItem Updated JIncompleteWarningDialog (removed space between text and exclamation mark) Updated JNumberInputField to automatically scan the value (without the need to press ENTER)
006f0458 Jul 14 16:02:26 2014 Updated JavaDocs
34349e63 Jul 14 15:21:44 2014 Merge branch 'develop4' into release
62cd7b00 Jul 13 10:25:55 2014 Updated JDerivedGUIApplication's concurrent task execution
d10fa2b5 Jul 13 00:58:35 2014 Fixed TaskExecutor to use the number of available processors
7679e1d0 Jul 13 00:31:35 2014 Updated JProgressUpdateGlassPane with an estimation of the time left Fixed ATask to call finishTask() at the end
e0b16b0a Jul 11 22:24:59 2014 Included JavaDoc screenshots for JProgressUpdateGlassPane
e6df4f80 Jul 11 20:05:54 2014 Stable version
f91cd94f Jun 19 01:11:42 2014 Various minor updates
65bd3271 Jun 17 01:44:09 2014 Upgraded concurrent execution tools
3229515e May 28 13:02:01 2014 Refactored ComplexNumber and BigComplexNumber as derived classes of AComplexNumber
affe19ad May 27 11:16:44 2014 Fixed a bug in setting up JStandardGUIApplication's maximised window state
b7f51bfa May 27 02:05:44 2014 JStandardGUIApplication's windowResized() callback is only activated when the window has physically changed size
6e030949 May 27 01:06:12 2014 Removed JStandardGUIApplication's WindowStateListener Removed double calls to windowResized() in JStandardGUIApplication
c42168e2 May 25 01:33:15 2014 Made the order of member methods in JDerivedGUIApplication compliant to that of JStandardGUIApplication
c09625a0 May 23 02:08:23 2014 -
06b80af9 May 23 02:07:28 2014 Refactored ATask to only handle single tasks
e175abb8 May 7 17:17:55 2014 Hotfix JDerivedGUIApplication
1e747d9b May 7 16:33:17 2014 Fixed JTaskExecutor to finishTasks() when fProgressUpdateGlassPane is null Extended TaskExecutor to work with a specified number of threads Updated all javadoc comments to specify JDK1.8 and 2014 Changed kRequiredMinorJavaVersion in JStandardGUIApplication to 7 Changed ComplexNumber and BigComplexNumber power() to pow() Renamed JDevelopMode to DevelopMode Renamed JMemoryStatistics to MemoryStatistics Added optional standard keyboard blocking to JProgressUpdateGlassPane Removed postInitialise() from JStandardGUIApplication (can be handled by constructors of derived classes)
c83872f8 May 5 20:03:28 2014 Updated all the javadoc comments Refactored LSLR to use an ArrayList instead of a Vector Renamed org.sm.smtools.miscellaneous to org.sm.smtools.util Modified StringTools to work with complex numbers
a195dd29 May 4 17:46:00 2014 Fixed setupXXX() instead of getXXX() methods in the entire source tree
cb56686d May 4 02:20:24 2014 Redesigned JStandardGUIApplication by changing getXXX() into setupXXX() Rearranged org.sm.smtools.application.util package Fixed a null pointer bug when the statusbar is disabled Redesigned the operation of the statusbar
27da5099 May 3 03:49:12 2014 Added ComplexNumber Added BigComplexNumber Modified JAboutBox to reflect BigDecimalMath library
6c07d934 May 1 03:29:10 2014 [EmpiricalDistribution] Added values for the chi-squared distribution [EmpiricalDistribution] Added a comparison for the Jarque-Bera test statistic [EmpiricalDistribution] Added a trimmed mean statistic [EmpiricalDistribution] Added a standard z-score statistic [EmpiricalDistribution] Provided separate access to sorted data [DistributionComparator] Added a covariance estimator [DistributionComparator] Added Pearson's correlation coefficient [MathTools] Added prime testing [MathTools] Added logarithms with a custom base
ce9cc340 Apr 28 16:01:34 2014 Reinitialised the registry databases for JDK1.8
f7c64777 Apr 28 12:22:52 2014 Refactored main package to org.sm.smtools
193a8c62 Jun 22 22:25:17 2013 Updated JavaDocs
00933ce3 Jun 22 22:24:42 2013 Updated MathTools with the sinc() function and the Lanczos kernel.
93d9d04f Apr 29 13:28:40 2013 Included that GTK, Quaqua and Windows (classic) LAFs
6111b7e4 Apr 28 19:26:06 2013 Refactored Registry and JARResources to prevent memory leaks in resources
5febd016 Apr 8 17:04:11 2013 Debugged TextFileParser for parsing doubles and empty lines Added isComment() to StringTools Allowed TimeStamp to accept HH:mm input strings Updated FileParseException to handle TextFileParser CSV-reads
85bcd6d5 Mar 5 00:57:40 2013 Fixed updating JStatusBar with the correct battery status icon
197439a8 Mar 4 20:34:53 2013 Fixed tooltip in JExtendedStatusBar
2d334fc9 Mar 4 16:41:16 2013 Added transparency to battery level icons
e18192aa Mar 4 16:30:11 2013 Changed the update period for JExtendedStatusBar
a80306e3 Mar 4 16:24:29 2013 JavaDoc update
53e95899 Mar 4 16:24:07 2013 Added "Java Native Access 3.5.1" to the used libraries in JAboutBox
f71a5fb5 Mar 4 16:20:22 2013 Refactored JStatusBar Included battery level indicator in JExtendedStatusBar
6cd56547 Feb 9 23:59:25 2013 Fixed kRotatingSector in JProgressUpdateGlassPane
c61c3ca7 Feb 4 12:05:26 2013 Updated JavaDocs
d25ac16d Feb 4 12:04:53 2013 Added blocking functionality to JProgressUpdateGlassPane
067d8253 Feb 3 18:17:08 2013 Upgraded JTaskExecutor with an isBusy() method
69cf5d62 Feb 2 19:06:20 2013 Updated JDerivedGUIApplication to cycle through the various types of glasspane progress updates
2e88ee6a Feb 2 18:47:01 2013 Added task execution via multithreading support Added various progress update functionalities via the glasspane
21fca529 Jan 6 02:39:45 2013 Added JScrollablePanel
3322c332 Jan 5 15:32:56 2013 Updated JStandardGUIApplication and JDerivedGUIApplication with menu item construction Changed JCustomColorMapChooser's file "save" dialog
8957ab57 Jan 5 00:41:02 2013 Updated StringTools with getIndentation() Incorporated indentation in JStandardGUIApplication (check box) menu item construction
1c3ea852 Jan 4 23:46:42 2013 Updated JStandardGUIApplication with (check box) menu item construction methods
5d152878 Jan 4 19:38:58 2013 Updated I18NL10N to return null for empty mnemonics
43b165dc Jan 4 19:24:44 2013 Updated JCustomColorMapChooser with parametrisation of the number of colours
8589b14a Jan 2 18:23:38 2013 Updated JGradientColorRamp Created JCustomColorMapChooser
18c2c27a Jan 1 22:30:56 2013 Created a custom colour map for JGradientColorRamp
19ac19b3 Dec 27 22:52:07 2012 Set status bar update period to 10 seconds.
6e9e65bb Dec 27 01:00:28 2012 Changed the statusbar's update period to 1 second
7f11c9ff Dec 26 01:16:47 2012 Fixed MathTools::atan()
e6d96583 Dec 21 01:48:39 2012 Added extra color maps to JGradientColorMap Updated Chrono with start() and stop() functionality
3ad742fd Dec 17 18:47:41 2012 -
273f5712 Dec 17 18:46:23 2012 Updated JStandardGUIApplication with beep(), getScreenSize(), ...
8e6ff74b Dec 7 15:39:22 2012 Updated MathTools Added glass pane functionality
e8ed175b Dec 5 02:14:26 2012 Fixed StringTools.convertDoubleToString Added StringTools.convertComplexToString Added StringTools.getDoublePrecision
555d1ac2 Dec 4 13:43:42 2012 Updated I18NL10N keys
80d2566e Nov 29 16:17:03 2012 Merge branch 'develop3' into release
d93b3b1a Nov 29 16:10:28 2012 Explicitly included doc-folder
a7ffbe6d Nov 29 16:08:59 2012 Updated JStandardGUIApplication
cea268b0 Nov 29 16:03:32 2012 Made the update step for the time chooser in JDerivedGUIApplication discrete
a37aa578 Nov 28 09:09:08 2012 Updated JStandardGUIApplication for accessing the status bar
863fa837 Nov 28 01:44:10 2012 Added JStatusBar
b602d026 Nov 25 01:22:58 2012 Fixed locale properties
f33a1ba9 Nov 25 01:08:35 2012 Refactored Messages towards full support for I18N and L10N
6b36ba7f Nov 16 16:22:21 2012 Merge branch 'develop2' into release
e10d45a4 Nov 16 16:18:31 2012 Added Kolmogorov-Smirnov testing
b2078c7d Nov 12 00:45:32 2012 * Updated StringTools with memory conversions. * Added JMemoryStatistics. * Updated JAboutBox with memory estimations. * Updated MathTools with min-max extrema finder and a kernel smoother. * Updated EmpiricalDistribution with a kernel density estimation of the PDF. * Updated TextFileParser with functionality to quickly load CSV-files.
97202df2 Jan 20 15:44:32 2012 Merge branch 'hotfix-2' into release
7c8b5693 Jan 20 15:43:31 2012 Adapted codebase to JDK1.7 compliance: generics <>
5a03d0a7 Jan 20 13:58:21 2012 Merge branch 'hotfix-1' into release
23e855e3 Jan 20 13:57:37 2012 JStandardGUIApplication: fixed new JDK1.7 location of Nimbus PLAF
8b9fc1c6 Jan 8 13:17:40 2012 Merge branch 'develop' into release
fcf80746 Jan 8 09:38:46 2012 Included application-resources images in commit
04b0c19c Jan 8 09:32:04 2012 Changed about box images in API documentation
c6bd3ea9 Jan 8 09:15:15 2012 Updated licencing conditions to 2012. Changed affiliation and background in JDerivedGUIApplication
981c49e8 Dec 26 18:59:36 2011 Added JDateStamp setAdjusted() for yyyy-MM-dd parsing
7b6b5bb5 Dec 26 18:54:49 2011 Stable master branch
df9de0d6 Dec 23 23:48:38 2011 Added week-of-year in title of JDateChooser
065c4959 Dec 9 12:23:57 2011 Complete build
c111675c Dec 9 12:23:25 2011 Added rollover capabilities to DateStamp
ec629187 Dec 6 01:55:51 2011 Fixed conversion bugs in DateStamp.set() and TimeStamp.set()
6b4216d3 Dec 5 09:45:43 2011 Fixed a bug in JDateChooser (array index out of bounds when selectedMonth == 12)
1d8fb165 Nov 22 22:07:18 2011 Fixed error in parsing ctor()' string-args in DateStamp and TimeStamp Fixed error in compareTo() in DateStamp and TimeStamp
b4f42cb4 Nov 21 20:25:40 2011 Fixed conversion error for DateStamp(dateString)
271e9835 Oct 4 16:29:06 2011 Fixed higher order statistics for EmpiricalDistribution
95809082 Sep 25 20:27:10 2011 Added smtools.swing.util.SpringUtilities
388f404a Sep 17 20:43:12 2011 Adapted build script
6b3f0f40 Sep 17 20:14:12 2011 Fixed an encoding-bug in TextFileParser
e28e00e0 Sep 17 14:21:31 2011 Added "encoding" to TextFileParser for handling UTF-8, ... Changed JComboBox with in JDateChooser (for compliance with JDK 1.7)
6b5f67e0 Aug 31 19:56:31 2011 Fixed TextFileParser:getNextCSV() to handle a final comma and return an empty string
c7f82c4b Aug 27 02:40:43 2011 Renamed MathTools::normalisedLinearInterpolation Added MathTools::findMinimum Added MathTools::findMaximum Added MathTools::quadr Added MathTools::cubicRoot Added MathTools::searchArrayBounds Added EmpiricalDistribution (for calculating CDFs, PDFs, percentiles, and other statistical quantities)
61a211d2 Aug 11 10:03:58 2011 Extended TimeStamp.java with functionality to convert between time zones
13dce726 Jul 13 00:51:40 2011 Changed getImage() from JARResources.java to complete loading
beca008d Jul 11 15:19:56 2011 Changed JGradientColorRamp to work with nrOfDecimals instead of int vs. double
0433a252 Jul 7 13:36:10 2011 1st commit