PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java - import


Dr.Doom
2004-03-29, 14:25:06
Howdy,

ich versuche gerade ein altes Applet zu aktualisieren.

Dort gibt es eine Klasse "Prozeduren", die als eine Sammlung für Konstanten und Prozeduren dient, welche in anderen Klassen oft wiederverwendet werden.

Andere Klassen importieren die Klasse "Prozeduren":
...
import java.awt.*;
import Prozeduren;
...

und greifen dann auf Konstanten und Prozeduren in Klasse "Prozeduren" zu:

JTextField jtf01 = Prozeduren.addMyTextField(..);


Wenn ich aber nun das Ganze neu übersetzen will (SDK 1.4.2_04), dann wird gemeckert, dass

bei "import Prozeduren;" anstelle des Semikolons ein Punkt erwartet wird.

Korrigiere ich die betreffenden Zeilen in "import Prozeduren.*;", wird gemeckert, dass das Package "Prozeduren" nicht existiert.

Was muss ich denn da nun machen, um das wieder übersetzbar zu machen?
Mit JDK 1.2 und 1.3 lief das alles in der vorhandenen Form noch ;) .

Stone2001
2004-03-29, 14:40:26
Probier mal die Klasse als Superklasse zu verwenden.
Also mit
public class KlassenName extends Prozeduren
Das Zeugt war nicht gerade von gutem Design, dürfte aber funktionieren. Du kannst dann die Funktion ganz normal verwenden.

