1

Archive Audiobook Maker

This commit is contained in:
Kim Wittenburg
2017-07-23 23:37:35 +02:00
commit 6863e2a68d
37 changed files with 2149 additions and 0 deletions

30
Podcast.POD Executable file
View File

@@ -0,0 +1,30 @@
[Podcast]
altfolder1=Test
basename=Test
audiobook=true
artwork=Bild.jpg
imgwidth=50
imgheight=50
editpointcount=3
[Editpoint_1]
image=Bild.jpg
audiofile=02 Take On Me.m4a
chapter=1
start=00:00:00.00
[Editpoint_2]
image=Bild.jpg
audiofile=08 - Nie wieder Krieg, nie mehr Las Vegas.m4a
chapter=2
start=00:02:59.00
[Editpoint_3]
image=Bild.jpg
audiofile=16 - Trick 17 m. s..m4a
chapter=3
start=00:05:37.00

BIN
audiobook Maker Frank.rar Executable file

Binary file not shown.

BIN
audiobook Maker.rar Executable file

Binary file not shown.

74
build.xml Executable file
View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="Audiobook_Maker_1.0" default="default" basedir=".">
<description>Builds, tests, and runs the project Audiobook Maker 1.0.</description>
<import file="nbproject/build-impl.xml"/>
<!--
There exist several targets which are by default empty and which can be
used for execution of your tasks. These targets are usually executed
before and after some main targets. They are:
-pre-init: called before initialization of project properties
-post-init: called after initialization of project properties
-pre-compile: called before javac compilation
-post-compile: called after javac compilation
-pre-compile-single: called before javac compilation of single file
-post-compile-single: called after javac compilation of single file
-pre-compile-test: called before javac compilation of JUnit tests
-post-compile-test: called after javac compilation of JUnit tests
-pre-compile-test-single: called before javac compilation of single JUnit test
-post-compile-test-single: called after javac compilation of single JUunit test
-pre-jar: called before JAR building
-post-jar: called after JAR building
-post-clean: called after cleaning build products
(Targets beginning with '-' are not intended to be called on their own.)
Example of inserting an obfuscator after compilation could look like this:
<target name="-post-compile">
<obfuscate>
<fileset dir="${build.classes.dir}"/>
</obfuscate>
</target>
For list of available properties check the imported
nbproject/build-impl.xml file.
Another way to customize the build is by overriding existing main targets.
The targets of interest are:
-init-macrodef-javac: defines macro for javac compilation
-init-macrodef-junit: defines macro for junit execution
-init-macrodef-debug: defines macro for class debugging
-init-macrodef-java: defines macro for class execution
-do-jar-with-manifest: JAR building (if you are using a manifest)
-do-jar-without-manifest: JAR building (if you are not using a manifest)
run: execution of project
-javadoc-build: Javadoc generation
test-report: JUnit report generation
An example of overriding the target for project execution could look like this:
<target name="run" depends="Audiobook_Maker_1.0-impl.jar">
<exec dir="bin" executable="launcher.exe">
<arg file="${dist.jar}"/>
</exec>
</target>
Notice that the overridden target depends on the jar target and not only on
the compile target as the regular run target does. Again, for a list of available
properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file.
-->
</project>

3
manifest.mf Executable file
View File

@@ -0,0 +1,3 @@
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build

BIN
src/Data/SSA.exe.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
src/Data/Set_Win.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

BIN
src/Data/Settings.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

BIN
src/Data/Tab_Adv.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

170
src/Data/Vollidiot.txt Executable file
View File

@@ -0,0 +1,170 @@
[Podcast]
altfolder1=Vollidiot
basename=Vollidiot
audiobook=true
artwork=Vollidiot.png
imgwidth=300
imgheight=300
editpointcount=22
[Editpoint_1]
image=Vollidiot.png
audiofile=1-01 Intro.m4a
chapter=001
start=00:00:00.00
[Editpoint_2]
image=Vollidiot.png
audiofile=1-02 Macadamia Nudge Matsch.m4a
chapter=002
start=00:00:45.00
[Editpoint_3]
image=Vollidiot.png
audiofile=1-03 Der Saftschubser-Gentleman.m4a
chapter=003
start=00:18:36.00
[Editpoint_4]
image=Vollidiot.png
audiofile=1-04 Danke, WMF!.m4a
chapter=004
start=00:38:37.00
[Editpoint_5]
image=Vollidiot.png
audiofile=1-05 Lala.m4a
chapter=005
start=00:55:59.00
[Editpoint_6]
image=Vollidiot.png
audiofile=1-06 Die Halslose Killerschwuchtel.m4a
chapter=006
start=01:03:31.00
[Editpoint_7]
image=Vollidiot.png
audiofile=1-07 Josef-Stalin-Charme-Schule.m4a
chapter=007
start=01:09:38.00
[Editpoint_8]
image=Vollidiot.png
chapter=008
audiofile=2-01 Die Rote Eule Fraktion.m4a
start=01:19:38.00
[Editpoint_9]
image=Vollidiot.png
chapter=009
audiofile=2-02 Schicklgruber.m4a
start=01:30:52.00
[Editpoint_10]
image=Vollidiot.png
chapter=010
audiofile=2-03 Tall Latte Macchiato Armagheddo.m4a
start=01:41:11.00
[Editpoint_11]
image=Vollidiot.png
chapter=011
audiofile=2-04 Paula.m4a
start=01:52:12.00
[Editpoint_12]
image=Vollidiot.png
chapter=012
audiofile=2-05 Der Shrimpsdöner.m4a
start=02:00:34.00
[Editpoint_13]
image=Vollidiot.png
chapter=013
audiofile=2-06 Tag Am Meer.m4a
start=02:09:56.00
[Editpoint_14]
image=Vollidiot.png
chapter=014
audiofile=2-07 Der Paula-Plan.m4a
start=02:19:47.00
[Editpoint_15]
image=Vollidiot.png
chapter=015
audiofile=2-08 _Soy JulianComotellamas_.m4a
start=02:26:06.00
[Editpoint_16]
image=Vollidiot.png
chapter=016
audiofile=3-01 Krebsrote Flachpfeife.m4a
start=02:39:00.00
[Editpoint_17]
image=Vollidiot.png
chapter=017
audiofile=3-02 Nacht Am Meer.m4a
start=02:53:40.00
[Editpoint_18]
image=Vollidiot.png
chapter=018
audiofile=3-03 Im Separee Der Horizontalen Ver.m4a
start=03:10:38.00
[Editpoint_19]
image=Vollidiot.png
chapter=019
audiofile=3-04 Wenn Sie Eine Zitrone Haben.m4a
start=03:22:42.00
[Editpoint_20]
image=Vollidiot.png
chapter=020
audiofile=3-05 Die Glühwürmchenseilbahn.m4a
start=03:34:06.00
[Editpoint_21]
image=Vollidiot.png
chapter=021
audiofile=3-06 Vollidiot.m4a
start=03:43:37.00
[Editpoint_22]
image=Vollidiot.png
chapter=022
audiofile=3-07 Das Gurkenrennen.m4a
start=03:48:03.00

BIN
src/Data/change.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

BIN
src/Data/drag-and-drop.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

19
src/Data/iTunes Data.html Executable file
View File

@@ -0,0 +1,19 @@
<h1>Wo speichert iTunes meine Songs???</h1>
Wenn sie sich diese Frage schon &ouml;fters gestellt haben, ist dies genau die richtige Anleitung.<p />
Wenn sie iTunes ge&ouml;ffnet haben, klicken sie auf Bearbeiten >> Einstellungen:<br>
<img src="Settings.jpg" alt="Settings.jpg"></img><p />
Es sollte sich dieses Fenster &ouml;ffnen(Die Haken k&ouml;nnen auch anders gesetzt sein):<br>
<img src="Set_Win.jpg" alt="Set_Win.jpg"></img><p />
Dort klicken sie jetzt auf den Tab <i>Erweitert</i>:<br>
<img src="Tab_Adv.jpg" alt="Tab_Adv.jpg"></img><p />
Dort gibt es nun oben ein Feld, in dem der Pfad des iTunes Medienordners steht. Mit dem Button <i>&Auml;ndern</i> kann dieser beliebig ge&auml;ndert werden.(rote Rahmen)<br>
<img src="change.jpg" alt="change.jpg"></img><p />
Wenn sie den dort angegebenen Pfad im Windows-Explorer &ouml;ffnen, finden sie dort standartm&auml;ssig Ordner, die nach den Interpreten benannt sind(und ein paar standart iTunes-Ordner wie z.B.<i> Mobile Applications</i>). Unter dem gew&uuml;nschten Interpretennamen finden sie seine Alben als Ordner vor, in welchen wiederum die Titel liegen.<br>
Es kann sein, dass sie ihren gew&uuml;nschten Interpreten nicht finden: <ol><li>Falls es ein Interpret sein sollte, den sie nicht &uuml;ber den iTunes store oder eine CD importiert haben, sollten sie gucken, ob der Haken "beim Hinzuf&uuml;gen in den Medienordner kopieren" angew&auml;hlt ist(letztes Bild, blauer Rahmen). Ist er das nicht, so liegen die Dateien in dem Ordner auf den Sie sie(z.B. vom USB-Stick)kopiert haben. Falls doch siehe 2.
<li>Sehen sie in den Unterordnern <i>Music, Compilations</i> und <i>Music/Compilations</i>(fragen Sie mich nicht nach dem Ordnungssystem )des iTunes Medienordners nach, ob die Interpreten(evtl. gleich die Alben) dort als Ordner vorliegen.
</ol>

