First Commit
This commit is contained in:
3
Datenblatt/.idea/.gitignore
generated
vendored
Normal file
3
Datenblatt/.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
18
Datenblatt/.idea/artifacts/Datenblatt_jar.xml
generated
Normal file
18
Datenblatt/.idea/artifacts/Datenblatt_jar.xml
generated
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<component name="ArtifactManager">
|
||||||
|
<artifact type="jar" name="Datenblatt:jar">
|
||||||
|
<output-path>$PROJECT_DIR$/out/artifacts/Datenblatt_jar</output-path>
|
||||||
|
<root id="archive" name="Datenblatt.jar">
|
||||||
|
<element id="module-output" name="Datenblatt" />
|
||||||
|
<element id="extracted-dir" path="$USER_HOME$/Downloads/pdfbox-tools-2.0.27.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$USER_HOME$/Downloads/pdfbox-2.0.27.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$USER_HOME$/Downloads/fontbox-2.0.27.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$USER_HOME$/Downloads/preflight-2.0.27.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$USER_HOME$/Downloads/xmpbox-2.0.27.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$USER_HOME$/Downloads/commons-logging-1.2.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$USER_HOME$/Downloads/org.eclipse.swt-3.1.jar/org.eclipse.swt-3.1.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$USER_HOME$/Downloads/iText7-pdfHtml-4.0.5-only-jars/html2pdf-4.0.5.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$USER_HOME$/Downloads/itextpdf-5.5.13.2.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$USER_HOME$/Downloads/pdf-renderer.jar/pdf-renderer.jar" path-in-jar="/" />
|
||||||
|
</root>
|
||||||
|
</artifact>
|
||||||
|
</component>
|
||||||
13
Datenblatt/.idea/compiler.xml
generated
Normal file
13
Datenblatt/.idea/compiler.xml
generated
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<annotationProcessing>
|
||||||
|
<profile name="Maven default annotation processors profile" enabled="true">
|
||||||
|
<sourceOutputDir name="target/generated-sources/annotations" />
|
||||||
|
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||||
|
<outputRelativeToContentRoot value="true" />
|
||||||
|
<module name="Datenblatt" />
|
||||||
|
</profile>
|
||||||
|
</annotationProcessing>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
7
Datenblatt/.idea/encodings.xml
generated
Normal file
7
Datenblatt/.idea/encodings.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
204
Datenblatt/.idea/intellij-javadocs-4.0.1.xml
generated
Normal file
204
Datenblatt/.idea/intellij-javadocs-4.0.1.xml
generated
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="JavaDocConfiguration">
|
||||||
|
<GENERAL>
|
||||||
|
<MODE>UPDATE</MODE>
|
||||||
|
<OVERRIDDEN_METHODS>false</OVERRIDDEN_METHODS>
|
||||||
|
<SPLITTED_CLASS_NAME>true</SPLITTED_CLASS_NAME>
|
||||||
|
<LEVELS>
|
||||||
|
<LEVEL>TYPE</LEVEL>
|
||||||
|
<LEVEL>METHOD</LEVEL>
|
||||||
|
<LEVEL>FIELD</LEVEL>
|
||||||
|
</LEVELS>
|
||||||
|
<VISIBILITIES>
|
||||||
|
<VISIBILITY>DEFAULT</VISIBILITY>
|
||||||
|
<VISIBILITY>PROTECTED</VISIBILITY>
|
||||||
|
<VISIBILITY>PUBLIC</VISIBILITY>
|
||||||
|
</VISIBILITIES>
|
||||||
|
</GENERAL>
|
||||||
|
<TEMPLATES>
|
||||||
|
<CLASSES>
|
||||||
|
<CLASS>
|
||||||
|
<KEY>^.*(public|protected|private)*.+interface\s+\w+.*</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
* The interface ${name}.\n
|
||||||
|
<#if element.typeParameters?has_content> * \n
|
||||||
|
</#if>
|
||||||
|
<#list element.typeParameters as typeParameter>
|
||||||
|
* @param <${typeParameter.name}> the type parameter\n
|
||||||
|
</#list>
|
||||||
|
*/</VALUE>
|
||||||
|
</CLASS>
|
||||||
|
<CLASS>
|
||||||
|
<KEY>^.*(public|protected|private)*.+enum\s+\w+.*</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
* The enum ${name}.\n
|
||||||
|
*/</VALUE>
|
||||||
|
</CLASS>
|
||||||
|
<CLASS>
|
||||||
|
<KEY>^.*(public|protected|private)*.+class\s+\w+.*</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
* The type ${name}.\n
|
||||||
|
<#if element.typeParameters?has_content> * \n
|
||||||
|
</#if>
|
||||||
|
<#list element.typeParameters as typeParameter>
|
||||||
|
* @param <${typeParameter.name}> the type parameter\n
|
||||||
|
</#list>
|
||||||
|
*/</VALUE>
|
||||||
|
</CLASS>
|
||||||
|
<CLASS>
|
||||||
|
<KEY>.+</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
* The type ${name}.\n
|
||||||
|
*/</VALUE>
|
||||||
|
</CLASS>
|
||||||
|
</CLASSES>
|
||||||
|
<CONSTRUCTORS>
|
||||||
|
<CONSTRUCTOR>
|
||||||
|
<KEY>.+</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
* Instantiates a new ${name}.\n
|
||||||
|
<#if element.parameterList.parameters?has_content>
|
||||||
|
*\n
|
||||||
|
</#if>
|
||||||
|
<#list element.parameterList.parameters as parameter>
|
||||||
|
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
||||||
|
</#list>
|
||||||
|
<#if element.throwsList.referenceElements?has_content>
|
||||||
|
*\n
|
||||||
|
</#if>
|
||||||
|
<#list element.throwsList.referenceElements as exception>
|
||||||
|
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
||||||
|
</#list>
|
||||||
|
*/</VALUE>
|
||||||
|
</CONSTRUCTOR>
|
||||||
|
</CONSTRUCTORS>
|
||||||
|
<METHODS>
|
||||||
|
<METHOD>
|
||||||
|
<KEY>^.*(public|protected|private)*\s*.*(\w(\s*<.+>)*)+\s+get\w+\s*\(.*\).+</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
* Gets ${partName}.\n
|
||||||
|
<#if element.typeParameters?has_content> * \n
|
||||||
|
</#if>
|
||||||
|
<#list element.typeParameters as typeParameter>
|
||||||
|
* @param <${typeParameter.name}> the type parameter\n
|
||||||
|
</#list>
|
||||||
|
<#if element.parameterList.parameters?has_content>
|
||||||
|
*\n
|
||||||
|
</#if>
|
||||||
|
<#list element.parameterList.parameters as parameter>
|
||||||
|
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
||||||
|
</#list>
|
||||||
|
<#if isNotVoid>
|
||||||
|
*\n
|
||||||
|
* @return the ${partName}\n
|
||||||
|
</#if>
|
||||||
|
<#if element.throwsList.referenceElements?has_content>
|
||||||
|
*\n
|
||||||
|
</#if>
|
||||||
|
<#list element.throwsList.referenceElements as exception>
|
||||||
|
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
||||||
|
</#list>
|
||||||
|
*/</VALUE>
|
||||||
|
</METHOD>
|
||||||
|
<METHOD>
|
||||||
|
<KEY>^.*(public|protected|private)*\s*.*(void|\w(\s*<.+>)*)+\s+set\w+\s*\(.*\).+</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
* Sets ${partName}.\n
|
||||||
|
<#if element.typeParameters?has_content> * \n
|
||||||
|
</#if>
|
||||||
|
<#list element.typeParameters as typeParameter>
|
||||||
|
* @param <${typeParameter.name}> the type parameter\n
|
||||||
|
</#list>
|
||||||
|
<#if element.parameterList.parameters?has_content>
|
||||||
|
*\n
|
||||||
|
</#if>
|
||||||
|
<#list element.parameterList.parameters as parameter>
|
||||||
|
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
||||||
|
</#list>
|
||||||
|
<#if isNotVoid>
|
||||||
|
*\n
|
||||||
|
* @return the ${partName}\n
|
||||||
|
</#if>
|
||||||
|
<#if element.throwsList.referenceElements?has_content>
|
||||||
|
*\n
|
||||||
|
</#if>
|
||||||
|
<#list element.throwsList.referenceElements as exception>
|
||||||
|
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
||||||
|
</#list>
|
||||||
|
*/</VALUE>
|
||||||
|
</METHOD>
|
||||||
|
<METHOD>
|
||||||
|
<KEY>^.*((public\s+static)|(static\s+public))\s+void\s+main\s*\(\s*String\s*(\[\s*\]|\.\.\.)\s+\w+\s*\).+</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
* The entry point of application.\n
|
||||||
|
|
||||||
|
<#if element.parameterList.parameters?has_content>
|
||||||
|
*\n
|
||||||
|
</#if>
|
||||||
|
* @param ${element.parameterList.parameters[0].name} the input arguments\n
|
||||||
|
<#if element.throwsList.referenceElements?has_content>
|
||||||
|
*\n
|
||||||
|
</#if>
|
||||||
|
<#list element.throwsList.referenceElements as exception>
|
||||||
|
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
||||||
|
</#list>
|
||||||
|
*/</VALUE>
|
||||||
|
</METHOD>
|
||||||
|
<METHOD>
|
||||||
|
<KEY>.+</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
* ${name}<#if isNotVoid> ${return}</#if>.\n
|
||||||
|
<#if element.typeParameters?has_content> * \n
|
||||||
|
</#if>
|
||||||
|
<#list element.typeParameters as typeParameter>
|
||||||
|
* @param <${typeParameter.name}> the type parameter\n
|
||||||
|
</#list>
|
||||||
|
<#if element.parameterList.parameters?has_content>
|
||||||
|
*\n
|
||||||
|
</#if>
|
||||||
|
<#list element.parameterList.parameters as parameter>
|
||||||
|
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
||||||
|
</#list>
|
||||||
|
<#if isNotVoid>
|
||||||
|
*\n
|
||||||
|
* @return the ${return}\n
|
||||||
|
</#if>
|
||||||
|
<#if element.throwsList.referenceElements?has_content>
|
||||||
|
*\n
|
||||||
|
</#if>
|
||||||
|
<#list element.throwsList.referenceElements as exception>
|
||||||
|
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
||||||
|
</#list>
|
||||||
|
*/</VALUE>
|
||||||
|
</METHOD>
|
||||||
|
</METHODS>
|
||||||
|
<FIELDS>
|
||||||
|
<FIELD>
|
||||||
|
<KEY>^.*(public|protected|private)*.+static.*(\w\s\w)+.+</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
* The constant ${element.getName()}.\n
|
||||||
|
*/</VALUE>
|
||||||
|
</FIELD>
|
||||||
|
<FIELD>
|
||||||
|
<KEY>^.*(public|protected|private)*.*(\w\s\w)+.+</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
<#if element.parent.isInterface()>
|
||||||
|
* The constant ${element.getName()}.\n
|
||||||
|
<#else>
|
||||||
|
* The ${name}.\n
|
||||||
|
</#if> */</VALUE>
|
||||||
|
</FIELD>
|
||||||
|
<FIELD>
|
||||||
|
<KEY>.+</KEY>
|
||||||
|
<VALUE>/**\n
|
||||||
|
<#if element.parent.isEnum()>
|
||||||
|
*${name} ${typeName}.\n
|
||||||
|
<#else>
|
||||||
|
* The ${name}.\n
|
||||||
|
</#if>*/</VALUE>
|
||||||
|
</FIELD>
|
||||||
|
</FIELDS>
|
||||||
|
</TEMPLATES>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
20
Datenblatt/.idea/jarRepositories.xml
generated
Normal file
20
Datenblatt/.idea/jarRepositories.xml
generated
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RemoteRepositoriesConfiguration">
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="Central Repository" />
|
||||||
|
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="Maven Central repository" />
|
||||||
|
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="jboss.community" />
|
||||||
|
<option name="name" value="JBoss Community repository" />
|
||||||
|
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||||
|
</remote-repository>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
18
Datenblatt/.idea/libraries/commons_logging_1_2.xml
generated
Normal file
18
Datenblatt/.idea/libraries/commons_logging_1_2.xml
generated
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="commons-logging-1.2">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/../JAR-Libs/commons-logging-1.2.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/../JAR-Libs/fontbox-2.0.27.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/../JAR-Libs/html2pdf-4.0.5.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/../JAR-Libs/itextpdf-5.5.13.2.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/../JAR-Libs/org.eclipse.swt-3.1.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/../JAR-Libs/pdf-renderer.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/../JAR-Libs/pdfbox-2.0.27.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/../JAR-Libs/pdfbox-tools-2.0.27.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/../JAR-Libs/preflight-2.0.27.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/../JAR-Libs/xmpbox-2.0.27.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
11
Datenblatt/.idea/libraries/kenai_nbpwr_sun_pdfview.xml
generated
Normal file
11
Datenblatt/.idea/libraries/kenai_nbpwr_sun_pdfview.xml
generated
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="kenai.nbpwr.sun.pdfview" type="repository">
|
||||||
|
<properties maven-id="com.kenai.nbpwr:com-sun-pdfview:1.0.5-201003191900" />
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/com-sun-pdfview-1.0.5-201003191900.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/pdf-renderer-1.0.5.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
14
Datenblatt/.idea/misc.xml
generated
Normal file
14
Datenblatt/.idea/misc.xml
generated
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
|
<component name="MavenProjectsManager">
|
||||||
|
<option name="originalFiles">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$/pom.xml" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
124
Datenblatt/.idea/uiDesigner.xml
generated
Normal file
124
Datenblatt/.idea/uiDesigner.xml
generated
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Palette2">
|
||||||
|
<group name="Swing">
|
||||||
|
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Button" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="RadioButton" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="CheckBox" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Label" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||||
|
<preferred-size width="-1" height="20" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
</group>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
Datenblatt/.idea/vcs.xml
generated
Normal file
6
Datenblatt/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
BIN
Datenblatt/Datenblatt.pdf
Normal file
BIN
Datenblatt/Datenblatt.pdf
Normal file
Binary file not shown.
BIN
Datenblatt/Datenblatt.png
Normal file
BIN
Datenblatt/Datenblatt.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
13
Datenblatt/TODO.txt
Normal file
13
Datenblatt/TODO.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
TODO:
|
||||||
|
- Vorschau lässt sich nur einmal aktualisieren
|
||||||
|
> kein Dateizugriff
|
||||||
|
- Einzeiligen freien Text hinzufügen
|
||||||
|
> Besonderheiten / Extras (z.B.: Office-Paket)
|
||||||
|
- Displaygrößen angeben
|
||||||
|
- Erkennen, ob bereits eine Instanz läuft, und dann nicht starten, um Fehler zu vermeiden
|
||||||
|
> https://blog.bigbasti.com/prufen-ob-ein-eigenes-programm-bereits-geoffnet-ist/
|
||||||
|
- Benutzerdefinierte Listen:
|
||||||
|
> Datenträgertypen
|
||||||
|
> Dynamische Datenträgergrößen, usw...
|
||||||
|
- Druck in andere Formate
|
||||||
|
> z.B.: A5, A6, 10x15
|
||||||
BIN
Datenblatt/lib/com-sun-pdfview-1.0.5-201003191900.jar
Normal file
BIN
Datenblatt/lib/com-sun-pdfview-1.0.5-201003191900.jar
Normal file
Binary file not shown.
BIN
Datenblatt/lib/pdf-renderer-1.0.5.jar
Normal file
BIN
Datenblatt/lib/pdf-renderer-1.0.5.jar
Normal file
Binary file not shown.
BIN
Datenblatt/logo.png
Normal file
BIN
Datenblatt/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
BIN
Datenblatt/out/artifacts/Datenblatt_jar/Datenblatt.jar
Normal file
BIN
Datenblatt/out/artifacts/Datenblatt_jar/Datenblatt.jar
Normal file
Binary file not shown.
18
Datenblatt/pom.xml
Normal file
18
Datenblatt/pom.xml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>de.dejan_hopp</groupId>
|
||||||
|
<artifactId>Datenblatt</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
||||||
2
Datenblatt/settings.conf
Normal file
2
Datenblatt/settings.conf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
#Tue Feb 14 14:34:42 CET 2023
|
||||||
|
printerName=LAGER
|
||||||
15
Datenblatt/src/main/java/de/dejan_hopp/Datenblatt.java
Normal file
15
Datenblatt/src/main/java/de/dejan_hopp/Datenblatt.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package de.dejan_hopp;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
public class Datenblatt {
|
||||||
|
public static Properties cpu=new Properties();
|
||||||
|
public static Properties gpu=new Properties();
|
||||||
|
public static Properties storage=new Properties();
|
||||||
|
public static Properties memory=new Properties();
|
||||||
|
public static Properties os=new Properties();
|
||||||
|
public static Properties price =new Properties();
|
||||||
|
|
||||||
|
public static int storageAnzahl=1;
|
||||||
|
|
||||||
|
}
|
||||||
149
Datenblatt/src/main/java/de/dejan_hopp/Features.java
Normal file
149
Datenblatt/src/main/java/de/dejan_hopp/Features.java
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
package de.dejan_hopp;
|
||||||
|
|
||||||
|
import de.dejan_hopp.io.Kbd;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
|
||||||
|
public class Features {
|
||||||
|
|
||||||
|
public static void cpu(){
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.println("CPU-Eigenschaften:");
|
||||||
|
System.out.print("Hersteller:");
|
||||||
|
Datenblatt.cpu.setProperty("manufacturer", Kbd.readString());
|
||||||
|
System.out.print("CPU-Name:");
|
||||||
|
Datenblatt.cpu.setProperty("name",Kbd.readString());
|
||||||
|
System.out.print("Anzahl der Kerne:");
|
||||||
|
Datenblatt.cpu.setProperty("cores",Kbd.readString());
|
||||||
|
System.out.print("Anzahl der Threads:");
|
||||||
|
Datenblatt.cpu.setProperty("threads",Kbd.readString());
|
||||||
|
System.out.print("Taktfrequenz in MHz:");
|
||||||
|
Datenblatt.cpu.setProperty("mhz",Kbd.readString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void gpu(){
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.println("Grafik-Eigenschaften:");
|
||||||
|
System.out.print("Hersteller:");
|
||||||
|
Datenblatt.gpu.setProperty("manufacturer",Kbd.readString());
|
||||||
|
System.out.print("GPU-Name:");
|
||||||
|
Datenblatt.gpu.setProperty("name",Kbd.readString());
|
||||||
|
System.out.print("Taktfrequenz in MHz:");
|
||||||
|
Datenblatt.gpu.setProperty("mhz",Kbd.readString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void storage(){
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.println("Datenträger:");
|
||||||
|
System.out.print("Anzahl:");
|
||||||
|
try {
|
||||||
|
Datenblatt.storageAnzahl=Kbd.readInt();
|
||||||
|
}catch (IOException ioe){
|
||||||
|
System.out.println("FEHLER!: Es wurde keine Zahl eingegeben!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Datenblatt.storageAnzahl==1){
|
||||||
|
System.out.print("Datenträgertyp(SSD oder HDD):");
|
||||||
|
Datenblatt.storage.setProperty("drive1Type",Kbd.readString());
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.storage.setProperty("drive1Capacity",Kbd.readString());
|
||||||
|
} else if (Datenblatt.storageAnzahl==2) {
|
||||||
|
//Datenträger 1
|
||||||
|
System.out.print("1. Datenträgertyp(SSD oder HDD):");
|
||||||
|
Datenblatt.storage.setProperty("drive1Type",Kbd.readString());
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.storage.setProperty("drive1Capacity",Kbd.readString());
|
||||||
|
|
||||||
|
//Datenträger 2
|
||||||
|
System.out.print("2. Datenträgertyp(SSD oder HDD):");
|
||||||
|
Datenblatt.storage.setProperty("drive2Type",Kbd.readString());
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.storage.setProperty("drive2Capacity",Kbd.readString());
|
||||||
|
|
||||||
|
} else if (Datenblatt.storageAnzahl==3) {
|
||||||
|
//Datenträger 1
|
||||||
|
System.out.print("1. Datenträgertyp(SSD oder HDD):");
|
||||||
|
Datenblatt.storage.setProperty("drive1Type",Kbd.readString());
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.storage.setProperty("drive1Capacity",Kbd.readString());
|
||||||
|
|
||||||
|
//Datenträger 2
|
||||||
|
System.out.print("2. Datenträgertyp(SSD oder HDD):");
|
||||||
|
Datenblatt.storage.setProperty("drive2Type",Kbd.readString());
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.storage.setProperty("drive2Capacity",Kbd.readString());
|
||||||
|
|
||||||
|
//Datenträger 3
|
||||||
|
System.out.print("3. Datenträgertyp(SSD oder HDD):");
|
||||||
|
Datenblatt.storage.setProperty("drive3Type",Kbd.readString());
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.storage.setProperty("drive3Capacity",Kbd.readString());
|
||||||
|
|
||||||
|
} else if (Datenblatt.storageAnzahl==4) {
|
||||||
|
//Datenträger 1
|
||||||
|
System.out.print("1. Datenträgertyp(SSD oder HDD):");
|
||||||
|
Datenblatt.storage.setProperty("drive1Type",Kbd.readString());
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.storage.setProperty("drive1Capacity",Kbd.readString());
|
||||||
|
|
||||||
|
//Datenträger 2
|
||||||
|
System.out.print("2. Datenträgertyp(SSD oder HDD):");
|
||||||
|
Datenblatt.storage.setProperty("drive2Type",Kbd.readString());
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.storage.setProperty("drive2Capacity",Kbd.readString());
|
||||||
|
|
||||||
|
//Datenträger 3
|
||||||
|
System.out.print("3. Datenträgertyp(SSD oder HDD):");
|
||||||
|
Datenblatt.storage.setProperty("drive3Type",Kbd.readString());
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.storage.setProperty("drive3Capacity",Kbd.readString());
|
||||||
|
|
||||||
|
//Datenträger 4
|
||||||
|
System.out.print("1. Datenträgertyp(SSD oder HDD):");
|
||||||
|
Datenblatt.storage.setProperty("drive4Type",Kbd.readString());
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.storage.setProperty("drive4Capacity",Kbd.readString());
|
||||||
|
|
||||||
|
} else System.out.println("Falsche Eingabe!");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void memory(){
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.println("RAM:");
|
||||||
|
System.out.print("Kapazität in GB:");
|
||||||
|
Datenblatt.memory.setProperty("capacity",Kbd.readString());
|
||||||
|
System.out.print("DDR-Version(\"DDRx\"):");
|
||||||
|
Datenblatt.memory.setProperty("ddrVersion",Kbd.readString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void os(){
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.print("Welches Betreibssystem ist installiert?:");
|
||||||
|
Datenblatt.os.setProperty("name",Kbd.readString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void clearFeatures(){
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.print("Datenblatt zurücksetzen?(y/n)");
|
||||||
|
|
||||||
|
if(Kbd.readString().equals("y")||Kbd.readString().equals("Y")){
|
||||||
|
Datenblatt.cpu.clear();
|
||||||
|
Datenblatt.gpu.clear();
|
||||||
|
Datenblatt.storage.clear();
|
||||||
|
Datenblatt.memory.clear();
|
||||||
|
Datenblatt.os.clear();
|
||||||
|
Datenblatt.price.clear();
|
||||||
|
Datenblatt.storageAnzahl=1;
|
||||||
|
} else System.out.println("Abgebrochen");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setPrice(){
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.print("Wieviel kostet dieser PC/dieses Notebook(in EURO)?: ");
|
||||||
|
Datenblatt.price.setProperty("EUR",Kbd.readString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
542
Datenblatt/src/main/java/de/dejan_hopp/GUI.java
Normal file
542
Datenblatt/src/main/java/de/dejan_hopp/GUI.java
Normal file
@@ -0,0 +1,542 @@
|
|||||||
|
package de.dejan_hopp;
|
||||||
|
|
||||||
|
import de.dejan_hopp.io.Delay;
|
||||||
|
import de.dejan_hopp.io.Print;
|
||||||
|
import de.dejan_hopp.io.pdf2PNG;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class GUI extends javax.swing.JFrame implements ActionListener {
|
||||||
|
|
||||||
|
private static String programVersion="1.0";
|
||||||
|
|
||||||
|
// Menü
|
||||||
|
private JMenuBar menuBar=new JMenuBar();
|
||||||
|
private JMenu menuDatei=new JMenu("Datei"); //Datei-Menü
|
||||||
|
private JMenuItem menuDateiPrint=new JMenuItem("Drucken");
|
||||||
|
private JMenuItem menuDateiReset=new JMenuItem("Zurücksetzen");
|
||||||
|
private JMenuItem menuDateiSettings=new JMenuItem("Einstellungen");
|
||||||
|
private JMenuItem menuDateiAbout=new JMenuItem("Über");
|
||||||
|
private JMenuItem menuDateiClose=new JMenuItem("Schließen");
|
||||||
|
|
||||||
|
// Logo
|
||||||
|
private String logoPfad="logo.png";
|
||||||
|
|
||||||
|
// Tabs mit den einzelnen PC-Komponenten:
|
||||||
|
private JTabbedPane tabPane=new JTabbedPane(JTabbedPane.TOP);
|
||||||
|
private JPanel panelTabCPU=new JPanel(null);
|
||||||
|
private JPanel panelTabGPU=new JPanel(null);
|
||||||
|
private JPanel panelTabStorage=new JPanel(null);
|
||||||
|
private JPanel panelTabMemory=new JPanel(null);
|
||||||
|
private JPanel panelTabOS=new JPanel(null);
|
||||||
|
private JPanel panelTabPrice=new JPanel(null);
|
||||||
|
private JPanel panelTabVorschau=new JPanel(null);
|
||||||
|
|
||||||
|
|
||||||
|
// CPU-Eingabefelder und Beschriftungen:
|
||||||
|
private JLabel labelCPUManufacturer=new JLabel("Hersteller:");
|
||||||
|
private String cpuManufacturerList[]={"AMD", "Intel"};
|
||||||
|
private JComboBox inputComboCPUManufacturer =new JComboBox(cpuManufacturerList);
|
||||||
|
private JLabel labelCPUName=new JLabel("CPU-Name:");
|
||||||
|
private JTextField inputCPUName=new JTextField();
|
||||||
|
private JLabel labelCPUCores=new JLabel("Anzahl der Kerne:");
|
||||||
|
private JTextField inputCPUCores=new JTextField();
|
||||||
|
private JLabel labelCPUThreads=new JLabel("Anzahl der Threads:");
|
||||||
|
private JTextField inputCPUThreads=new JTextField();
|
||||||
|
private JLabel labelCPUFrequency=new JLabel("Frequenz in MHz:");
|
||||||
|
private JTextField inputCPUFrequency=new JTextField();
|
||||||
|
|
||||||
|
|
||||||
|
// GPU-Eingabefelder und Beschriftungen:
|
||||||
|
private JLabel labelGPUManufacturer=new JLabel("Hersteller:");
|
||||||
|
private String gpuManufacturerList[]={"NVIDIA","AMD", "Intel"};
|
||||||
|
private JComboBox inputComboGPUManufacturer =new JComboBox(gpuManufacturerList);
|
||||||
|
private JLabel labelGPUName=new JLabel("GPU-Name:");
|
||||||
|
private JTextField inputGPUName=new JTextField();
|
||||||
|
private JLabel labelGPUFrequency=new JLabel("Frequenz in MHz:");
|
||||||
|
private JTextField inputGPUFrequency=new JTextField();
|
||||||
|
|
||||||
|
|
||||||
|
// Datenträger-Eingabefelder und Beschriftungen:
|
||||||
|
|
||||||
|
private String driveCapacities[]={"120","128","240","250","256","480","500","512","750","1000","1024","2000","3000","4000","5000"};
|
||||||
|
private String driveTypes[]={"SSD","HDD","SSHD"};
|
||||||
|
|
||||||
|
// 1
|
||||||
|
private JLabel labelDrive1=new JLabel("Datenträger 1:");
|
||||||
|
private JLabel labelDrive1Capacity=new JLabel("Kapazität in GB");
|
||||||
|
private JComboBox inputDrive1Capacity=new JComboBox(driveCapacities);
|
||||||
|
private JComboBox inputDrive1Type=new JComboBox(driveTypes);
|
||||||
|
|
||||||
|
// 2
|
||||||
|
private JCheckBox inputDrive2Check=new JCheckBox();
|
||||||
|
private JLabel labelDrive2=new JLabel("Datenträger 2:");
|
||||||
|
private JLabel labelDrive2Capacity=new JLabel("Kapazität in GB");
|
||||||
|
private JComboBox inputDrive2Capacity=new JComboBox(driveCapacities);
|
||||||
|
private JComboBox inputDrive2Type=new JComboBox(driveTypes);
|
||||||
|
|
||||||
|
// 3
|
||||||
|
private JCheckBox inputDrive3Check=new JCheckBox();
|
||||||
|
private JLabel labelDrive3=new JLabel("Datenträger 3:");
|
||||||
|
private JLabel labelDrive3Capacity=new JLabel("Kapazität in GB");
|
||||||
|
private JComboBox inputDrive3Capacity=new JComboBox(driveCapacities);
|
||||||
|
private JComboBox inputDrive3Type=new JComboBox(driveTypes);
|
||||||
|
|
||||||
|
// 4
|
||||||
|
private JCheckBox inputDrive4Check=new JCheckBox();
|
||||||
|
private JLabel labelDrive4=new JLabel("Datenträger 4:");
|
||||||
|
private JLabel labelDrive4Capacity=new JLabel("Kapazität in GB");
|
||||||
|
private JComboBox inputDrive4Capacity=new JComboBox(driveCapacities);
|
||||||
|
private JComboBox inputDrive4Type=new JComboBox(driveTypes);
|
||||||
|
|
||||||
|
|
||||||
|
// RAM-Eingabefelder und Beschriftungen:
|
||||||
|
private JLabel labelRAMVersion=new JLabel("Version:");
|
||||||
|
private String ramVersions[]={"DDR3","DDR4","DDR5"};
|
||||||
|
private JComboBox inputRAMVersion=new JComboBox(ramVersions);
|
||||||
|
private JLabel labelRAMCapacity=new JLabel("Kapazität in GB");
|
||||||
|
private JTextField inputRAMCapacity=new JTextField();
|
||||||
|
|
||||||
|
|
||||||
|
// OS-Eingabefelder und Beschriftungen:
|
||||||
|
private JLabel labelOSName=new JLabel("Betriebssystem:");
|
||||||
|
private JTextField inputOSName=new JTextField();
|
||||||
|
|
||||||
|
|
||||||
|
// Price-Eingabefelder und Beschriftungen:
|
||||||
|
private JLabel labelPrice =new JLabel("Preis in €:");
|
||||||
|
private JTextField inputPrice =new JTextField();
|
||||||
|
|
||||||
|
// Vorschau-Eingabefelder und Beschriftungen:
|
||||||
|
private static JLabel labelVorschau=new JLabel();
|
||||||
|
private JButton buttonVorschau=new JButton("Aktualisieren");
|
||||||
|
|
||||||
|
public GUI(){
|
||||||
|
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
|
setSize(600,400);
|
||||||
|
setResizable(false);
|
||||||
|
setTitle("Computer-Datenblatt-Ersteller Pro");
|
||||||
|
setLocationRelativeTo(null);
|
||||||
|
|
||||||
|
ImageIcon img=new ImageIcon(logoPfad);
|
||||||
|
setIconImage(img.getImage());
|
||||||
|
|
||||||
|
setJMenuBar(menuBar);
|
||||||
|
menuBar.add(menuDatei);
|
||||||
|
|
||||||
|
menuDatei.add(menuDateiPrint);
|
||||||
|
menuDatei.add(menuDateiReset);
|
||||||
|
menuDatei.add(menuDateiSettings);
|
||||||
|
menuDatei.add(menuDateiAbout);
|
||||||
|
menuDatei.add(menuDateiClose);
|
||||||
|
|
||||||
|
menuDatei.setMnemonic('D');
|
||||||
|
menuDateiClose.setMnemonic('S');
|
||||||
|
menuDateiSettings.setMnemonic('E');
|
||||||
|
menuDateiPrint.setMnemonic('D');
|
||||||
|
menuDateiReset.setMnemonic('r');
|
||||||
|
menuDateiAbout.setMnemonic('Ü');
|
||||||
|
|
||||||
|
menuDateiClose.addActionListener(this);
|
||||||
|
menuDateiSettings.addActionListener(this);
|
||||||
|
menuDateiPrint.addActionListener(this);
|
||||||
|
menuDateiReset.addActionListener(this);
|
||||||
|
menuDateiAbout.addActionListener(this);
|
||||||
|
|
||||||
|
KeyStroke keyStrokeMenuPrint=KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_DOWN_MASK);
|
||||||
|
menuDateiPrint.setAccelerator(keyStrokeMenuPrint);
|
||||||
|
|
||||||
|
KeyStroke keyStrokeMenuClose=KeyStroke.getKeyStroke(KeyEvent.VK_F4, KeyEvent.ALT_DOWN_MASK);
|
||||||
|
menuDateiClose.setAccelerator(keyStrokeMenuClose);
|
||||||
|
|
||||||
|
KeyStroke keyStrokeMenuSettings=KeyStroke.getKeyStroke(KeyEvent.VK_COMMA, KeyEvent.CTRL_DOWN_MASK);
|
||||||
|
menuDateiSettings.setAccelerator(keyStrokeMenuSettings);
|
||||||
|
|
||||||
|
KeyStroke keyStrokeMenuReset=KeyStroke.getKeyStroke(KeyEvent.VK_F4, KeyEvent.CTRL_DOWN_MASK);
|
||||||
|
menuDateiReset.setAccelerator(keyStrokeMenuReset);
|
||||||
|
|
||||||
|
KeyStroke keyStrokeMenuAbout=KeyStroke.getKeyStroke(KeyEvent.VK_F1, KeyEvent.CTRL_DOWN_MASK);
|
||||||
|
menuDateiAbout.setAccelerator(keyStrokeMenuAbout);
|
||||||
|
|
||||||
|
add(tabPane);
|
||||||
|
|
||||||
|
tabPane.addTab("CPU", panelTabCPU);
|
||||||
|
tabPane.addTab("Grafik", panelTabGPU);
|
||||||
|
tabPane.addTab("Datenträger", panelTabStorage);
|
||||||
|
tabPane.addTab("RAM", panelTabMemory);
|
||||||
|
tabPane.addTab("Betriebssystem", panelTabOS);
|
||||||
|
tabPane.addTab("Preis", panelTabPrice);
|
||||||
|
tabPane.addTab("Vorschau", panelTabVorschau);
|
||||||
|
|
||||||
|
|
||||||
|
panelTabCPU.setFocusCycleRoot(true);
|
||||||
|
panelTabGPU.setFocusCycleRoot(true);
|
||||||
|
panelTabStorage.setFocusCycleRoot(true);
|
||||||
|
panelTabMemory.setFocusCycleRoot(true);
|
||||||
|
panelTabOS.setFocusCycleRoot(true);
|
||||||
|
panelTabPrice.setFocusCycleRoot(true);
|
||||||
|
|
||||||
|
|
||||||
|
setupTabTraversalKeys(tabPane);
|
||||||
|
|
||||||
|
int labelWidth=120;
|
||||||
|
int labelHeight=15;
|
||||||
|
int labelRow=10;
|
||||||
|
int inputRow=labelWidth+labelRow+2;
|
||||||
|
int addRow2=300;
|
||||||
|
|
||||||
|
// CPU-Eingabefelder und Beschriftungen:
|
||||||
|
panelTabCPU.add(labelCPUManufacturer);
|
||||||
|
labelCPUManufacturer.setBounds(labelRow,10,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabCPU.add(inputComboCPUManufacturer);
|
||||||
|
inputComboCPUManufacturer.setBounds(inputRow,6,100,20);
|
||||||
|
|
||||||
|
panelTabCPU.add(labelCPUName);
|
||||||
|
labelCPUName.setBounds(labelRow,30,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabCPU.add(inputCPUName);
|
||||||
|
inputCPUName.setBounds(inputRow,27,100,20);
|
||||||
|
|
||||||
|
panelTabCPU.add(labelCPUCores);
|
||||||
|
labelCPUCores.setBounds(labelRow,50,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabCPU.add(inputCPUCores);
|
||||||
|
inputCPUCores.setBounds(inputRow,47,30,20);
|
||||||
|
|
||||||
|
panelTabCPU.add(labelCPUThreads);
|
||||||
|
labelCPUThreads.setBounds(labelRow,70,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabCPU.add(inputCPUThreads);
|
||||||
|
inputCPUThreads.setBounds(inputRow,67,30,20);
|
||||||
|
|
||||||
|
panelTabCPU.add(labelCPUFrequency);
|
||||||
|
labelCPUFrequency.setBounds(labelRow,90,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabCPU.add(inputCPUFrequency);
|
||||||
|
inputCPUFrequency.setBounds(inputRow,87,50,20);
|
||||||
|
|
||||||
|
// GPU-Eingabefelder und Beschriftungen:
|
||||||
|
panelTabGPU.add(labelGPUManufacturer);
|
||||||
|
labelGPUManufacturer.setBounds(labelRow,10,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabGPU.add(inputComboGPUManufacturer);
|
||||||
|
inputComboGPUManufacturer.setBounds(inputRow,6,100,20);
|
||||||
|
|
||||||
|
panelTabGPU.add(labelGPUName);
|
||||||
|
labelGPUName.setBounds(labelRow,30,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabGPU.add(inputGPUName);
|
||||||
|
inputGPUName.setBounds(inputRow,27,100,20);
|
||||||
|
|
||||||
|
panelTabGPU.add(labelGPUFrequency);
|
||||||
|
labelGPUFrequency.setBounds(labelRow,50,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabGPU.add(inputGPUFrequency);
|
||||||
|
inputGPUFrequency.setBounds(inputRow,47,50,20);
|
||||||
|
|
||||||
|
|
||||||
|
// Datenträger-Eingabefelder und Beschriftungen:
|
||||||
|
|
||||||
|
inputDrive2Check.addActionListener(this);
|
||||||
|
inputDrive3Check.addActionListener(this);
|
||||||
|
inputDrive4Check.addActionListener(this);
|
||||||
|
buttonVorschau.addActionListener(this);
|
||||||
|
|
||||||
|
inputDrive3Check.setEnabled(false);
|
||||||
|
inputDrive4Check.setEnabled(false);
|
||||||
|
|
||||||
|
// 1
|
||||||
|
panelTabStorage.add(labelDrive1);
|
||||||
|
labelDrive1.setBounds(labelRow+50,10,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabStorage.add(labelDrive1Capacity);
|
||||||
|
labelDrive1Capacity.setBounds(labelRow,30,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive1Capacity);
|
||||||
|
inputDrive1Capacity.setBounds(inputRow-30,27,100,20);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive1Type);
|
||||||
|
inputDrive1Type.setBounds(inputRow-30,48,60,20);
|
||||||
|
|
||||||
|
// 2
|
||||||
|
panelTabStorage.add(labelDrive2);
|
||||||
|
labelDrive2.setBounds(labelRow+50,100,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive2Check);
|
||||||
|
inputDrive2Check.setBounds(labelRow+180,95,20,20);
|
||||||
|
|
||||||
|
panelTabStorage.add(labelDrive2Capacity);
|
||||||
|
labelDrive2Capacity.setBounds(labelRow,120,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive2Capacity);
|
||||||
|
inputDrive2Capacity.setBounds(inputRow-30,120,100,20);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive2Type);
|
||||||
|
inputDrive2Type.setBounds(inputRow-30,141,60,20);
|
||||||
|
|
||||||
|
// 3
|
||||||
|
panelTabStorage.add(labelDrive3);
|
||||||
|
labelDrive3.setBounds(labelRow+50+addRow2,10,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive3Check);
|
||||||
|
inputDrive3Check.setBounds(labelRow+180+addRow2,5,20,20);
|
||||||
|
|
||||||
|
panelTabStorage.add(labelDrive3Capacity);
|
||||||
|
labelDrive3Capacity.setBounds(labelRow+addRow2,27,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive3Capacity);
|
||||||
|
inputDrive3Capacity.setBounds(inputRow-30+addRow2,27,100,20);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive3Type);
|
||||||
|
inputDrive3Type.setBounds(inputRow-30+addRow2,48,60,20);
|
||||||
|
|
||||||
|
// 4
|
||||||
|
panelTabStorage.add(labelDrive4);
|
||||||
|
labelDrive4.setBounds(labelRow+50+addRow2,100,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive4Check);
|
||||||
|
inputDrive4Check.setBounds(labelRow+180+addRow2,95,20,20);
|
||||||
|
|
||||||
|
panelTabStorage.add(labelDrive4Capacity);
|
||||||
|
labelDrive4Capacity.setBounds(labelRow+addRow2,120,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive4Capacity);
|
||||||
|
inputDrive4Capacity.setBounds(inputRow-30+addRow2,120,100,20);
|
||||||
|
|
||||||
|
panelTabStorage.add(inputDrive4Type);
|
||||||
|
inputDrive4Type.setBounds(inputRow-30+addRow2,141,60,20);
|
||||||
|
|
||||||
|
|
||||||
|
// RAM-Eingabefelder und Beschriftungen:
|
||||||
|
panelTabMemory.add(labelRAMVersion);
|
||||||
|
labelRAMVersion.setBounds(labelRow,10,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabMemory.add(inputRAMVersion);
|
||||||
|
inputRAMVersion.setBounds(inputRow,6,100,20);
|
||||||
|
|
||||||
|
panelTabMemory.add(labelRAMCapacity);
|
||||||
|
labelRAMCapacity.setBounds(labelRow,30,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabMemory.add(inputRAMCapacity);
|
||||||
|
inputRAMCapacity.setBounds(inputRow,27,30,20);
|
||||||
|
|
||||||
|
// OS-Eingabefelder und Beschriftungen:
|
||||||
|
panelTabOS.add(labelOSName);
|
||||||
|
labelOSName.setBounds(labelRow,10,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabOS.add(inputOSName);
|
||||||
|
inputOSName.setBounds(inputRow,6,200,20);
|
||||||
|
|
||||||
|
//Price-Eingabefelder und Beschriftungen:
|
||||||
|
panelTabPrice.add(labelPrice);
|
||||||
|
labelPrice.setBounds(labelRow,10,labelWidth,labelHeight);
|
||||||
|
|
||||||
|
panelTabPrice.add(inputPrice);
|
||||||
|
inputPrice.setBounds(inputRow-45,6,50,20);
|
||||||
|
|
||||||
|
// Vorschau-Eingabefelder und Beschriftungen:
|
||||||
|
panelTabVorschau.add(buttonVorschau);
|
||||||
|
buttonVorschau.setMnemonic('A');
|
||||||
|
buttonVorschau.setBounds(labelRow,10,labelWidth-5,labelHeight+10);
|
||||||
|
|
||||||
|
panelTabVorschau.add(labelVorschau);
|
||||||
|
labelVorschau.setBounds(150,5,300,300);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (e.getSource()==menuDateiClose){
|
||||||
|
dispose();
|
||||||
|
} else if (e.getSource()==menuDateiSettings) {
|
||||||
|
System.out.println("Einstellungsfenster ploppt auf...");
|
||||||
|
new SettingsWindow(this).setVisible(true);
|
||||||
|
} else if (e.getSource()==menuDateiPrint) {
|
||||||
|
inputToProperty();
|
||||||
|
Print.createPDF();
|
||||||
|
Print.toPrint(false, this);
|
||||||
|
} else if (e.getSource()==menuDateiReset) {
|
||||||
|
clearFeatures();
|
||||||
|
} else if (e.getSource()==menuDateiAbout) {
|
||||||
|
System.out.println("Ein Fenster öffnet sich, in dem angezeigt wird, von wem das Programm ist...");
|
||||||
|
aboutDialog(this);
|
||||||
|
} else if (e.getSource()==inputDrive2Check) {
|
||||||
|
if (inputDrive2Check.isSelected()){
|
||||||
|
inputDrive3Check.setEnabled(true);
|
||||||
|
inputDrive3Check.setSelected(false);
|
||||||
|
|
||||||
|
inputDrive4Check.setEnabled(false);
|
||||||
|
inputDrive4Check.setSelected(false);
|
||||||
|
} else {
|
||||||
|
inputDrive3Check.setEnabled(false);
|
||||||
|
inputDrive3Check.setSelected(false);
|
||||||
|
|
||||||
|
inputDrive4Check.setEnabled(false);
|
||||||
|
inputDrive4Check.setSelected(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (e.getSource()==inputDrive3Check) {
|
||||||
|
if (inputDrive3Check.isSelected()){
|
||||||
|
inputDrive4Check.setEnabled(true);
|
||||||
|
inputDrive4Check.setSelected(false);
|
||||||
|
} else {
|
||||||
|
inputDrive4Check.setEnabled(false);
|
||||||
|
inputDrive4Check.setSelected(false);
|
||||||
|
}
|
||||||
|
} else if (e.getSource()==buttonVorschau) {
|
||||||
|
view();
|
||||||
|
Print.printerList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void view(){
|
||||||
|
inputToProperty();
|
||||||
|
Print.createPDF();
|
||||||
|
Delay.delay(100);
|
||||||
|
pdf2PNG.convert();
|
||||||
|
|
||||||
|
BufferedImage img=null;
|
||||||
|
try {
|
||||||
|
img=ImageIO.read(new File("Datenblatt.png"));
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("Fehler");
|
||||||
|
}
|
||||||
|
Image image= img.getScaledInstance(labelVorschau.getWidth(), labelVorschau.getHeight(), Image.SCALE_SMOOTH);
|
||||||
|
labelVorschau.setIcon(new ImageIcon(image));
|
||||||
|
labelVorschau.setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
|
||||||
|
|
||||||
|
File x=new File("Datenblatt.pdf");
|
||||||
|
File y=new File("Datenblatt.png");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void aboutDialog(JFrame positionParent) {
|
||||||
|
JLabel aboutLabel=new JLabel("<html><center>Datenblatt-Ersteller<br>für PCs und Notebooks<br><br>Version: " + programVersion + "<br><br>Programmiert von<br>Dejan Hopp<br>\u00a92023");
|
||||||
|
aboutLabel.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
JOptionPane.showMessageDialog(positionParent, aboutLabel, "Über", JOptionPane.PLAIN_MESSAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Inhalte der Textfelder in die Properties schreiben
|
||||||
|
public void inputToProperty(){
|
||||||
|
Datenblatt.cpu.setProperty("manufacturer", inputComboCPUManufacturer.getSelectedItem().toString());
|
||||||
|
Datenblatt.cpu.setProperty("name", inputCPUName.getText());
|
||||||
|
Datenblatt.cpu.setProperty("cores", inputCPUCores.getText());
|
||||||
|
Datenblatt.cpu.setProperty("threads", inputCPUThreads.getText());
|
||||||
|
Datenblatt.cpu.setProperty("mhz", inputCPUFrequency.getText());
|
||||||
|
|
||||||
|
Datenblatt.gpu.setProperty("manufacturer", inputComboGPUManufacturer.getSelectedItem().toString());
|
||||||
|
Datenblatt.gpu.setProperty("name", inputGPUName.getText());
|
||||||
|
Datenblatt.gpu.setProperty("mhz", inputGPUFrequency.getText());
|
||||||
|
|
||||||
|
Datenblatt.storage.setProperty("drive1Type", inputDrive1Type.getSelectedItem().toString());
|
||||||
|
Datenblatt.storage.setProperty("drive1Capacity", inputDrive1Capacity.getSelectedItem().toString());
|
||||||
|
|
||||||
|
if (inputDrive2Check.isSelected()){
|
||||||
|
Datenblatt.storageAnzahl=2;
|
||||||
|
}
|
||||||
|
if (inputDrive3Check.isSelected()){
|
||||||
|
Datenblatt.storageAnzahl=3;
|
||||||
|
}
|
||||||
|
if (inputDrive4Check.isSelected()){
|
||||||
|
Datenblatt.storageAnzahl=4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inputDrive2Check.isSelected()){
|
||||||
|
Datenblatt.storage.setProperty("drive2Type", inputDrive2Type.getSelectedItem().toString());
|
||||||
|
Datenblatt.storage.setProperty("drive2Capacity", inputDrive2Capacity.getSelectedItem().toString());
|
||||||
|
}
|
||||||
|
if (inputDrive3Check.isSelected()){
|
||||||
|
Datenblatt.storage.setProperty("drive3Type", inputDrive3Type.getSelectedItem().toString());
|
||||||
|
Datenblatt.storage.setProperty("drive3Capacity", inputDrive3Capacity.getSelectedItem().toString());
|
||||||
|
}
|
||||||
|
if (inputDrive4Check.isSelected()){
|
||||||
|
Datenblatt.storage.setProperty("drive4Type", inputDrive4Type.getSelectedItem().toString());
|
||||||
|
Datenblatt.storage.setProperty("drive4Capacity", inputDrive4Capacity.getSelectedItem().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
Datenblatt.memory.setProperty("ddrVersion", inputRAMVersion.getSelectedItem().toString());
|
||||||
|
Datenblatt.memory.setProperty("capacity", inputRAMCapacity.getText());
|
||||||
|
|
||||||
|
Datenblatt.os.setProperty("name", inputOSName.getText());
|
||||||
|
|
||||||
|
Datenblatt.price.setProperty("EUR", inputPrice.getText());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Folgende Funktion wurde von https://www.davidc.net/programming/java/how-make-ctrl-tab-switch-tabs-jtabbedpane kopiert:
|
||||||
|
// Die Funktion sorgt dafür, dass man mit STRG+Tab und STRG+Shift+Tab durch die Tabs Navigieren kann.
|
||||||
|
private void setupTabTraversalKeys(JTabbedPane tabbedPane)
|
||||||
|
{
|
||||||
|
KeyStroke ctrlTab = KeyStroke.getKeyStroke("ctrl TAB");
|
||||||
|
KeyStroke ctrlShiftTab = KeyStroke.getKeyStroke("ctrl shift TAB");
|
||||||
|
|
||||||
|
// Remove ctrl-tab from normal focus traversal
|
||||||
|
Set<AWTKeyStroke> forwardKeys = new HashSet<AWTKeyStroke>(tabbedPane.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
|
||||||
|
forwardKeys.remove(ctrlTab);
|
||||||
|
tabbedPane.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);
|
||||||
|
|
||||||
|
// Remove ctrl-shift-tab from normal focus traversal
|
||||||
|
Set<AWTKeyStroke> backwardKeys = new HashSet<AWTKeyStroke>(tabbedPane.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
|
||||||
|
backwardKeys.remove(ctrlShiftTab);
|
||||||
|
tabbedPane.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backwardKeys);
|
||||||
|
|
||||||
|
// Add keys to the tab's input map
|
||||||
|
InputMap inputMap = tabbedPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
|
||||||
|
inputMap.put(ctrlTab, "navigateNext");
|
||||||
|
inputMap.put(ctrlShiftTab, "navigatePrevious");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearFeatures(){
|
||||||
|
// Features aus Properties löschen:
|
||||||
|
Datenblatt.cpu.clear();
|
||||||
|
Datenblatt.gpu.clear();
|
||||||
|
Datenblatt.storage.clear();
|
||||||
|
Datenblatt.memory.clear();
|
||||||
|
Datenblatt.os.clear();
|
||||||
|
Datenblatt.price.clear();
|
||||||
|
|
||||||
|
Datenblatt.storageAnzahl=1;
|
||||||
|
|
||||||
|
// Features aus Textfeldern löschen:
|
||||||
|
inputCPUName.setText("");
|
||||||
|
inputCPUCores.setText("");
|
||||||
|
inputCPUThreads.setText("");
|
||||||
|
inputCPUFrequency.setText("");
|
||||||
|
|
||||||
|
inputGPUName.setText("");
|
||||||
|
inputGPUFrequency.setText("");
|
||||||
|
|
||||||
|
inputDrive2Check.setSelected(false);
|
||||||
|
inputDrive3Check.setSelected(false);
|
||||||
|
inputDrive4Check.setSelected(false);
|
||||||
|
|
||||||
|
inputDrive3Check.setEnabled(false);
|
||||||
|
inputDrive4Check.setEnabled(false);
|
||||||
|
|
||||||
|
inputRAMCapacity.setText("");
|
||||||
|
|
||||||
|
inputOSName.setText("");
|
||||||
|
|
||||||
|
inputPrice.setText("");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dispose(){
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
130
Datenblatt/src/main/java/de/dejan_hopp/Main.java
Normal file
130
Datenblatt/src/main/java/de/dejan_hopp/Main.java
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
package de.dejan_hopp;
|
||||||
|
|
||||||
|
import de.dejan_hopp.io.*;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
try{
|
||||||
|
if (args[0].equals("nogui")){
|
||||||
|
System.out.println("Programm ohne GUI gestartet");
|
||||||
|
} else {
|
||||||
|
System.out.println("FEHLER: Kein gültiger Startparameter!");
|
||||||
|
}
|
||||||
|
} catch(ArrayIndexOutOfBoundsException aioE){
|
||||||
|
System.out.println("Programm ohne Startparameter gestartet");
|
||||||
|
new GUI().setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println(" Datenblatt-Editor");
|
||||||
|
System.out.println("<#################>\n");
|
||||||
|
|
||||||
|
while(true){
|
||||||
|
//Menu
|
||||||
|
System.out.println("Menü:");
|
||||||
|
System.out.println("[1]Datenblatt erstellen ]");
|
||||||
|
System.out.println("[2]Datenblatt bearbeiten]");
|
||||||
|
System.out.println("[3]Drucken ]");
|
||||||
|
System.out.println("[4]Datenblatt anzeigen ]");
|
||||||
|
System.out.println("[5]Beenden ]");
|
||||||
|
System.out.print(">");
|
||||||
|
|
||||||
|
int in=0;
|
||||||
|
try {
|
||||||
|
in=Integer.parseInt(Kbd.readString());
|
||||||
|
if (in<1||in>5) throw new Exception();
|
||||||
|
} catch(Exception e) {
|
||||||
|
System.out.println("Bitte eine Zahl von 1-5 eingeben");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
switch (in) {
|
||||||
|
case 1: create(); break;
|
||||||
|
case 2: edit(); break;
|
||||||
|
case 3: Print.createPDF();Print.toPrint(true,null); break;
|
||||||
|
case 4: show(); break;
|
||||||
|
case 5: exit(); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void create(){
|
||||||
|
System.out.println("\n\nFeature hinzufügen:");
|
||||||
|
System.out.println("[1]CPU ]");
|
||||||
|
System.out.println("[2]Grafik ]");
|
||||||
|
System.out.println("[3]Datenträger ]");
|
||||||
|
System.out.println("[4]RAM ]");
|
||||||
|
System.out.println("[5]Betriebssystem]");
|
||||||
|
System.out.println("[6]Preis ]");
|
||||||
|
System.out.println("[7]RESET ]");
|
||||||
|
System.out.print(">");
|
||||||
|
|
||||||
|
int in=0;
|
||||||
|
try {
|
||||||
|
in=Integer.parseInt(Kbd.readString());
|
||||||
|
if (in<1||in>5) throw new Exception();
|
||||||
|
} catch(Exception e) {
|
||||||
|
System.out.println("Bitte eine Zahl von 1-5 eingeben");
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
switch (in){
|
||||||
|
case 1: Features.cpu(); break;
|
||||||
|
case 2: Features.gpu(); break;
|
||||||
|
case 3: Features.storage(); break;
|
||||||
|
case 4: Features.memory(); break;
|
||||||
|
case 5: Features.os(); break;
|
||||||
|
case 6: Features.setPrice(); break;
|
||||||
|
case 7: Features.clearFeatures(); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void edit(){
|
||||||
|
System.out.println("\n\nFeature bearbeiten:");
|
||||||
|
System.out.println("[1]CPU ]");
|
||||||
|
System.out.println("[2]Grafik ]");
|
||||||
|
System.out.println("[3]Datenträger ]");
|
||||||
|
System.out.println("[4]RAM ]");
|
||||||
|
System.out.println("[5]Betriebssystem]");
|
||||||
|
System.out.println("[6]Preis ]");
|
||||||
|
System.out.println("[7]RESET ]");
|
||||||
|
System.out.print(">");
|
||||||
|
|
||||||
|
int in=0;
|
||||||
|
try {
|
||||||
|
in=Integer.parseInt(Kbd.readString());
|
||||||
|
if (in<1||in>5) throw new Exception();
|
||||||
|
} catch(Exception e) {
|
||||||
|
System.out.println("Bitte eine Zahl von 1-5 eingeben");
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
switch (in){
|
||||||
|
case 1: Features.cpu(); break;
|
||||||
|
case 2: Features.gpu(); break;
|
||||||
|
case 3: Features.storage(); break;
|
||||||
|
case 4: Features.memory(); break;
|
||||||
|
case 5: Features.os(); break;
|
||||||
|
case 6: Features.setPrice(); break;
|
||||||
|
case 7: Features.clearFeatures(); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void show(){
|
||||||
|
DisplayConsole.show(Datenblatt.cpu, Datenblatt.gpu, Datenblatt.storage, Datenblatt.memory, Datenblatt.os, Datenblatt.price);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void exit(){
|
||||||
|
System.out.println("Beenden...");
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
58
Datenblatt/src/main/java/de/dejan_hopp/SettingsWindow.java
Normal file
58
Datenblatt/src/main/java/de/dejan_hopp/SettingsWindow.java
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
package de.dejan_hopp;
|
||||||
|
|
||||||
|
import de.dejan_hopp.io.Print;
|
||||||
|
import de.dejan_hopp.io.RWConfigFile;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
public class SettingsWindow extends JDialog implements ActionListener {
|
||||||
|
private JComboBox inputPrinterList=new JComboBox(Print.printerList());
|
||||||
|
private JLabel labelPrinterSelect=new JLabel("Drucker:");
|
||||||
|
private JButton buttonSave=new JButton("Speichern");
|
||||||
|
private JButton buttonCancle=new JButton("Abbrechen");
|
||||||
|
|
||||||
|
public SettingsWindow(JFrame frame){
|
||||||
|
setLocationRelativeTo(frame);
|
||||||
|
setTitle("Einstellungen");
|
||||||
|
setLayout(null);
|
||||||
|
setModal(true);
|
||||||
|
setSize(400,300);
|
||||||
|
|
||||||
|
buttonSave.addActionListener(this);
|
||||||
|
buttonCancle.addActionListener(this);
|
||||||
|
|
||||||
|
|
||||||
|
// logo
|
||||||
|
Image img = new ImageIcon("logo.png").getImage();
|
||||||
|
setIconImage(img);
|
||||||
|
|
||||||
|
add(labelPrinterSelect).setBounds(5,10,70,20);
|
||||||
|
labelPrinterSelect.setDisplayedMnemonic('D');
|
||||||
|
labelPrinterSelect.setLabelFor(inputPrinterList);
|
||||||
|
|
||||||
|
add(inputPrinterList).setBounds(80,10,250,20);
|
||||||
|
inputPrinterList.setSelectedItem(RWConfigFile.getPrinterName());
|
||||||
|
|
||||||
|
add(buttonCancle).setBounds(5,230,110,30);
|
||||||
|
buttonCancle.setMnemonic('A');
|
||||||
|
|
||||||
|
add(buttonSave).setBounds(120,230,110,30);
|
||||||
|
buttonSave.setMnemonic('S');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (e.getSource()==buttonSave){
|
||||||
|
System.out.println("Speichern und Einstellungsfenster schließen");
|
||||||
|
RWConfigFile.setPrinter(inputPrinterList.getSelectedItem().toString());
|
||||||
|
dispose();
|
||||||
|
} else if (e.getSource()==buttonCancle) {
|
||||||
|
System.out.println("Abbrechen und Einstellungsfenster schließen");
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
14
Datenblatt/src/main/java/de/dejan_hopp/io/Delay.java
Normal file
14
Datenblatt/src/main/java/de/dejan_hopp/io/Delay.java
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package de.dejan_hopp.io;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public class Delay {
|
||||||
|
|
||||||
|
//https://javabeginners.de/Grundlagen/Zeitsteuerung_ohne_Threads.php#:~:text=Nach%20jedem%20Durchlauf%20wird%20die,der%20aktuellen%20Unix%2DZeit%20beginnt.
|
||||||
|
public static void delay(int milliseconds){
|
||||||
|
long ende=(new Date()).getTime() + milliseconds;
|
||||||
|
while ((new Date()).getTime() < ende){
|
||||||
|
// abwarten und Tee trinken
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
package de.dejan_hopp.io;
|
||||||
|
|
||||||
|
import de.dejan_hopp.Datenblatt;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
public class DisplayConsole {
|
||||||
|
public static void show(Properties cpu, Properties gpu, Properties storage, Properties memory, Properties os, Properties price){
|
||||||
|
System.out.println("Prozessor:");
|
||||||
|
System.out.println("+"+cpu.getProperty("manufacturer"));
|
||||||
|
System.out.println("+"+cpu.getProperty("name"));
|
||||||
|
System.out.println("+"+cpu.getProperty("cores")+" Kerne - "+cpu.getProperty("threads")+" Threads");
|
||||||
|
System.out.println("+"+cpu.getProperty("mhr")+" MHz");
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.println("Grafik:");
|
||||||
|
System.out.println("+"+gpu.getProperty("manufacturer"));
|
||||||
|
System.out.println("+"+gpu.getProperty("name"));
|
||||||
|
System.out.println("+"+gpu.getProperty("mhz")+" MHz");
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.println("Datenträger:");
|
||||||
|
|
||||||
|
if(Datenblatt.storageAnzahl==1){
|
||||||
|
System.out.print("Datenträger 1:");
|
||||||
|
System.out.println(storage.getProperty("drive1Capacity")+" GB "+storage.getProperty("drive1Type"));
|
||||||
|
} else if (Datenblatt.storageAnzahl==2) {
|
||||||
|
//Datenträger 1
|
||||||
|
System.out.print("Datenträger 1:");
|
||||||
|
System.out.println(storage.getProperty("drive1Capacity")+" GB "+storage.getProperty("drive1Type"));
|
||||||
|
|
||||||
|
//Datenträger 2
|
||||||
|
System.out.print("Datenträger 2:");
|
||||||
|
System.out.println(storage.getProperty("drive2Capacity")+" GB "+storage.getProperty("drive2Type"));
|
||||||
|
|
||||||
|
} else if (Datenblatt.storageAnzahl==3) {
|
||||||
|
//Datenträger 1
|
||||||
|
System.out.print("Datenträger 1:");
|
||||||
|
System.out.println(storage.getProperty("drive1Capacity")+" GB "+storage.getProperty("drive1Type"));
|
||||||
|
|
||||||
|
//Datenträger 2
|
||||||
|
System.out.print("Datenträger 2:");
|
||||||
|
System.out.println(storage.getProperty("drive2Capacity")+" GB "+storage.getProperty("drive2Type"));
|
||||||
|
|
||||||
|
//Datenträger 3
|
||||||
|
System.out.print("Datenträger 3:");
|
||||||
|
System.out.println(storage.getProperty("drive3Capacity")+" GB "+storage.getProperty("drive3Type"));
|
||||||
|
|
||||||
|
} else if (Datenblatt.storageAnzahl==4) {
|
||||||
|
//Datenträger 1
|
||||||
|
System.out.print("Datenträger 1:");
|
||||||
|
System.out.println(storage.getProperty("drive1Capacity")+" GB "+storage.getProperty("drive1Type"));
|
||||||
|
|
||||||
|
//Datenträger 2
|
||||||
|
System.out.print("Datenträger 2:");
|
||||||
|
System.out.println(storage.getProperty("drive2Capacity")+" GB "+storage.getProperty("drive2Type"));
|
||||||
|
|
||||||
|
//Datenträger 3
|
||||||
|
System.out.print("Datenträger 3:");
|
||||||
|
System.out.println(storage.getProperty("drive3Capacity")+" GB "+storage.getProperty("drive3Type"));
|
||||||
|
|
||||||
|
//Datenträger 4
|
||||||
|
System.out.print("Datenträger 4:");
|
||||||
|
System.out.println(storage.getProperty("drive4Capacity")+" GB "+storage.getProperty("drive4Type"));
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.println("Arbeitsspeicher:");
|
||||||
|
System.out.println("+"+memory.getProperty("capacity")+" GB "+memory.getProperty("ddrVersion"));
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.println("Betriebssystem:");
|
||||||
|
System.out.println(os.getProperty("name"));
|
||||||
|
System.out.println("--------------------");
|
||||||
|
System.out.println("Preis:");
|
||||||
|
System.out.println(price.getProperty("EUR"));
|
||||||
|
System.out.println("--------------------\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
23
Datenblatt/src/main/java/de/dejan_hopp/io/Kbd.java
Normal file
23
Datenblatt/src/main/java/de/dejan_hopp/io/Kbd.java
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package de.dejan_hopp.io;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
|
public class Kbd {
|
||||||
|
public static String readString(){
|
||||||
|
try {
|
||||||
|
BufferedReader r=new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
return r.readLine();
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
System.out.println(ioe);
|
||||||
|
return "FEHLER BEIM EINLESEN!";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int readInt() throws IOException{
|
||||||
|
BufferedReader r=new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
return Integer.parseInt(r.readLine());
|
||||||
|
}
|
||||||
|
}
|
||||||
257
Datenblatt/src/main/java/de/dejan_hopp/io/Print.java
Normal file
257
Datenblatt/src/main/java/de/dejan_hopp/io/Print.java
Normal file
@@ -0,0 +1,257 @@
|
|||||||
|
package de.dejan_hopp.io;
|
||||||
|
|
||||||
|
import com.itextpdf.text.Document;
|
||||||
|
import com.itextpdf.text.Font;
|
||||||
|
import com.itextpdf.text.Phrase;
|
||||||
|
import com.itextpdf.text.Rectangle;
|
||||||
|
import com.itextpdf.text.pdf.*;
|
||||||
|
import de.dejan_hopp.Datenblatt;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
|
import org.apache.pdfbox.printing.PDFPageable;
|
||||||
|
|
||||||
|
import javax.print.PrintService;
|
||||||
|
import javax.print.PrintServiceLookup;
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.print.PrinterException;
|
||||||
|
import java.awt.print.PrinterJob;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
|
||||||
|
public class Print {
|
||||||
|
|
||||||
|
private static final String pdfPathName ="Datenblatt.pdf";
|
||||||
|
public static void createPDF(){
|
||||||
|
System.out.println("Erstelle PDF-Datei...");
|
||||||
|
File file = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Document doc=new Document();
|
||||||
|
file=new File(pdfPathName);
|
||||||
|
PdfWriter writer=PdfWriter.getInstance(doc, Files.newOutputStream(file.toPath()));
|
||||||
|
|
||||||
|
Rectangle etikett = new Rectangle(228,228); // entspricht 8cm x 8cm
|
||||||
|
|
||||||
|
doc.setPageSize(etikett);
|
||||||
|
doc.setMargins(0,0,40,10);
|
||||||
|
|
||||||
|
doc.open();
|
||||||
|
|
||||||
|
PdfContentByte cb=writer.getDirectContent();
|
||||||
|
BaseFont bf= BaseFont.createFont(BaseFont.HELVETICA_BOLD,BaseFont.CP1250,true);
|
||||||
|
BaseFont bf2= BaseFont.createFont(BaseFont.HELVETICA_BOLDOBLIQUE,BaseFont.CP1250,true);
|
||||||
|
|
||||||
|
cb.beginText();
|
||||||
|
cb.setFontAndSize(bf, 20);
|
||||||
|
cb.moveText(50,210);
|
||||||
|
cb.showText("Überschrift");
|
||||||
|
cb.endText();
|
||||||
|
|
||||||
|
cb.beginText();
|
||||||
|
cb.setFontAndSize(bf, 12);
|
||||||
|
cb.moveText(85,190);
|
||||||
|
cb.showText("Datenblatt:");
|
||||||
|
cb.endText();
|
||||||
|
|
||||||
|
cb.beginText();
|
||||||
|
cb.setFontAndSize(bf, 12);
|
||||||
|
cb.moveText(145,5);
|
||||||
|
cb.showText("Preis: "+Datenblatt.price.get("EUR").toString()+"€");
|
||||||
|
cb.endText();
|
||||||
|
|
||||||
|
cb.beginText();
|
||||||
|
cb.setFontAndSize(bf, 12);
|
||||||
|
cb.moveText(10,5);
|
||||||
|
cb.showText("Inkl. Windows");
|
||||||
|
cb.endText();
|
||||||
|
|
||||||
|
Font tableFont = new Font(Font.FontFamily.HELVETICA,9, Font.BOLDITALIC);
|
||||||
|
Font tableFontHead = new Font(Font.FontFamily.HELVETICA,9, Font.BOLD);
|
||||||
|
|
||||||
|
|
||||||
|
PdfPTable tabelleCPU=new PdfPTable(1);
|
||||||
|
|
||||||
|
int tableWidth=100;
|
||||||
|
|
||||||
|
tabelleCPU.setTotalWidth(tableWidth);
|
||||||
|
tabelleCPU.setLockedWidth(true);
|
||||||
|
tabelleCPU.addCell(new PdfPCell(new Phrase("Prozessor:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleCPU.addCell(new PdfPCell(new Phrase(Datenblatt.cpu.getProperty("manufacturer"),tableFont))).setBorderWidth(1);
|
||||||
|
tabelleCPU.addCell(new PdfPCell(new Phrase(Datenblatt.cpu.getProperty("name") +" ",tableFont))).setBorderWidth(1);
|
||||||
|
tabelleCPU.addCell(new PdfPCell(new Phrase(Datenblatt.cpu.getProperty("cores") +" Kerne - "+ Datenblatt.cpu.getProperty("threads") +" Threads",tableFont))).setBorderWidth(1);
|
||||||
|
tabelleCPU.addCell(new PdfPCell(new Phrase(Datenblatt.cpu.getProperty("mhz") +" MHz",tableFont))).setBorderWidth(1);
|
||||||
|
tabelleCPU.setHeaderRows(1);
|
||||||
|
|
||||||
|
PdfPTable tabelleGPU=new PdfPTable(1);
|
||||||
|
|
||||||
|
tabelleGPU.setTotalWidth(tableWidth);
|
||||||
|
tabelleGPU.setLockedWidth(true);
|
||||||
|
tabelleGPU.addCell(new PdfPCell(new Phrase("Grafik:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleGPU.addCell(new PdfPCell(new Phrase(Datenblatt.gpu.getProperty("manufacturer"),tableFont))).setBorderWidth(1);
|
||||||
|
tabelleGPU.addCell(new PdfPCell(new Phrase(Datenblatt.gpu.getProperty("name") +" ",tableFont))).setBorderWidth(1);
|
||||||
|
tabelleGPU.addCell(new PdfPCell(new Phrase(Datenblatt.gpu.getProperty("mhz") +" MHz",tableFont))).setBorderWidth(1);
|
||||||
|
tabelleGPU.setHeaderRows(1);
|
||||||
|
|
||||||
|
|
||||||
|
PdfPTable tabelleRAM=new PdfPTable(1);
|
||||||
|
|
||||||
|
tabelleRAM.setTotalWidth(tableWidth);
|
||||||
|
tabelleRAM.setLockedWidth(true);
|
||||||
|
tabelleRAM.addCell(new PdfPCell(new Phrase("Arbeitsspeicher:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleRAM.addCell(new PdfPCell(new Phrase(Datenblatt.memory.getProperty("capacity")+" GB - "+Datenblatt.memory.getProperty("ddrVersion"),tableFont))).setBorderWidth(1);
|
||||||
|
tabelleRAM.setHeaderRows(1);
|
||||||
|
|
||||||
|
// Betriebssystem:
|
||||||
|
cb.beginText();
|
||||||
|
cb.setFontAndSize(bf2, 12);
|
||||||
|
cb.moveText(10,20);
|
||||||
|
cb.showText(Datenblatt.os.getProperty("name"));
|
||||||
|
cb.endText();
|
||||||
|
|
||||||
|
PdfPTable tabelleStorage=new PdfPTable(1);
|
||||||
|
|
||||||
|
if (Datenblatt.storageAnzahl==1){
|
||||||
|
|
||||||
|
|
||||||
|
tabelleStorage.setTotalWidth(tableWidth);
|
||||||
|
tabelleStorage.setLockedWidth(true);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase("Datenträger:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase(Datenblatt.storage.getProperty("drive1Capacity")+" GB "+Datenblatt.storage.getProperty("drive1Type"),tableFont))).setBorderWidth(1);
|
||||||
|
} else if (Datenblatt.storageAnzahl==2) {
|
||||||
|
|
||||||
|
tabelleStorage.setTotalWidth(tableWidth);
|
||||||
|
tabelleStorage.setLockedWidth(true);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase("Datenträger 1:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase(Datenblatt.storage.getProperty("drive1Capacity")+" GB "+Datenblatt.storage.getProperty("drive1Type"),tableFont))).setBorderWidth(1);
|
||||||
|
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase("Datenträger 2:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase(Datenblatt.storage.getProperty("drive2Capacity")+" GB "+Datenblatt.storage.getProperty("drive2Type"),tableFont))).setBorderWidth(1);
|
||||||
|
} else if (Datenblatt.storageAnzahl==3) {
|
||||||
|
|
||||||
|
tabelleStorage.setTotalWidth(tableWidth);
|
||||||
|
tabelleStorage.setLockedWidth(true);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase("Datenträger 1:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase(Datenblatt.storage.getProperty("drive1Capacity")+" GB "+Datenblatt.storage.getProperty("drive1Type"),tableFont))).setBorderWidth(1);
|
||||||
|
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase("Datenträger 2:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase(Datenblatt.storage.getProperty("drive2Capacity")+" GB "+Datenblatt.storage.getProperty("drive2Type"),tableFont))).setBorderWidth(1);
|
||||||
|
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase("Datenträger 3:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase(Datenblatt.storage.getProperty("drive3Capacity")+" GB "+Datenblatt.storage.getProperty("drive3Type"),tableFont))).setBorderWidth(1);
|
||||||
|
} else if (Datenblatt.storageAnzahl==4) {
|
||||||
|
|
||||||
|
tabelleStorage.setTotalWidth(tableWidth);
|
||||||
|
tabelleStorage.setLockedWidth(true);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase("Datenträger 1:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase(Datenblatt.storage.getProperty("drive1Capacity")+" GB "+Datenblatt.storage.getProperty("drive1Type"),tableFont))).setBorderWidth(1);
|
||||||
|
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase("Datenträger 2:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase(Datenblatt.storage.getProperty("drive2Capacity")+" GB "+Datenblatt.storage.getProperty("drive2Type"),tableFont))).setBorderWidth(1);
|
||||||
|
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase("Datenträger 3:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase(Datenblatt.storage.getProperty("drive3Capacity")+" GB "+Datenblatt.storage.getProperty("drive3Type"),tableFont))).setBorderWidth(1);
|
||||||
|
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase("Datenträger 4:",tableFontHead))).setBorderWidth(1);
|
||||||
|
tabelleStorage.addCell(new PdfPCell(new Phrase(Datenblatt.storage.getProperty("drive4Capacity")+" GB "+Datenblatt.storage.getProperty("drive4Type"),tableFont))).setBorderWidth(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
PdfPTable alles=new PdfPTable(2);
|
||||||
|
alles.setTotalWidth(200);
|
||||||
|
alles.setLockedWidth(true);
|
||||||
|
alles.addCell(new PdfPCell(tabelleCPU));
|
||||||
|
alles.addCell(new PdfPCell(tabelleStorage));
|
||||||
|
alles.addCell(new PdfPCell(tabelleGPU));
|
||||||
|
alles.addCell(new PdfPCell(tabelleRAM));
|
||||||
|
|
||||||
|
doc.add(alles);
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
doc.close();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Die Datei wird bereits verwendet!");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Der Großteil des Codes der folgenden Funktion ist von hier(https://www.java-forum.org/thema/drucken-einer-pdf-datei.176174/) kopiert.
|
||||||
|
public static void toPrint(boolean direct, JFrame positionParent){
|
||||||
|
if (!direct) {
|
||||||
|
int n = JOptionPane.showConfirmDialog(positionParent, "<html><center>Soll das Datenblatt gedruckt werden?", "Drucken?", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
|
||||||
|
if (n == JOptionPane.YES_OPTION) {
|
||||||
|
System.out.println("Drucken...");
|
||||||
|
File datei = new File(pdfPathName);
|
||||||
|
if (datei.exists()) {
|
||||||
|
try {
|
||||||
|
PDDocument doc = PDDocument.load(datei);
|
||||||
|
|
||||||
|
PrintService myPrintService = findPrintService(RWConfigFile.getPrinterName());
|
||||||
|
|
||||||
|
PrinterJob job = PrinterJob.getPrinterJob();
|
||||||
|
job.setPageable(new PDFPageable(doc));
|
||||||
|
job.setPrintService(myPrintService);
|
||||||
|
job.print();
|
||||||
|
doc.close();
|
||||||
|
} catch (IOException | PrinterException e) {
|
||||||
|
System.out.println("Datei- oder Druckerfehler!");
|
||||||
|
JOptionPane.showConfirmDialog(positionParent, "<html><center>Bitte wählen Sie in den Programmeinstellungen([STRG]+[KOMMA]) einen Drucker aus!", "Drucken?", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
System.out.println("Drucken...");
|
||||||
|
File datei = new File(pdfPathName);
|
||||||
|
if (datei.exists()) {
|
||||||
|
try {
|
||||||
|
PDDocument doc = PDDocument.load(datei);
|
||||||
|
|
||||||
|
System.out.print("Druckername: ");
|
||||||
|
String printer=Kbd.readString();
|
||||||
|
PrintService myPrintService = findPrintService(printer);
|
||||||
|
|
||||||
|
while (true){
|
||||||
|
System.out.println("Soll immer dieser Drucker verwendet werden?(y/n)");
|
||||||
|
if (Kbd.readString().equals("y")||Kbd.readString().equals("Y")){
|
||||||
|
RWConfigFile.setPrinter(printer);
|
||||||
|
break;
|
||||||
|
} else if (Kbd.readString().equals("n")||Kbd.readString().equals("N")) {
|
||||||
|
}else System.out.println("Bitte 'y'/'Y' für \"Ja\" oder 'n'/'N' für \"Nein\" eingeben!");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PrinterJob job = PrinterJob.getPrinterJob();
|
||||||
|
job.setPageable(new PDFPageable(doc));
|
||||||
|
job.setPrintService(myPrintService);
|
||||||
|
job.print();
|
||||||
|
doc.close();
|
||||||
|
} catch (IOException | PrinterException e) {
|
||||||
|
System.out.println("Datei- oder Druckerfehler!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://stackoverflow.com/questions/18636622/pdfbox-how-to-print-pdf-with-specified-printer
|
||||||
|
public static PrintService findPrintService(String printerName){
|
||||||
|
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
|
||||||
|
for (PrintService printService : printServices) {
|
||||||
|
if (printService.getName().trim().equals(printerName)) {
|
||||||
|
return printService;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String[] printerList(){
|
||||||
|
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
|
||||||
|
System.out.println("Number of print services: " + printServices.length);
|
||||||
|
String[] printerList=new String[printServices.length];
|
||||||
|
|
||||||
|
for (int i=0;i<printServices.length;i++){
|
||||||
|
printerList[i]=printServices[i].getName();
|
||||||
|
}
|
||||||
|
return printerList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
66
Datenblatt/src/main/java/de/dejan_hopp/io/RWConfigFile.java
Normal file
66
Datenblatt/src/main/java/de/dejan_hopp/io/RWConfigFile.java
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
package de.dejan_hopp.io;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
public class RWConfigFile {
|
||||||
|
|
||||||
|
public static String getPrinterName(){
|
||||||
|
Properties settings=new Properties();
|
||||||
|
String printerName="Kein Drucker Ausgewählt";
|
||||||
|
|
||||||
|
try {
|
||||||
|
FileInputStream in=new FileInputStream("settings.conf");
|
||||||
|
settings.load(in);
|
||||||
|
printerName=settings.getProperty("printerName");
|
||||||
|
} catch (IOException e) {
|
||||||
|
//throw new RuntimeException(e);
|
||||||
|
File config=new File("settings.conf");
|
||||||
|
|
||||||
|
if (!config.exists()){
|
||||||
|
try{
|
||||||
|
boolean created=config.createNewFile();
|
||||||
|
if (created){
|
||||||
|
getPrinterName();
|
||||||
|
} else {
|
||||||
|
new File("settings.conf");
|
||||||
|
getPrinterName();
|
||||||
|
}
|
||||||
|
} catch (IOException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return printerName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setPrinter(String printerName){
|
||||||
|
Properties settings=new Properties();
|
||||||
|
|
||||||
|
try {
|
||||||
|
FileOutputStream out=new FileOutputStream("settings.conf");
|
||||||
|
settings.setProperty("printerName",printerName);
|
||||||
|
settings.store(out,null);
|
||||||
|
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
File config=new File("settings.conf");
|
||||||
|
|
||||||
|
if (!config.exists()){
|
||||||
|
try {
|
||||||
|
boolean created=config.createNewFile();
|
||||||
|
if (created){
|
||||||
|
setPrinter(printerName);
|
||||||
|
} else {
|
||||||
|
new File("settings.conf");
|
||||||
|
setPrinter(printerName);
|
||||||
|
}
|
||||||
|
} catch (IOException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
57
Datenblatt/src/main/java/de/dejan_hopp/io/pdf2PNG.java
Normal file
57
Datenblatt/src/main/java/de/dejan_hopp/io/pdf2PNG.java
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package de.dejan_hopp.io;
|
||||||
|
|
||||||
|
import com.sun.pdfview.PDFFile;
|
||||||
|
import com.sun.pdfview.PDFPage;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.RandomAccessFile;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.channels.FileChannel;
|
||||||
|
|
||||||
|
public class pdf2PNG {
|
||||||
|
public static void convert(){
|
||||||
|
|
||||||
|
try {
|
||||||
|
File sourceFile = new File("Datenblatt.pdf");
|
||||||
|
|
||||||
|
if (sourceFile.exists()) {
|
||||||
|
|
||||||
|
RandomAccessFile raf = new RandomAccessFile(sourceFile, "r");
|
||||||
|
FileChannel channel = raf.getChannel();
|
||||||
|
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
|
||||||
|
PDFFile pdf = new PDFFile(buf);
|
||||||
|
|
||||||
|
int pageNumber = 1;// which PDF page to be converted
|
||||||
|
PDFPage page = pdf.getPage(pageNumber);
|
||||||
|
|
||||||
|
// image dimensions
|
||||||
|
int width = 800;
|
||||||
|
int height = 800;
|
||||||
|
|
||||||
|
// create the image
|
||||||
|
Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), (int) page.getBBox().getHeight());
|
||||||
|
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||||
|
|
||||||
|
// width & height, // clip rect, // null for the ImageObserver, // fill background with white, // block until drawing is done
|
||||||
|
Image image = page.getImage(width, height, rect, null, true, true );
|
||||||
|
Graphics2D bufImageGraphics = bufferedImage.createGraphics();
|
||||||
|
bufImageGraphics.drawImage(image, 0, 0, null);
|
||||||
|
|
||||||
|
File imageFile = new File("Datenblatt.png" );// change file format here. Ex: .png, .jpg, .jpeg, .gif, .bmp
|
||||||
|
|
||||||
|
ImageIO.write(bufferedImage, "png", imageFile);
|
||||||
|
} else {
|
||||||
|
System.err.println(sourceFile.getName() +" File not exists");
|
||||||
|
}
|
||||||
|
if(sourceFile.delete()){System.out.println("PDF gelöscht!");}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//JOptionPane.showMessageDialog(null, "Es kann nicht gedruckt werden. Ein anderer Prozess verwendet die Datei!","Fehler!",JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
3
Datenblatt/src/main/resources/META-INF/MANIFEST.MF
Normal file
3
Datenblatt/src/main/resources/META-INF/MANIFEST.MF
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Manifest-Version: 1.0
|
||||||
|
Main-Class: de.dejan_hopp.Main
|
||||||
|
|
||||||
3
Datenblatt/target/classes/META-INF/MANIFEST.MF
Normal file
3
Datenblatt/target/classes/META-INF/MANIFEST.MF
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Manifest-Version: 1.0
|
||||||
|
Main-Class: de.dejan_hopp.Main
|
||||||
|
|
||||||
BIN
Datenblatt/target/classes/de/dejan_hopp/Datenblatt.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/Datenblatt.class
Normal file
Binary file not shown.
BIN
Datenblatt/target/classes/de/dejan_hopp/Features.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/Features.class
Normal file
Binary file not shown.
BIN
Datenblatt/target/classes/de/dejan_hopp/GUI.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/GUI.class
Normal file
Binary file not shown.
BIN
Datenblatt/target/classes/de/dejan_hopp/Main.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/Main.class
Normal file
Binary file not shown.
BIN
Datenblatt/target/classes/de/dejan_hopp/SettingsWindow.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/SettingsWindow.class
Normal file
Binary file not shown.
BIN
Datenblatt/target/classes/de/dejan_hopp/io/Delay.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/io/Delay.class
Normal file
Binary file not shown.
BIN
Datenblatt/target/classes/de/dejan_hopp/io/DisplayConsole.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/io/DisplayConsole.class
Normal file
Binary file not shown.
BIN
Datenblatt/target/classes/de/dejan_hopp/io/Kbd.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/io/Kbd.class
Normal file
Binary file not shown.
BIN
Datenblatt/target/classes/de/dejan_hopp/io/Print.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/io/Print.class
Normal file
Binary file not shown.
BIN
Datenblatt/target/classes/de/dejan_hopp/io/RWConfigFile.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/io/RWConfigFile.class
Normal file
Binary file not shown.
BIN
Datenblatt/target/classes/de/dejan_hopp/io/pdf2PNG.class
Normal file
BIN
Datenblatt/target/classes/de/dejan_hopp/io/pdf2PNG.class
Normal file
Binary file not shown.
BIN
JAR-Libs/commons-logging-1.2.jar
Normal file
BIN
JAR-Libs/commons-logging-1.2.jar
Normal file
Binary file not shown.
BIN
JAR-Libs/fontbox-2.0.27.jar
Normal file
BIN
JAR-Libs/fontbox-2.0.27.jar
Normal file
Binary file not shown.
BIN
JAR-Libs/html2pdf-4.0.5.jar
Normal file
BIN
JAR-Libs/html2pdf-4.0.5.jar
Normal file
Binary file not shown.
BIN
JAR-Libs/itextpdf-5.5.13.2.jar
Normal file
BIN
JAR-Libs/itextpdf-5.5.13.2.jar
Normal file
Binary file not shown.
BIN
JAR-Libs/org.eclipse.swt-3.1.jar
Normal file
BIN
JAR-Libs/org.eclipse.swt-3.1.jar
Normal file
Binary file not shown.
BIN
JAR-Libs/pdf-renderer.jar
Normal file
BIN
JAR-Libs/pdf-renderer.jar
Normal file
Binary file not shown.
BIN
JAR-Libs/pdfbox-2.0.27.jar
Normal file
BIN
JAR-Libs/pdfbox-2.0.27.jar
Normal file
Binary file not shown.
BIN
JAR-Libs/pdfbox-tools-2.0.27.jar
Normal file
BIN
JAR-Libs/pdfbox-tools-2.0.27.jar
Normal file
Binary file not shown.
BIN
JAR-Libs/preflight-2.0.27.jar
Normal file
BIN
JAR-Libs/preflight-2.0.27.jar
Normal file
Binary file not shown.
BIN
JAR-Libs/xmpbox-2.0.27.jar
Normal file
BIN
JAR-Libs/xmpbox-2.0.27.jar
Normal file
Binary file not shown.
BIN
Jar-Libs.zip
Normal file
BIN
Jar-Libs.zip
Normal file
Binary file not shown.
BIN
Screenshot 2023-04-25 123225.png
Normal file
BIN
Screenshot 2023-04-25 123225.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 65 KiB |
Reference in New Issue
Block a user