Dr.Doom
2004-03-29, 14:48:23
Die Klassen, die die Klasse "Prozeduren" verwenden, sind selber schon immer von irgendwas abgeleitet. :(

mithrandir
2004-03-29, 15:10:04
In welchem Package liegt die Klasse Prozeduren? Es müsste da eine Anweisung in dieser Art geben (in der Regel am Dateibeginn):

package net.withingames.prozeduren;

public class Prozeduren
{
//...

Wenn dann Klassen aus diesem Package "prozeduren" in einem anderen Package/Projekt/wieauchimmer verwendet werden sollen, müssen diese in der entsprechenden Klasse importiert werden:

import net.withingames.prozeduren.*;

Dann kann auch auf die Klasse direkt (nur mit dem Klassen) zugegriffen werden, zum Beispiel auf eine statische Methode:

Prozeduren.ichBinEineStatischeMethode();

Ohne Import müsste bei jeder Verwendung der Klasse Prozeduren auch das Package angegeben werden, zu dem es gehört - also z.B.:

net.withingames.Prozeduren.ichBinEineStatischeMethode();

Packages werden in der Regel als "umgedrehte" URLs geschrieben, deshalb das Beispiel...

hth, mith

Dr.Doom
2004-03-29, 15:22:17
Ähm, also bisher war "Prozeduren" nur im Standard-Package (also kein Package explizit angegeben).

Prozeduren.class residiert im selben Verzeichnis, wie alle anderen class-Dateien auch.

mithrandir
2004-03-29, 15:25:06
Wenn Prozeduren in keinem anderen Package liegt, dann brauchst du auch keinen Import - die Klasse muss dann lediglich im Classpath liegen, damit sie auch gefunden wird (aber wenn alle Klassen im selben Verzeichnis sind, gibt es ohnehin kein Problem).

bye, mith

Dr.Doom
2004-03-29, 15:41:59
Ist das ein Bug im JDK/SDK 1.4.2_04, oder was?

Wenn ich ein älteres JDK (1.3.x) installiere, kann ich den unveränderten Code problemlos übersetzen. Installiere ich wieder den aktuellen, mosert das Teil wieder herum (siehe Startbeitrag).

Waaah, Fön bekomm' :...(

mithrandir
2004-03-29, 15:50:12
Ein Import ist nur dann nötig, wenn du Klassen aus anderen Packages benutzt. Weil die Klassen aber alle im selben Package (bzw. in gar keinem) sind, brauchst du auch keinen Import. Warum nimmst du ihn also nicht einfach raus und dann geht alles wie gehabt?

Vielleicht waren Versionen < 1.4.x einfach toleranter - das ändert aber nichts daran, dass der Code noch nie wirklich so war, wie sich das gehört hätte...

bye, mith

Dr.Doom
2004-03-29, 16:01:22
Original geschrieben von mithrandir
Ein Import ist nur dann nötig, wenn du Klassen aus anderen Packages benutzt. Weil die Klassen aber alle im selben Package (bzw. in gar keinem) sind, brauchst du auch keinen Import. Warum nimmst du ihn also nicht einfach raus und dann geht alles wie gehabt?Daran liegt's wohl! :idea:

Original geschrieben von mithrandir
Vielleicht waren Versionen < 1.4.x einfach toleranter - das ändert aber nichts daran, dass der Code noch nie wirklich so war, wie sich das gehört hätte...Ich hasse es mich zu blamieren, aber es ist jetzt nunmal passiert. :banghead: :flöt:

Applet (http://mitglied.lycos.de/dummhuhn/app/dct.htm)

HellHorse
2004-03-29, 17:22:01
Original geschrieben von Dr.Doom
Applet (http://mitglied.lycos.de/dummhuhn/app/dct.htm)
Nett, ein paar kleinere Sachen:
- Swing bietet JSlider, dem man anstelle des (J)ScrollBar verwenden kann
- Java2D bietet AA
- SwingSet2 hat eine Demo wie man nichtunterstütze LAF's im Menu deaktiviert
- für die Dinger unter den ScrollBars könnte man JLabel mit Border verwenden, so wäre der Text nicht markierbar.

Dr.Doom
2004-03-29, 17:46:17
Original geschrieben von HellHorse
Nett, ein paar kleinere Sachen:
- Swing bietet JSlider, dem man anstelle des (J)ScrollBar verwenden kann
- Java2D bietet AA
- SwingSet2 hat eine Demo wie man nichtunterstütze LAF's im Menu deaktiviert
- für die Dinger unter den ScrollBars könnte man JLabel mit Border verwenden, so wäre der Text nicht markierbar.
Jo, danke für die Tipps, aber all zuviel wollte ich nicht mehr ändern ;) .

1. AA?

2. LAFs: Alles ausser Metal und Motif kommt eh raus (war nur eine Spielerei).

3. Die Dinger unter den Scrollbars sollten eigentlich Textfelder bleiben, damit man da auch Werte direkt eintragen kann (Scrollbar wird dann angepasst).
Ich hab' nur den Filler (in beide Richtungen expandieren) beim Einfügen vergessen zu setzen.
Wegen dem GridBagLayout werde ich sicherlich irgendwann mal in eine Anstalt eingeliefert. :D
(Hab's nun korrigiert.)


Ich hab' aber - glaube ich - einen Fehler in der Berechnung der Punkte:

Wenn man den Scrollbar für Koeffizient U6 betätigt, dann sieht man im Bild (http://mitglied.lycos.de/dummhuhn/bilder/dct_u6.jpg), dass die Punkte auf gleicher Höhe liegen.

Betätigt man aber Scrollbar für U3, dann liegen die Punkte nicht auf einer Ebene ( Bild U3 (http://mitglied.lycos.de/dummhuhn/bilder/dct_u3.jpg)).

Allerdings bin ich mir unsicher, ob das nicht-auf-einer-Ebene-liegen nicht egal ist, da die Punkte ja nur die Repräsentation von Grauwerten (0 bis 255) sind und eigentlich nichts mit einer Kosinusschwingung zu tun haben.
Mit den Scrollbars maipuliert man die Koeffizienten der DCT, aber im Bild links hat man per iDCT die Werte vom "Signalraum" in den "Bildraum" transformiert.

Aaaach, das ist alles so lange her, ich weiss gar nicht mehr, was ich da alles gemacht habe... :(

HellHorse
2004-03-29, 20:31:27
Original geschrieben von Dr.Doom
1. AA?

AntiAliasing.

Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

Wenn du dann mit g oder g2d zeichnest, ist es an.
Original geschrieben von Dr.Doom
3. Die Dinger unter den Scrollbars sollten eigentlich Textfelder bleiben, damit man da auch Werte direkt eintragen kann (Scrollbar wird dann angepasst).

:ups:
Original geschrieben von Dr.Doom
Wegen dem GridBagLayout werde ich sicherlich irgendwann mal in eine Anstalt eingeliefert. :D

Naja, man kann Componenten/Containers ja auch schachteln um Übersichtlickeit zu erhalten.
Daneben sollen JGoodies Forms und UIHierarchy gut sein, konnte sie bis jetzt aber noch nicht testen.