BIN
src/Data/import.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

BIN
src/Data/importSettings.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

BIN
src/Data/importSettings2.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
src/Data/list.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

BIN
src/Data/main.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
src/Data/names.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

BIN
src/Data/output.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
src/Data/pod.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
src/Data/search.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
src/Data/source.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

106
src/Dating/Time.java Executable file
View File

@@ -0,0 +1,106 @@
package Dating;
//~--- JDK imports ------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Time {
private int hours = 0;
private int minutes = 0;
private int seconds = 0;
public Time() {}
public Time(int hours, int minutes, int seconds) {
this.add(hours, minutes, seconds);
/*this.hours = hours;
this.minutes = minutes;
this.seconds = seconds;*/
}
public void add(Time t) {
add(t.getHours(), t.getMinutes(), t.getSeconds());
}
public void add(int hours, int minutes, int seconds) {
this.seconds = this.seconds + seconds;
this.minutes = this.minutes + minutes;
this.hours = this.hours + hours;
for (;;) {
if (this.seconds >= 60) {
this.minutes++;
this.seconds = this.seconds - 60;
} else {
break;
}
}
for (;;) {
if (this.minutes >= 60) {
this.hours++;
this.minutes = this.minutes - 60;
} else {
break;
}
}
}
public String asString() {
String returnS;
if (hours < 10) {
returnS = "0" + hours;
} else {
returnS = "" + hours;
}
if (minutes < 10) {
returnS = returnS + ":0" + minutes;
} else {
returnS = returnS + ":" + minutes;
}
if (seconds < 10) {
returnS = returnS + ":0" + seconds;
} else {
returnS = returnS + ":" + seconds;
}
return returnS;
}
public int getHours() {
return hours;
}
public int getMinutes() {
return minutes;
}
public int getSeconds() {
return seconds;
}
public void setHours(int hours) {
this.hours = hours;
}
public void setMinutes(int minutes) {
this.minutes = minutes;
}
public void setSeconds(int seconds) {
this.seconds = seconds;
}
}
//~ Formatted by Jindent --- http://www.jindent.com

View File

@@ -0,0 +1,14 @@
package Exceptions;
public class EndingException extends Exception {
public EndingException() {
super();
}
public EndingException(String s) {
super(s);
}
}
//~ Formatted by Jindent --- http://www.jindent.com

View File

@@ -0,0 +1,11 @@
package Exceptions;
public class FolderException extends Throwable {
public FolderException() {
super();
}
public FolderException(String s) {
super(s);
}
}

View File

@@ -0,0 +1,11 @@
package Exceptions;
public class NoFilesSelectedException extends NotSelectedException {
public NoFilesSelectedException(){
super();
}
public NoFilesSelectedException(String message){
super(message);
}
}

View File

@@ -0,0 +1,12 @@
package Exceptions;
public class NoFolderSelectedException extends NotSelectedException {
public NoFolderSelectedException() {
super();
}
public NoFolderSelectedException(String message) {
super(message);
}
}

View File

@@ -0,0 +1,11 @@
package Exceptions;
public class NotSelectedException extends Exception {
public NotSelectedException(){
super();
}
public NotSelectedException(String message){
super(message);
}
}

81
src/LAF/LAF.java Executable file
View File

@@ -0,0 +1,81 @@
package LAF;
public class LAF {
public static final String Windows = "Windows";
public static final String Mac = "Nimbus";
public static final String Nimbus = "Nimbus";
public static final String Motif = "Motif";
public static final String Metal = "Metal";
public static void LAFUpdate(java.awt.Component[] components){
int NumberOfComponents = components.length;
int i;
for (i = 0; i<NumberOfComponents; i++){
javax.swing.SwingUtilities.updateComponentTreeUI(components[i]);
}
}
public static void LAFUpdate(java.awt.Component[] components, String lookAndFeel){
if (lookAndFeel.equals("Windows")){
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
catch(Exception e){}
}
if (lookAndFeel.equals("Motif")){
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");}
catch(Exception e){}
}
if (lookAndFeel.equals("Nimbus")){
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");}
catch(Exception e){}
}
if (lookAndFeel.equals("Metal")){
try {javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");}
catch(Exception e){}
}
int NumberOfComponents = components.length;
int i;
for (i = 0; i<NumberOfComponents; i++){
javax.swing.SwingUtilities.updateComponentTreeUI(components[i]);
}
}
public static void LAFUpdate(java.awt.Component component, String lookAndFeel){
if (lookAndFeel.equals("Windows")){
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
catch(Exception e){}
}
if (lookAndFeel.equals("Motif")){
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");}
catch(Exception e){}
}
if (lookAndFeel.equals("Nimbus")){
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");}
catch(Exception e){}
}
if (lookAndFeel.equals("Metal")){
try {javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");}
catch(Exception e){}
}
javax.swing.SwingUtilities.updateComponentTreeUI(component);
}
public static void setLAF(String lookAndFeel){
if (lookAndFeel.equals("Windows")){
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
catch(Exception e){}
}
if (lookAndFeel.equals("Motif")){
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");}
catch(Exception e){}
}
if (lookAndFeel.equals("Nimbus")){
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");}
catch(Exception e){}
}
if (lookAndFeel.equals("Metal")){
try {javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");}
catch(Exception e){}
}
}
}

152
src/Readme.html Executable file
View File

@@ -0,0 +1,152 @@
<html>
<head>
<title>audiobook Maker Tutorial</title>
Der Ordner Data ent&auml;lt die Bilddateien der Readme.
</head>
<body style="background-color: #CCFFFF;">
<h2>Achtung:</h2>
Gegebenenfalls muss man Administrator sein um alle Teile des Tutorials befolgen zu k&ouml;nnen, da z.B. SSA standartm&auml;&szlig;ig in das Programmverzeichnis(bei mir "C:\Programme\", oder "C:\Program Files\") installiert wird.<p />
<h1 id="top">iPod Audiobook Maker Tutorial</h1><p />
<h2>Inhalt</h2><p />
<ol>
<li><a href="#install">Installation</a></li>
<li><a href="#general" title="Wof&uuml;r der iPod audiobook Maker gemacht wurde">Allgemeines</a></li>
<li><a href="#tutorial">Tutorial</a></li>
<li><a href="#PodData">Aufbau einer .POD Datei</a></li>
<li><a href="#source">Quellen</a></li>
</ol>
<h2 id="install">1. Installation</h2>
<ol>
<li>Da der <i>iPod audiobook Maker</i> in Java geschrieben ist, ist es notwendig Java zu installieren(<a href="http://java.com/de/download/manual.jsp" target="_blank">download</a>)
<li>Um den <i>iPod audiobook Maker</i> zu benutzen m&uuml;ssen sie zuerst den <i><b>S</b>lide<b>s</b>how <b>A</b>ssembler(kurz: SSA)</i> installieren.(<a href="#general"><small>Warum</small></a>)
<li>F&uuml;hren sie dazu die ssa_setup105a.exe aus und befolgen sie die Anweisungen.(Alternativ auch der originale <a href="http://www.jrlearnsmedia.com/blog/articles/ssa-downloads.aspx" target="_blank">Download</a> von Jr Learns Media(Sie brauchen SSA und <b>nicht</b> SSAFront))
<li>Verschieben sie nun die audiobook Maker.jar in das Programmverzeichnis von SSA(Bei mir ist das C:\Programme\Slideshow Assambler\)<small><a href="Data/source.jpg">Bild</a></small>
</ol>
<h2 id="general">2. Allgemeines</h2>
Haben Sie schon mal ein H&ouml;rbuch vom iTunes-Sore mit einer gerippten H&ouml;rbuch-CD verglichen? Der Unterschied d&uuml;rfte sofort auffallen:
Das iTunes-H&ouml;rbuch besteht aus einer Datei mit sch&ouml;n gesetzten Kapiteln, w&auml;hrend das CD-H&ouml;rbuch aus vielen einzelnen Dateien besteht.
Aber es gibt M&ouml;glichkeiten Diese Dateien zu einem iTunes-H&ouml;rbuch zu machen. Und um das zu erleichtern habe ich den <i>iPod audiobook Maker</i> geschrieben.
Der Name audiobook Maker ist eigentlich nicht ganz richtig, da das Programm nur eine <a href="#PodData">.POD Datei</a> erstellt, und keine .m4b(iTunes H&ouml;rbuch) Datei.
Diese <a href="#PodData">.POD Datei</a> kann nun allerdings durch <i>SSA</i> ausgewertetwerden, wodurch eine m4b Datei erstellt wird.<p />
Generell ist der <i>iPod audiobook Maker</i> daf&uuml;r gedacht das m&uuml;hsame Schreiben der Startzeiten in der <a href="#PodData">.POD Datei </a>
zu erleichtern, allerdings soll das Programm noch komfortabler werden und auch das H&ouml;rbuch direkt erstellen.<br />
Das Programm ist in Java geschrieben, was bedeutet, dass es auch auf anderen Plattformen laufen sollte. Allerdings wei&szlig; ich dort nichts &uuml;ber die Handhabung von iTunes und glaube nicht, dass SSA f&uuml;r andere Systeme verf&uuml;gbar ist. Deshalb ist dieses Tutorial vor allem f&uuml;r Windows-Benutzer<p />
<small><a href="#top">Start</a></small><p /><p />
<h2 id="tutorial">3. Tutorial(Beispiel: Tommy Jaud-Vollidiot)</h2>
<ol>
<li><a href="#rip">Schritt 1: Rippen der CD</a></li>
<li><a href="#move">Schritt 2: Vorbereiten der Dateien</a></li>
<li><a href="#audioBMaker">Schritt 3: Benutzung des iPod audiobook Makers</a></li>
<li><a href="#useSSA">Schritt 4: SSA Benutzen</a></li>
<li><a href="#clean">Schritt 5: Aufr&auml;umen</a></li>
</ol>
Hier ein ausf&uuml;hrliches Tutorial wie dieses Programm benutzt wird:<p />
<h3 id="rip">Schritt 1: Rippen der CD</h3>
Als erstes m&uuml;ssen sie die Audiodateien(am besten &uuml;ber iTunes) auf den PC rippen. Allerdings sollten sie vorher sicher stellen, dass die Dateien dann auch als m4a Dateien vorliegen und nicht als mp3s oder anderes.
Das tun sie, indem sie auf Importeinstellungen klicken:<br />
<a href="Data/importSettings.jpg"><img src="Data/importSettings.jpg" alt="Data/importSettings.jpg" width="700" height="550"></a><p />
Dann sollte sich so ein Fenster &ouml;ffnen. Dabei sollte vor allem die markierte Einstellung auf <i>AAC</i> stehen. Den Rest m&uuml;ssen sie selber
je nach PC einstellen:<br />
<a href="Data/importSettings2.jpg"><img src="Data/importSettings2.jpg" alt="Data/importSettings2.jpg"></a><p />
Danach k&ouml;nnen sie CD importieren.<br />
<small><a href="#tutorial">Tutorial</a></small><br />
<small><a href="#top">Start</a></small><p />
<h3 id="move">Schritt 2: Vorbereiten der Dateien</h3>
Jetzt sollen die H&ouml;rbuch Dateien in einen Unterordner des Programm-Verzeichnises von SSA verschoben werden(Namen merken). Das k&ouml;nnen Sie, indem sie die entsprechenden Dateien in iTunes markieren und per drag-and-drop in das Verzeichnis kopieren:<br />
<a href="Data/drag-and-drop.jpg"><img src="Data/drag-and-drop.jpg" alt="Data/drag-and-drop.jpg" width="700" height="550"></a><p />
Alternativ dazu, k&ouml;nnen die Dateien auch diereckt &uuml;ber den Windows-Explorer kopiert oder verschoben werden.<br />
Wie sie den\die Ordner finden, wo iTunes die Dateien abspeichert k&ouml;nnen sie hier sehen(<a href="Data/iTunes Data.html" target="_blank">Link</a>);
Falls Sie noch ein CD-Cover hinzuf&uuml;gen wollen, kopieren oder verschieben sie die Bilddatei in den selben Unterordner von SSA, wie die Musikdateien.<br />
<small><a href="#tutorial">Tutorial</a></small><br />
<small><a href="#top">Start</a></small><p />
<h3 id="audioBMaker">Schritt 3: Benutzung des iPod audiobook Makers</h3>
der audiobook Maker erstellt in einem anzugebenden Verzeichnis die Datei <i>Podcast.POD</i>. Sie k&ouml;nnen diese Datei nach belieben umbenennen(die Endung .POD muss erhalten bleiben)<p />
Als erstes f&uuml;hren sie die Datei <i>audiobook Maker.jar</i> aus(Doppelklick oder manuell mit Konsole(Zum Verzeichnis navigieren und den Befehl "java -jar [meineJarDatei.jar]" eingeben). Es sollte sich dieses Fenster &ouml;ffnen(Falls .jar-Dateien mit eienem externen Programm(z.B. WinRAR) ge&ouml;ffnet werden sollten, m&uuml;ssen sie in den jeweiligen Programmeinstellungen die Dateiendung *.jar f&uuml;r das Programm deaktivieren.):<br />
<img alt="Data/main.jpg" src="Data/main.jpg" ><p />
Der Button <b>Ordner</b> fordert sie dazu auf den Namen des Ordners anzugeben in den sie die Dateien aus Schritt 2 anzugeben.<p />
Der Button <b>Cover ausw&auml;hlen</b> fordert sie dazu auf den Namen der Bilddatei(Schritt 2) die das Cover werden soll und im angegebenen Ordner sollte anzugeben.<p />
Der Button <b>.POD Datei erstellen</b> erstellt logischerweise die .POD Datei im angegebenen Ordner.<p />
Die drei <b>Ausahlkn&ouml;pfe</b> lassen sie w&auml;hlen, wie die einzelnen Kapitel genannt werden sollen(<small><a href="Data/names.jpg">Bild zu <b>Kapitel durchnummerieren</b></a></small>).<p />
<u>Die Dateien werden in Alphabetischer Reihnfolge zum H&ouml;rbuch zusammengefasst.</u><p />
<h3 id="useSSA">Schritt 4: SSA benutzen</h3>
Jetzt kommt der letzte Schritt zum H&ouml;rbuch. Dazu m&uuml;ssen sie nur die erstellte .POD Datei auf SSA.exe ziehen. Es sollte sich ein Fenster &ouml;ffnen:<br />
<img src="Data/SSA.exe.jpg" alt="Data/SSA.exe.jpg"><p />
Danach sollte eine Auflistung der Dateien kommen, die in den <a href="#editpoint">Editpoints</a> angegeben sind.<br />
<img src="Data/list.jpg" alt="Data/list.jpg"><p />
Als letztes werden sie zum Warten aufgefordert, w&auml;hrend die m4b Datei erstellt wird(bei mir hat sich das Fenster automatisch geschlosen, als dei !-Zeichen in der Mitte der zweiten Zeile waren.).<br />
<img src="Data/output.jpg" alt="Data/output.jpg"><br />
<small><a href="#tutorial">Tutorial</a></small><br />
<small><a href="#top">Start</a></small><p />
<h3 id="clean">Schritt 5: Aufr&auml;umen(optional)</h3>
Als letzten Schritt empfehle ich, die CD-Dateien aus der iTunes-Mediathek zu l&ouml;schen, da sie diese nun in einem H&ouml;rbuch haban.
Dieses importieren sie in iTunes , indem sie es per drag-and-drop in die iTunes-Mediathek ziehen(falls sie im folgenden die importierte .m4b datei verschieben/l&ouml;schen gibt iTunes beim Abspielen eine Fehlermeldung aus, dass die Originaldatei nicht gefunden wurde. &Uuml;ber den Button <i>Suchen</i> k&ouml;nnen sie den Pfad zur Datei neu belegen.<a href="Data/search.jpg"><small>Bild</small></a>).<br />
<a href="Data/import.jpg"><img src="Data/import.jpg" alt="Data/import.jpg" width="700" height="550"></a><br />
Sie k&ouml;nnen nun &uuml;ber den Windows-Explorer auch die Quelldateien, die Sie von der CD importiert haben l&ouml;schen, da diese nun nicht mehr gebraucht werden.(<a href="Data/iTunes Data.html" target="_blank">Wo speichert iTunes mein Dateien</a>)
<small><a href="#tutorial">Tutorial</a></small><br />
<small><a href="#top">Start</a></small><p />
<h2 id="PodData">4. Aufbau einer .POD Datei</h2>
Hier Noch mal eine kurze Erkl&auml;rung, wie eine <a href="#PodData">.POD Datei</a> aufgebaut ist, damit sie auch nachtr&auml;glich &Auml;nderungen vornehmen k&ouml;nnen.<br />
Wenn Sie eine .POD Datei in einem Editor (Notepad(++), Editor, ...) &ouml;ffnen, k&ouml;nnen sie folgendes finden(hinter den =Zeichen sollte irgentetwas stehen, was den entsprechenden Punkt belegt):<br />
<img src="Data/pod.jpg" alt="Data/pod.jpg"><p />
[Podcast]<br />
dies ist die Startzeile (Da SSA eigentlich nicht f&uuml;r H&ouml;rb&uuml;cher gemacht wurde, sondern f&uuml;r Podcasts, tricksen wir einfach ein bisschen.)<p />
altfolder1<br />
ist der Name des Ordners, in dem sich die Audiodateien und evtl. das Cover befinden(von SSA.exe aus gesehen).<p />
basename<br />
ist der Name des Ausgabeordners(von SSA.exe aus gesehen).<p />
artwork<br />
ist der Name der Bilddatei, die als Cover verwendet werden soll(im angegebenen Ordner)<p />
imgwidth und imgheight<br />
sind die Ma&szlig;e des Bildes(imgwidth=Breite, imgheight=H&ouml;he)<p />
editpointcount<br />
ist eine Angabe der Anzahl der <a href="#editpoint">Editpoints</a><p /><br />
[Editpoint_[Zahl]]<br id="editpoint">
ist eine angabe, bei welchem Editpoint man sich befindet(ein Editpoint gibt Auskunft &uuml;ber eine Datei)<p />
image<br />
ist der Name der Bilddatei f&uuml;r das Kapitel dieses Editpoints(Jedes Kapitel kann also ein eigenes Cover haben)<p />
audiofile<br />
ist der Name der Datei des Editpoints<p />
chapter<br />
ist der Name, der bei der Kapitelauswahl angezeigt wird(<a href="Data/names.jpg"><small>Bild</small></a>)<p />
start<br />
ist eine Angabe, wann das Kapitel beginnt(Format: hh:mm:ss,ff (h=Stunden, m=Minuten, s=Sekunden, f=Frames)), wobei die Frames sowieso ignoriert werden.<p />
<a href="Data/Vollidiot.txt" target="_blank">Ein komplettes Beispiel</a><br />
<small><a href="#top">Start</a></small><p />
<h2 id="source">5. Quellen</h2>
<a href="http://www.jrlearnsmedia.com/blog/articles/ssa-downloads.aspx" target="_blank">Slideshow Assembler von Jr Learns Media</a><br />
<a href="http://www.jthink.net/jaudiotagger/" target="_blank">m4a-codec (JThink's JAudiotagger)</a><br />
</body>
</html>

356
src/audiobook.java Executable file
View File

@@ -0,0 +1,356 @@
//~--- non-JDK imports --------------------------------------------------------
import Dating.Time;
import Exceptions.*;
import LAF.LAF;
//Imports für m4a-Codec
import org.jaudiotagger.audio.*;
import org.jaudiotagger.audio.exceptions.*;
import org.jaudiotagger.tag.*;
//~--- JDK imports ------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class audiobook extends JFrame implements ActionListener {
// Componenten deklarieren
private static Dimension ScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
static audiobook maker;
private boolean hasImage = false;
private Time time = new Time(0, 0, 0);
private BufferedImage Cover;
private String CoverName;
private JPanel buttonPanel;
private ButtonGroup chapterGroup;
private JButton chooseImage;
private JButton create;
private File[] files;
private JButton output;
private String outputFolder;
private JLabel selectedFolder;
private JLabel selectedImage;
private JRadioButton typeSelf;
private JRadioButton useFilenames;
private JRadioButton useNumbers;
// Konstruktor
public audiobook() {
this("iPod Audiobook Maker");
}
public audiobook(String s) {
super(s);
initComponents();
}
public void initComponents() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setIconImage(new ImageIcon(this.getClass().getResource("/Data\\icon.gif")).getImage());
setLayout(new FlowLayout());
// labelPanel zeigt ausgewählten Ordner und Cover an
JPanel labelPanel = new JPanel(new FlowLayout());
selectedFolder = new JLabel("Ordner: <Keiner> -");
selectedImage = new JLabel("Cover: <Keins>");
labelPanel.add(selectedFolder);
labelPanel.add(selectedImage);
// Das buttonPanel ist das Panel in dem alle Komponenten angezeigt werden
buttonPanel = new JPanel(new GridLayout(0, 1));
chooseImage = new JButton("Cover auswählen");
output = new JButton("Ordner");
create = new JButton(".POD Datei erstellen");
chapterGroup = new ButtonGroup();
// Die Radiobuttons um die Art der Kapitelbezeichnung zu wählen
useNumbers = new JRadioButton("Kapitel durchnummerieren", true);
useFilenames = new JRadioButton("Dateinamen als Kapitelnamen verwenden", false);
typeSelf = new JRadioButton("Kapitel selber benennen", false);
// Tooltips der Radiobuttons
output.setToolTipText(
"<html><head></head><body><b>Der Name des Unterordners im Slideshow Assembler-Verzeichnis</b>, in dem die Audiodateien liegen<br />"
+ "und in dem die .POD Datei und die .m4b Datei gespeichert werden sollen</body></html>");
chooseImage.setToolTipText("Der Name der Bilddatei im \"Ordner\", die als Cover verwendet werden soll");
useNumbers.setToolTipText("Die Namen der Kapitel werden \"001, 002, ...\" genannt");
useFilenames.setToolTipText(
"<html><head></head><body>Die Namen der Kapitel werden nach den Namen der dazugehörigen Dateien benannt.<br />"
+ "Oft werden die Namen dadurch <b>besonders lang</b>.</body></html>");
typeSelf.setToolTipText("Kapitelnamen selber angeben");
// Den Buttons ActionListener registrieren
chooseImage.addActionListener(this);
output.addActionListener(this);
create.addActionListener(this);
// Hinzufügen zur Radiobutton group
chapterGroup.add(useNumbers);
chapterGroup.add(useFilenames);
chapterGroup.add(typeSelf);
// Hinzufügen zum Buttonpanel
buttonPanel.add(labelPanel);
buttonPanel.add(output);
buttonPanel.add(chooseImage);
buttonPanel.add(create);
buttonPanel.add(useNumbers);
buttonPanel.add(useFilenames);
buttonPanel.add(typeSelf);
// Buttonpanel zum Hauptfenster hinzufügen
add(buttonPanel);
// Größe, Position, ... des Fensters einstellen
pack();
setLocation((ScreenSize.width - getWidth()) / 2, (ScreenSize.height - getHeight()) / 2);
setResizable(true);
setVisible(true);
}
public static void main(String[] args) {
// Auswählen des Look-and-Feels
LAF.setLAF(LAF.Mac);
// Neues audiobook-Fenster erzeugen
maker = new audiobook();
}
public void actionPerformed(ActionEvent e) {
// ActionListener um den Ordner auszuwählen
if (e.getActionCommand().equals("Ordner")) {
// Input-Dialog anzeigen um den Namen einzugeben
outputFolder = JOptionPane.showInputDialog(null, "Bitte Namen des Ordners angeben", "Eingabe",
JOptionPane.PLAIN_MESSAGE);
// Überprüfen ob der Ordner existiert
try {
File f = new File(outputFolder);
if (!f.exists() ||!f.isDirectory()) {
// Exception falls der Ordner nicht existiert
throw new FolderException();
}
// Alle passenden Dateien zum files-Array hinzufügen
files = f.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().endsWith(".m4a");
}
});
selectedFolder.setText("Ordner: " + outputFolder + " -");
selectedFolder.repaint();
// Abfangen der Exception falls der Ordner nicht existiert
} catch (FolderException exc) {
JOptionPane.showMessageDialog(null, "Ordner wurde nicht gefunden", "Fehler", JOptionPane.ERROR_MESSAGE);
outputFolder = null;
}
}
// ActionListener um das Cover auszuwählen
if (e.getActionCommand().equals("Cover auswählen")) {
// Ausgabeordner auf Existenz überprüfen
if (outputFolder != null) {
// Input-Dialog um Dateinamen anzugeben
String s = JOptionPane.showInputDialog(null, "Bitte Namen der Bilddatei eingeben", "Eingabe",
JOptionPane.PLAIN_MESSAGE);
try {
if (s == null) {
// Abbruchbefehl des Dialogs behandeln
throw new IOException("go");
}
// Auf falsche Dateiendungen reagieren
if (!s.toLowerCase().endsWith(".jpg")) {
if (!s.toLowerCase().endsWith(".png")) {
throw new EndingException();
}
}
Cover = ImageIO.read(new File(outputFolder + "\\" + s));
this.hasImage = true;
selectedImage.setText("Cover: " + s);
}
// Behandeln möglicher Fehler (falsche Dateiendung, Bilddatei existiert nicht)
// Falls Abbruchbefehl gewählt wurde, keine Reaktion
catch (IOException exc) {
if (!exc.getMessage().equals("go")) {
Cover = null;
JOptionPane.showMessageDialog(null, "Bilddatei wurde nicht gefunden", "Fehler",
JOptionPane.WARNING_MESSAGE);
this.hasImage = false;
}
} catch (EndingException exc) {
JOptionPane.showMessageDialog(null, "Das Cover muss eine .jpg oder .png Datei sein", "Fehler",
JOptionPane.ERROR_MESSAGE);
Cover = null;
this.hasImage = false;
}
if (Cover != null) {
this.hasImage = true;
this.CoverName = s;
}
} else {
JOptionPane.showMessageDialog(null, "Bitte geben sie zuerst einen Ausgabeordner an", "Fehler",
JOptionPane.ERROR_MESSAGE);
}
}
// Funktion um .POD Datei zu erstellen
if (e.getActionCommand().equals(".POD Datei erstellen")) {
// Cursor auf Arbeitscursor stellen
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
// Ordner, Cover überprüfen
try {
if (outputFolder == null) {
throw new NoFolderSelectedException();
}
if (!hasImage) {
if (JOptionPane.showConfirmDialog(null,
"Es wurde kein Cover ausgewählt.\nDatei trotzdem erstellen?",
"Kein Cover", JOptionPane.YES_OPTION) == JOptionPane.NO_OPTION) {
throw new EndingException();
}
}
// Zählvariable
int i = 0;
try {
FileWriter fWriter = new FileWriter(outputFolder + "\\Podcast.POD");
BufferedWriter writer = new BufferedWriter(fWriter);
// angegebene Informationen (Ordnername, Bild, Bildmaße, Dateianzahl) in die Datei schreiben
writer.write("[Podcast]\n");
writer.write("altfolder1=" + outputFolder + "\n");
writer.write("basename=" + outputFolder + "\n");
writer.write("audiobook=true" + "\n");
if (this.hasImage) {
writer.write("artwork=" + CoverName + "\n");
writer.write("imgwidth=" + Cover.getWidth() + "\n");
writer.write("imgheight=" + Cover.getHeight() + "\n");
}
writer.write("editpointcount=" + files.length + "\n\n\n");
// "Editpoint" für jede Musikdatei in .POD Datei schreiben
for (i = 0; i < files.length; i++) {
writer.write("[Editpoint_" + (i + 1) + "]\n");
if (this.hasImage) {
writer.write("image=" + CoverName + "\n");
}
writer.write("audiofile=" + files[i].getName() + "\n");
// Kapitelnamen durchnummerieren
if (useNumbers.isSelected()) {
writer.write("chapter=");
if ((i + 1) < 100) {
writer.write("0");
if ((i + 1) < 10) {
writer.write("0");
}
}
writer.write((i + 1) + "\n");
// Dateinamen als Kapitelnamen
} else if (useFilenames.isSelected()) {
writer.write("chapter=" + files[i].getName() + "\n");
// Kapitelnamen selber angeben
} else if (typeSelf.isSelected()) {
String s = JOptionPane.showInputDialog(null,
"Kapitelname der Datei " + files[i].getName() + " angeben (" + (i + 1)
+ " von " + files.length + ")", "Kapitelnamen eingeben",
JOptionPane.PLAIN_MESSAGE);
if (s == null) {
throw new EndingException();
}
writer.write("chapter=" + s + "\n");
}
// Startzeit des Kapitels schreiben
writer.write("start=" + time.asString() + ".00\n\n");
// Dauer der Datei zur gesammtzeit addieren
AudioFile af = AudioFileIO.read(files[i]);
time.add(0, 0, af.getAudioHeader().getTrackLength());
}
writer.close();
JOptionPane.showMessageDialog(null, "Fertig!\nDas Program schließt automatisch", "Fertig",
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
// Reagieren auf Fehler(Datei nicht lesbar, fehlender Ausgabeordner, anderes)
} catch (CannotReadException exc) {
JOptionPane.showMessageDialog(null,
"<html><head></head><body>Die Datei<br><b>" + files[i]
+ "</b><br>konnte nicht gelesen werden</body></html>", "Fehler",
JOptionPane.ERROR_MESSAGE);
} catch (TagException exc) {
JOptionPane.showMessageDialog(
null,
"<html><head></head><body>Es ist ein unbekannter Fehler bei der Datei<br><b>" + files[i]
+ "</b><br>aufgetreten</body></html>", "Fehler", JOptionPane.ERROR_MESSAGE);
} catch (ReadOnlyFileException exc) {
JOptionPane.showMessageDialog(null,
"<html><head></head><body>Die Datei<br><b>" + files[i]
+ "</b><br>ist eine Read-Only Datei</body></html>", "Fehler",
JOptionPane.ERROR_MESSAGE);
} catch (InvalidAudioFrameException exc) {
JOptionPane.showMessageDialog(
null,
"<html><head></head><body>Es ist ein unbekannter Fehler bei der Datei<br><b>" + files[i]
+ "</b><br>aufgetreten</body></html>", "Fehler", JOptionPane.ERROR_MESSAGE);
} catch (IOException exc) {
JOptionPane.showMessageDialog(null, "Es ist ein unbekannter Fehler aufgetreten", "Fehler",
JOptionPane.ERROR_MESSAGE);
}
} catch (NoFolderSelectedException exc) {
JOptionPane.showMessageDialog(null, "Bitte wählen sie einen Ausgabeordner an", "Fehler",
JOptionPane.ERROR_MESSAGE);
} catch (EndingException exc) {}
// Cursor auf Std setzen
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
}
//~ Formatted by Jindent --- http://www.jindent.com

319
src/audiobookMaker.java Executable file
View File

@@ -0,0 +1,319 @@
//~--- non-JDK imports --------------------------------------------------------
import org.jaudiotagger.audio.*;
import org.jaudiotagger.audio.exceptions.*;
import org.jaudiotagger.tag.*;
import Dating.Time;
//~--- JDK imports ------------------------------------------------------------
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
class adapter extends WindowAdapter {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
public class audiobookMaker extends JFrame {
static Time time = new Time(0, 0, 0);
String de[] = {
"Ordnername", "Covername", "Anzahl der Editpoints", ".POD Datei erstellen", "1 Titel, 2 Titel, ...",
"1-1 Titel, 1-2 Titel...3-7 Titel, ...", "Dateinamen selber angeben", "Dateinamen angeben. Datei Nr.",
"Erfolgreich!\nDas Programm wird beendet...", "Unbekannter Fehler!", "Anzahl der CDs",
"Anzahl der Titel auf CD ", "Bilddatei wurde nicht gefunden!\nDie Datei wird ohne Cover erstellt!"
};
String en[] = {
"Foldername", "Covername", "Number of Editpoints", "Create .POD file", "1 Title, 2 Title, ...",
"1-1 Title, 1-2 Title...3-7 Title, ...", "Type in Filenames by yourself", "Type in Filenames. File no.",
"Build Succesful!\nProgram will exit...", "Unknown error!", "Type in number of CDs", "Number of Tracks on CD ",
"Image was not found!\nFile will created without Cover!"
};
String[] selectedLanguage = de;
public JLabel editpointLabel = new JLabel(selectedLanguage[2]);
public JSpinner editpointField = new JSpinner(new SpinnerNumberModel(1, 0, 1000, 1));
public JLabel createFileStdLabel = new JLabel(selectedLanguage[4]);
public JButton createFileStd = new JButton(selectedLanguage[3]);
public JLabel createFileSelfLabel = new JLabel(selectedLanguage[6]);
public JButton createFileSelf = new JButton(selectedLanguage[3]);
public JLabel createFileMultiCDLabel = new JLabel(selectedLanguage[5]);
public JButton createFileMultiCD = new JButton(selectedLanguage[3]);
// Objekte inizialisieren
public JLabel FolderLabel = new JLabel(selectedLanguage[0]);
public JTextField Folder = new JTextField();
public JLabel CoverLabel = new JLabel(selectedLanguage[1]);
public JTextField CoverField = new JTextField();
BufferedImage CoverImage;
// \Objekte
public audiobookMaker() {
super("iPod audiobook Maker");
addWindowListener(new adapter());
this.setSize(600, 300);
setLayout(null);
// Objekte einstellen
FolderLabel.setBounds(55, 22, 100, 20);
Folder.setBounds(135, 20, 400, 25);
CoverLabel.setBounds(50, 62, 100, 20);
CoverField.setBounds(135, 60, 400, 25);
editpointLabel.setBounds(5, 102, 130, 20);
editpointField.setBounds(135, 100, 100, 25);
createFileStdLabel.setBounds(210, 222, 180, 20);
createFileStd.setBounds(210, 180, 150, 30);
createFileStd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
createStd();
}
});
createFileSelfLabel.setBounds(400, 222, 180, 20);
createFileSelf.setBounds(400, 180, 150, 30);
createFileSelf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
createSelf();
}
});
createFileMultiCDLabel.setBounds(20, 222, 180, 20);
createFileMultiCD.setBounds(20, 180, 150, 30);
createFileMultiCD.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
createMultiCD();
}
});
// \Objekte
add(FolderLabel);
add(Folder);
add(CoverLabel);
add(CoverField);
add(editpointLabel);
add(editpointField);
add(createFileStd);
add(createFileStdLabel);
add(createFileSelf);
add(createFileSelfLabel);
add(createFileMultiCD);
add(createFileMultiCDLabel);
this.setVisible(true);
}
public void createStd() {
try {
FileWriter creator = new FileWriter("Podcast.POD");
BufferedWriter writer = new BufferedWriter(creator);
int Editpoints = (int) Double.parseDouble(editpointField.getValue().toString());
boolean isCover;
writer.write("[Podcast]\n");
writer.write("altfolder1=" + Folder.getText() + "\n");
writer.write("basename=" + Folder.getText() + "\n");
try {
File CoverFile = new File(Folder.getText() + "\\" + CoverField.getText());
CoverImage = ImageIO.read(CoverFile);
writer.write("artwork=" + CoverField.getText() + "\n");
writer.write("imgwidth=" + CoverImage.getWidth() + "\n");
writer.write("imgheight=" + CoverImage.getHeight() + "\n");
isCover = true;
} catch (IOException e) {
JOptionPane.showMessageDialog(this, selectedLanguage[12]);
isCover = false;
}
writer.write("editpointcount=" + Editpoints + "\n\n\n\n\n\n");
int i;
for (i = 1; i <= Editpoints; i++) {
writer.write("[Editpoint_" + i + "]\n");
if (isCover == true) {
writer.write("image=" + CoverField.getText() + "\n");
}
writer.write("audiofile=" + i + " " + Folder.getText() + ".m4a\n");
writer.write("chapter=" + i + "\n");
writer.write("start=" + "\n\n\n");
}
writer.close();
JOptionPane.showMessageDialog(null, selectedLanguage[8]);
System.exit(0);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, selectedLanguage[9]);
}
}
public void createSelf() {
try {
FileWriter creator = new FileWriter("Podcast.POD");
BufferedWriter writer = new BufferedWriter(creator);
int Editpoints = (int) Double.parseDouble(editpointField.getValue().toString());
boolean isCover;
writer.write("[Podcast]\n");
writer.write("altfolder1=" + Folder.getText() + "\n");
writer.write("basename=" + Folder.getText() + "\n");
writer.write("audiobook=true" + "\n");
try {
File CoverFile = new File(Folder.getText() + "\\" + CoverField.getText());
CoverImage = ImageIO.read(CoverFile);
writer.write("artwork=" + CoverField.getText() + "\n");
writer.write("imgwidth=" + CoverImage.getWidth() + "\n");
writer.write("imgheight=" + CoverImage.getHeight() + "\n");
isCover = true;
} catch (IOException e) {
JOptionPane.showMessageDialog(this, selectedLanguage[12]);
isCover = false;
}
writer.write("editpointcount=" + Editpoints + "\n\n\n");
int i;
for (i = 1; i <= Editpoints; i++) {
String Title = JOptionPane.showInputDialog(this, selectedLanguage[7] + i);
if (Title == null) {
throw new Exception("go");
}
writer.write("[Editpoint_" + i + "]\n");
if (isCover == true) {
writer.write("image=" + CoverField.getText() + "\n");
}
File audioFile = new File(Folder.getText() + "\\" + Title + ".m4a");
try {
AudioFile af = AudioFileIO.read(audioFile);
System.out.println(af.getAudioHeader().getTrackLength() + "\n" + af.getFile().getName());
System.out.println("||");
writer.write("audiofile=" + Title + ".m4a\n");
writer.write("chapter=" + i + "\n");
writer.write("start="+time.asString()+".00" + "\n\n\n");
time.add(0, 0, af.getAudioHeader().getTrackLength());
} catch (CannotReadException exc) {
System.out.println("CannotReadException\n" + audioFile.exists());
} catch (IOException exc) {
System.out.println("IOException");
} catch (TagException exc) {
System.out.println("TagException");
} catch (ReadOnlyFileException exc) {
System.out.println("ReadOnlyFileException");
} catch (InvalidAudioFrameException exc) {
System.out.println("InvalidAudioFrameException");
}
}
writer.close();
JOptionPane.showMessageDialog(null, selectedLanguage[8]);
System.exit(0);
} catch (Exception e) {
if (!e.getMessage().equals("go")) {
JOptionPane.showMessageDialog(null, selectedLanguage[9]);
}
}
}
public void createMultiCD() {
try {
FileWriter creator = new FileWriter("Podcast.POD");
BufferedWriter writer = new BufferedWriter(creator);
int Editpoints = (int) Double.parseDouble(editpointField.getValue().toString());
boolean isCover;
writer.write("[Podcast]\n");
writer.write("altfolder1=" + Folder.getText() + "\n");
writer.write("basename=" + Folder.getText() + "\n");
try {
File CoverFile = new File(Folder.getText() + "\\" + CoverField.getText());
CoverImage = ImageIO.read(CoverFile);
writer.write("artwork=" + CoverField.getText() + "\n");
writer.write("imgwidth=" + CoverImage.getWidth() + "\n");
writer.write("imgheight=" + CoverImage.getHeight() + "\n");
isCover = true;
} catch (IOException e) {
JOptionPane.showMessageDialog(this, selectedLanguage[12]);
isCover = false;
}
writer.write("editpointcount=" + Editpoints + "\n\n\n\n\n\n");
String CDs = JOptionPane.showInputDialog(this, selectedLanguage[10]);
if (CDs == null) {
throw new Exception("go");
}
int CDNumber = (int) Double.parseDouble(CDs);
int i;
int allTracks[] = new int[1000];
for (i = 1; i <= CDNumber; i++) {
String Tracks = JOptionPane.showInputDialog(this, selectedLanguage[11] + i);
if (Tracks == null) {
throw new Exception("go");
}
allTracks[i - 1] = (int) Double.parseDouble(Tracks);
}
int i1;
int i2;
int i3 = 0;
for (i1 = 1; i1 <= CDNumber; i1++) {
for (i2 = 1; i2 <= allTracks[i1 - 1]; i2++) {
i3++;
writer.write("[Editpoint_" + i3 + "]\n");
if (isCover == true) {
writer.write("image=" + CoverField.getText() + "\n");
}
writer.write("audiofile=" + i1 + "-" + i2 + " " + Folder.getText() + ".m4a\n");
writer.write("chapter=" + i + "\n");
writer.write("start=" + "\n\n\n");
}
}
writer.close();
JOptionPane.showMessageDialog(null, selectedLanguage[8]);
System.exit(0);
} catch (Exception e) {
if (!e.getMessage().equals("go")) {
JOptionPane.showMessageDialog(null, selectedLanguage[9]);
}
}
}
public static void main(String[] args) {
LAF.LAF.setLAF(LAF.LAF.Windows);
new audiobookMaker();
}
}
//~ Formatted by Jindent --- http://www.jindent.com

385
src/audiobookMakerPro.java Executable file
View File

@@ -0,0 +1,385 @@
//~--- non-JDK imports --------------------------------------------------------
import Dating.Time;
import Exceptions.*;
import LAF.LAF;
import org.jaudiotagger.audio.*;
import org.jaudiotagger.audio.exceptions.*;
import org.jaudiotagger.tag.*;
//~--- JDK imports ------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import javax.imageio.*;
import javax.swing.*;
import javax.swing.event.*;
public class audiobookMakerPro extends JFrame implements ListSelectionListener, ActionListener {
private static Dimension ScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
static audiobookMakerPro maker;
private boolean hasImage = false;
private Time time = new Time(0, 0, 0);
// private JButton remove;
// private JButton up;
private BufferedImage Cover;
private String CoverName;
private JPanel buttonPanel;
private ButtonGroup chapterGroup;
private JButton chooseImage;
private JButton create;
private File[] files;
// private JButton down;
// private JList list;
// private DefaultListModel mod;
private int numberOfFiles;
// private JButton openFiles;
private JButton output;
private String outputFolder;
private JLabel selectedFolder;
private JLabel selectedImage;
private JRadioButton typeSelf;
private JRadioButton useFilenames;
private JRadioButton useNumbers;
public audiobookMakerPro() {
this("iPod Audiobook Maker");
}
public audiobookMakerPro(String s) {
super(s);
}
public void initComponents() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setIconImage(new ImageIcon(this.getClass().getResource("/Data\\icon.gif")).getImage());
setLayout(new FlowLayout());
// mod = new DefaultListModel();
// list = new JList(mod);
// list.addListSelectionListener(this);
// list.setVisibleRowCount(20);
JPanel labelPanel = new JPanel(new FlowLayout());
selectedFolder = new JLabel("Ordner: <Keiner> -");
selectedImage = new JLabel("Cover: <Keins>");
labelPanel.add(selectedFolder);
labelPanel.add(selectedImage);
buttonPanel = new JPanel(new GridLayout(0, 1));
// openFiles = new JButton("Öffnen");
// up = new JButton("Hoch");
// down = new JButton("Runter");
// remove = new JButton("Entfernen");
chooseImage = new JButton("Cover auswählen");
output = new JButton("Ordner");
create = new JButton(".POD Datei erstellen");
chapterGroup = new ButtonGroup();
useNumbers = new JRadioButton("Kapitel durchnummerieren", true);
useFilenames = new JRadioButton("Dateinamen als Kapitelnamen verwenden", false);
typeSelf = new JRadioButton("Kapitel selber benennen", false);
output.setToolTipText(
"<html><head></head><body><b>Der Name des Unterordners im Slideshow Assembler-Verzeichnis</b>, in dem die Audiodateien liegen<br />und in dem die .POD Datei und die .m4b Datei gespeichert werden sollen</body></html>");
chooseImage.setToolTipText("Der Name der Bilddatei im \"Ordner\", die als Cover verwendet werden soll");
useNumbers.setToolTipText("Die Namen der Kapitel werden \"001, 002, ...\" genannt");
useFilenames.setToolTipText(
"<html><head></head><body>Die Namen der Kapitel werden nach den Namen der dazugehörigen Dateien benannt.<br>"
+ "Oft werden die Namen dadurch <b>besonders lang</b>.</body></html>");
typeSelf.setToolTipText("Kapitelnamen selber angeben");
// openFiles.addActionListener(this);
// remove.addActionListener(this);
chooseImage.addActionListener(this);
output.addActionListener(this);
create.addActionListener(this);
chapterGroup.add(useNumbers);
chapterGroup.add(useFilenames);
chapterGroup.add(typeSelf);
// buttonPanel.add(openFiles);
// buttonPanel.add(up);
// buttonPanel.add(down);
// buttonPanel.add(remove);
buttonPanel.add(labelPanel);
buttonPanel.add(output);
buttonPanel.add(chooseImage);
buttonPanel.add(create);
buttonPanel.add(useNumbers);
buttonPanel.add(useFilenames);
buttonPanel.add(typeSelf);
try {
String file = this.getClass().getResource("/Readme.html").getPath();
file = file.replaceAll("%20", " ");
file = file.replaceFirst("/", " ");
System.out.println(file);
if (new File(file).exists()) {
try{
buttonPanel.add(new frame.JLink(new File(file), "Readme und Tutorial öffnen", Color.BLUE));
}
catch(IOException exc){
JOptionPane.showMessageDialog(null, "IO");
throw new FileNotFoundException();
}
}
/*
* if(new File(this.getClass().getResource("/Test/Bild.jpg").getFile()).exists()){
* / buttonPanel.add(new frame.JLink(new File(this.getClass().getResource("/Test/Bild.jpg").getFile()), "Readme öffnen", Color.BLUE));
* buttonPanel.add(new frame.JLink(new File("C:/Documents and Settings/Kim/Desktop/Java/Audiobook Maker/build/classes/Test/Bild.jpg"), "Readme öffnen", Color.BLUE));
* }
*/
else {
throw new FileNotFoundException();
}
} catch (FileNotFoundException exc) {
JOptionPane.showMessageDialog(null, "Readme wech");
}
// add(new JScrollPane(list));
add(buttonPanel);
pack();
setLocation((ScreenSize.width - getWidth()) / 2, (ScreenSize.height - getHeight()) / 2);
setResizable(true);
setVisible(true);
}
public static String castFileToListEntry(File f) {
String s = "<html><head></head><body><b>" + f.getName() + "</b><br />|->" + f.getAbsolutePath()
+ "</body></html>";
return s;
}
/*
* public void addFilesToList(File[] files) {
* for (int i = 0; i < files.length; i++) {
* addFileToList(files[i]);
* }
* }
*
* public void addFileToList(File f) {
* this.mod.add(this.numberOfFiles, castFileToListEntry(f));
* files[numberOfFiles] = f;
* numberOfFiles++;
* this.list.repaint();
* }
*/
public static void main(String[] args) {
LAF.setLAF(LAF.Mac);
maker = new audiobookMakerPro();
maker.initComponents();
}
public void valueChanged(ListSelectionEvent evt) {}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Ordner")) {
outputFolder = JOptionPane.showInputDialog(null, "Bitte Namen des Ordners angeben", "Eingabe",
JOptionPane.PLAIN_MESSAGE);
try {
File f = new File(outputFolder);
if (!f.exists() ||!f.isDirectory()) {
throw new FolderException();
}
files = f.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().endsWith(".m4a");
}
});
selectedFolder.setText("Ordner: " + outputFolder + " -");
selectedFolder.repaint();
} catch (FolderException exc) {
JOptionPane.showMessageDialog(null, "Ordner wurde nicht gefunden", "Fehler", JOptionPane.ERROR_MESSAGE);
outputFolder = null;
}
}
if (e.getActionCommand().equals("Cover auswählen")) {
if (outputFolder != null) {
String s = JOptionPane.showInputDialog(null, "Bitte Namen der Bilddatei eingeben", "Eingabe",
JOptionPane.PLAIN_MESSAGE);
try {
if (s == null) {
throw new IOException("go");
}
if (!s.toLowerCase().endsWith(".jpg")) {
if (!s.toLowerCase().endsWith(".png")) {
throw new EndingException();
}
}
Cover = ImageIO.read(new File(outputFolder + "\\" + s));
this.hasImage = true;
selectedImage.setText("Cover: " + s);
} catch (IOException exc) {
if (!exc.getMessage().equals("go")) {
Cover = null;
JOptionPane.showMessageDialog(null, "Bilddatei wurde nicht gefunden", "Fehler",
JOptionPane.WARNING_MESSAGE);
this.hasImage = false;
}
} catch (EndingException exc) {
JOptionPane.showMessageDialog(null, "Das Cover muss eine .jpg oder .png Datei sein", "Fehler",
JOptionPane.ERROR_MESSAGE);
Cover = null;
this.hasImage = false;
}
if (Cover != null) {
this.hasImage = true;
this.CoverName = s;
}
} else {
JOptionPane.showMessageDialog(null, "Bitte geben sie zuerst einen Ausgabeordner an", "Fehler",
JOptionPane.ERROR_MESSAGE);
}
}
if (e.getActionCommand().equals(".POD Datei erstellen")) {
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try {
if (outputFolder == null) {
throw new NoFolderSelectedException();
}
if (files == null) {
throw new NoFilesSelectedException();
}
if (!hasImage) {
if (JOptionPane.showConfirmDialog(null,
"Es wurde kein Cover ausgewählt.\nDatei trotzdem erstellen?",
"Kein Cover", JOptionPane.YES_OPTION) == JOptionPane.NO_OPTION) {
throw new EndingException();
}
}
int i = 0;
try {
FileWriter fWriter = new FileWriter(outputFolder + "\\Podcast.POD");
BufferedWriter writer = new BufferedWriter(fWriter);
writer.write("[Podcast]\n");
writer.write("altfolder1=" + outputFolder + "\n");
writer.write("basename=" + outputFolder + "\n");
writer.write("audiobook=true" + "\n");
if (this.hasImage) {
writer.write("artwork=" + CoverName + "\n");
writer.write("imgwidth=" + Cover.getWidth() + "\n");
writer.write("imgheight=" + Cover.getHeight() + "\n");
}
writer.write("editpointcount=" + files.length + "\n\n\n");
for (i = 0; i < files.length; i++) {
writer.write("[Editpoint_" + (i + 1) + "]\n");
if (this.hasImage) {
writer.write("image=" + CoverName + "\n");
}
writer.write("audiofile=" + files[i].getName() + "\n");
if (useNumbers.isSelected()) {
writer.write("chapter=");
if ((i + 1) < 100) {
writer.write("0");
if ((i + 1) < 10) {
writer.write("0");
}
}
writer.write((i + 1) + "\n");
} else if (useFilenames.isSelected()) {
writer.write("chapter=" + files[i].getName() + "\n");
} else if (typeSelf.isSelected()) {
String s = JOptionPane.showInputDialog(null,
"Kapitelname der Datei " + files[i].getName() + " angeben (" + (i + 1)
+ " von " + files.length + ")", "Kapitelnamen eingeben",
JOptionPane.PLAIN_MESSAGE);
if (s == null) {
throw new EndingException();
}
writer.write("chapter=" + s + "\n");
}
writer.write("start=" + time.asString() + ".00\n\n");
AudioFile af = AudioFileIO.read(files[i]);
time.add(0, 0, af.getAudioHeader().getTrackLength());
}
writer.close();
JOptionPane.showMessageDialog(null, "Fertig!\nDas Program schließt automatisch", "Fertig",
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
} catch (CannotReadException exc) {
JOptionPane.showMessageDialog(null,
"<html><head></head><body>Die Datei<br><b>" + files[i]
+ "</b><br>konnte nicht gelesen werden</body></html>", "Fehler",
JOptionPane.ERROR_MESSAGE);
} catch (TagException exc) {
JOptionPane.showMessageDialog(
null,
"<html><head></head><body>Es ist ein unbekannter Fehler bei der Datei<br><b>" + files[i]
+ "</b><br>aufgetreten</body></html>", "Fehler", JOptionPane.ERROR_MESSAGE);
} catch (ReadOnlyFileException exc) {
JOptionPane.showMessageDialog(null,
"<html><head></head><body>Die Datei<br><b>" + files[i]
+ "</b><br>ist eine Read-Only Datei</body></html>", "Fehler",
JOptionPane.ERROR_MESSAGE);
} catch (InvalidAudioFrameException exc) {
JOptionPane.showMessageDialog(
null,
"<html><head></head><body>Es ist ein unbekannter Fehler bei der Datei<br><b>" + files[i]
+ "</b><br>aufgetreten</body></html>", "Fehler", JOptionPane.ERROR_MESSAGE);
} catch (IOException exc) {
JOptionPane.showMessageDialog(null, "Es ist ein unbekannter Fehler aufgetreten", "Fehler",
JOptionPane.ERROR_MESSAGE);
}
} catch (NoFolderSelectedException exc) {
JOptionPane.showMessageDialog(null, "Bitte wählen sie einen Ausgabeordner an", "Fehler",
JOptionPane.ERROR_MESSAGE);
} catch (NoFilesSelectedException exc) {
JOptionPane.showMessageDialog(null, "Es wurden keine Dateien ausgewählt", "Fehler",
JOptionPane.ERROR_MESSAGE);
} catch (EndingException exc) {}
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
}
//~ Formatted by Jindent --- http://www.jindent.com

150
src/frame/JHyperLink.java Executable file
View File

@@ -0,0 +1,150 @@
package frame;
//~--- JDK imports ------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
public class JHyperLink extends JLabel implements MouseListener {
public Cursor Rollover_Cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
public Color LINK_COLOR;
public URI uri;
public JHyperLink() {}
public JHyperLink(String url) throws URISyntaxException {
super(url);
LINK_COLOR = Color.BLUE;
this.setForeground(LINK_COLOR);
uri = new URI(url);
this.addMouseListener(this);
}
public JHyperLink(String url, Color color) throws URISyntaxException {
super(url);
LINK_COLOR = color;
this.setForeground(LINK_COLOR);
uri = new URI(url);
this.addMouseListener(this);
}
public JHyperLink(String url, String title) throws URISyntaxException {
super(title);
this.LINK_COLOR = Color.BLUE;
this.setForeground(LINK_COLOR);
uri = new URI(url);
this.addMouseListener(this);
}
public JHyperLink(String url, String title, Color color) throws URISyntaxException {
super(title);
LINK_COLOR = color;
this.setForeground(LINK_COLOR);
uri = new URI(url);
this.addMouseListener(this);
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
if (enabled == true) {
MouseListener[] listeners = this.getMouseListeners();
try {
MouseListener listener = listeners[0];
} catch (Exception exc) {
this.addMouseListener(new JHyperLink());
}
}
if (enabled == false) {
MouseListener[] listeners = this.getMouseListeners();
for (int i = 0; ; i++) {
try {
MouseListener listener = listeners[i];
this.removeMouseListener(listener);
} catch (Exception exc) {
break;
}
}
}
}
public void setColor(Color color) {
this.LINK_COLOR = color;
super.setForeground(color);
}
public void setColor(int r, int g, int b) {
Color color = new Color(r, g, b);
this.setColor(color);
}
public void setColor(int r, int g, int b, int a) {
Color color = new Color(r, g, b, a);
this.setColor(color);
}
public Color getColor() {
return this.LINK_COLOR;
}
public void setURI(URI uri) {
this.uri = uri;
}
public void setURI(String uri) throws URISyntaxException {
this.uri = new URI(uri);
}
public URI getURI() {
return this.uri;
}
public void setText(String text, Color color) {
super.setText(text);
this.setColor(color);
}
public void setText(String text, int r, int g, int b) {
super.setText(text);
this.setColor(r, g, b);
}
public void setText(String text, int r, int g, int b, int a) {
super.setText(text);
this.setColor(r, g, b, a);
}
public void mouseClicked(MouseEvent e) {
JHyperLink link = (JHyperLink) e.getComponent();
try {
Desktop.getDesktop().browse(link.uri);
} catch (java.io.IOException exc) {}
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {
JHyperLink link = (JHyperLink) e.getComponent();
link.setCursor(link.Rollover_Cursor);
}
public void mouseExited(MouseEvent e) {}
}
//~ Formatted by Jindent --- http://www.jindent.com

180
src/frame/JLink.java Executable file
View File

@@ -0,0 +1,180 @@
package frame;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.awt.*;
public class JLink extends JLabel{
public File file;
public Color LINK_COLOR;
public Cursor Rollover_Cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
public JLink(){
this(Color.RED);
}
public JLink(Color color){
super();
this.LINK_COLOR = color;
this.setForeground(LINK_COLOR);
this.file = null;
}
public JLink(String file)throws FileNotFoundException{
this(new File(file), file, Color.RED);
}
public JLink(String file, Color color)throws FileNotFoundException{
this(new File(file), file, color);
}
public JLink(String file, String title)throws FileNotFoundException{
this(new File(file), title, Color.RED);
}
public JLink(String file, String title, Color color)throws FileNotFoundException{
this(new File(file), title, color);
}
public JLink(File file)throws FileNotFoundException{
this(file, file.getAbsolutePath(), Color.RED);
}
public JLink(File file, Color color)throws FileNotFoundException{
this(file, file.getAbsolutePath(), color);
}
public JLink(File file, String title)throws FileNotFoundException{
this(file, title, Color.RED);
}
public JLink(File file, String title, Color color)throws FileNotFoundException{
super(title);
this.LINK_COLOR = color;
this.setForeground(LINK_COLOR);
this.file = file;
this.addMouseListener(new Linklistener());
if(this.file.exists() == false){throw new FileNotFoundException();}
}
public void setCursor(Cursor cursor){
this.Rollover_Cursor = cursor;
super.setCursor(cursor);
}
public File getFile(){
return this.file;
}
public void setFile(File file)throws IOException{
if(file.exists()){this.file = file;}
else {
this.file = null;
throw new IOException();
}
if(this.isEnabled() == true){
MouseListener[] listeners = this.getMouseListeners();
try{
MouseListener listener = listeners[0];
}
catch(Exception exc){
this.addMouseListener(new Linklistener());
}
}
}
public void setFile(String file)throws IOException{
if(new File(file).exists()){this.file = new File(file);}
else {
this.file = null;
throw new IOException();
}
if(this.isEnabled() == true){
MouseListener[] listeners = this.getMouseListeners();
try{
MouseListener listener = listeners[0];
}
catch(Exception exc){
this.addMouseListener(new Linklistener());
}
}
}
public void setColor(Color color){
this.LINK_COLOR = color;
super.setForeground(color);
}
public void setColor(int r, int g, int b){
Color color = new Color(r, g, b);
this.setColor(color);
}
public void setColor(int r, int g, int b, int a){
Color color = new Color(r, g, b, a);
this.setColor(color);
}
public Color getColor(){
return this.LINK_COLOR;
}
@Override
public void setEnabled(boolean enabled){
super.setEnabled(enabled);
if(enabled == true){
MouseListener[] listeners = this.getMouseListeners();
try{
MouseListener listener = listeners[0];
}
catch(Exception exc){
this.addMouseListener(new Linklistener());
}
}
if(enabled == false){
MouseListener[] listeners = this.getMouseListeners();
for(int i = 0;; i++){
try{
MouseListener listener = listeners[i];
this.removeMouseListener(listener);
}
catch(Exception exc){
break;
}
}
}
}
public void setText(String text, Color color){
super.setText(text);
this.setColor(color);
}
public void setText(String text, int r, int g, int b){
super.setText(text);
this.setColor(r, g, b);
}
public void setText(String text, int r, int g, int b, int a){
super.setText(text);
this.setColor(r, g, b, a);
}
protected void click(MouseEvent e){
JLink link = (JLink)e.getComponent();
try{
Desktop.getDesktop().open(link.file);
}
catch(java.io.IOException exc){}
}
}
class Linklistener implements MouseListener{
public void mouseClicked(MouseEvent e) {
JLink temp = (JLink)e.getComponent();
temp.click(e);
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
JLink link = (JLink)e.getComponent();
link.setCursor(link.Rollover_Cursor);
}
public void mouseExited(MouseEvent e) {
}
}

65
src/frame/JScreenLine.java Executable file
View File

@@ -0,0 +1,65 @@
package frame;
//~--- JDK imports ------------------------------------------------------------
import java.awt.*;
import javax.swing.*;
public class JScreenLine extends Component {
private JSeparator sep = new JSeparator(JSeparator.HORIZONTAL);
private Component leftComp;
private JProgressBar progressBar;
private JFrame superFrame;
public JScreenLine(boolean withProgressBar) {
if (withProgressBar) {
this.progressBar = new JProgressBar();
} else {}
}
public JProgressBar getProgressBar() {
return progressBar;
}
public void setProgressBarWidth(int width) {
this.progressBar.setSize(width, 19);
}
public void setLeftComp(Component c) {
leftComp = c;
}
public Component getLeftComp() {
return leftComp;
}
public void removeProgressBar() {
this.progressBar = null;
}
public void removeLeftComp() {
this.leftComp = null;
}
public void paint(Graphics g) {
sep.setBounds(0, this.getParent().getHeight() - 22, this.getParent().getWidth(), 10);
this.getParent().add(sep);
if (this.progressBar != null) {
this.progressBar.setBounds(this.getParent().getWidth() - this.progressBar.getWidth(),
this.getParent().getHeight() - this.progressBar.getHeight(), 150, 19);
this.getParent().add(this.progressBar);
}
if (leftComp != null) {
int w = leftComp.getWidth();
leftComp.setBounds(0, this.getParent().getHeight() - 22, w, 22);
this.getParent().add(leftComp);
}
}
}
//~ Formatted by Jindent --- http://www.jindent.com