Hallo,
Also zuerst einmal ich bin neu hier im Forum und hab gleich mal ein großes Problem.
Und zwar hab ich eine .html Datei die ich in eine Java Datei umschreiben möchte.
Die .html Datei besteht eigentlich nur aus einer großen Tabelle die in mehrere kleine Tabellen unterteilt ist. Die mittlere Tabelle ist die wichtigste Tabelle von allen. Dort befinden sich mehrere "Textboxen" in die man etwas eintragen kann. Am Ende der mittleren Tabelle befindet sich noch ein Button (Der Button mit seinen genaueren Funktionen ist vorerst unwichtig).
Damit ihr das auch besser nachvollziehen könnt hab ich hier mal ein Bild hochgeladen.
Die schwarzen Linie sind die Aufteilung meiner Tabelle (Das in der Mitte ist natürlich auch eine Tabelle bestehend aus 7 Zeilen und 2 Spalten)
Wundert euch nicht über die komische Aufteilung. Am Ende werden noch ein paar Bilder etc. eingefügt.
Mein Problem ist jetzt das ich keine Ahnung hab wie ich diese Datei in eine .java Datei umschreiben kann. Am Ende möchte ich weiterhin eine .html Datei haben die ich öffnen kann mit dem einzigen unterschied das die Tabelle nicht in .html sondern in .java geschrieben ist. Da ich selbst keine Ahnung hab wie ich das schaffe, hoffe ich mal das jemand von euch mir weiter helfen kann.
Ich möchte eigentlich nur von euch ein paar Ansätze wissen damit ich es selbst umschreiben kann.
Am Ende möchte ich weiterhin eine .html Datei haben die ich öffnen kann mit dem einzigen unterschied das die Tabelle nicht in .html sondern in .java geschrieben ist.
Also zuerst einmal Danke für die Schnell Hilfe ich werde mich morgen gleich mal dran setzen und das was du mir gesagt hast versuchen um zusetzen.
----------------
Das war vielleicht ein Fehler von mir. Ich hab mich glaub ich ein bisschen undeutlich ausgedrückt.
Am Ende möchte ich weiterhin eine .html Datei haben die ich öffnen kann mit dem einzigen unterschied das die Tabelle nicht in .html sondern in .java geschrieben ist.
Damit wollte ich eigentlich Bezug auf die Applet Funktion beziehen.
Einfaches Beispiel was ich mal gemacht hab:
Java:
importjava.applet.*;importjava.awt.*;publicclassHallo01extends java.applet.Applet{publicvoidpaint(Graphics g){
g.drawString("Hallo, viel Erfolg mit Java!",100,50];}}[/Java][HTML]<html><head><title>HalloApplet</title></head><body><applet code="Hallo01.class"width=350 height=90</applet></body></html>[/HTML]Ich bin mir jetzt nicht sicher ob ich das ganze auf mit einer Tabelle umsetzen kann.Ich hoffe du verstehst jetzt ungefähr was ich meine :).----------------[QUOTE]Wieso?Was erhoffst du dir davon?[/QUOTE]Das ganze dient eigentlich nur als ein Training für mich.Ich war einfach nur neugierig ob das ganze Funktioniert und ich in der Lage bin das um zusetzen.----------------Ich werd morgen berichten wie weit ich es geschaft habe.Gruß
Erdnuss
Soooooo,
Ich hab mich heute Mittag mal 2 Stunden hingesetzt und hab mit den Tipps von Suinos und der Hilfe von google etwas zusammen gewürfelt.
Das was ich mir da zusammen gewürfelt hab sieht irgendwie kompliziert und viel aus. Also ich bin mir bei der Sache nicht 100% sicher.
Ich würde mich sehr über Vorschläge und Verbesserungen freuen.
[JAVA=1]
import java.awt.*;
import javax.swing.*;
public class Test {
final static boolean shouldFill = true;
final static boolean shouldWeightX = true;
final static boolean RIGHT_TO_LEFT = false;
public static void addComponentsToPane(Container pane) {
if (RIGHT_TO_LEFT) {
pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
JLabel label;
JTextField textfield;
JButton button;
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
if (shouldFill) {
c.fill = GridBagConstraints.HORIZONTAL;
}
Das das GridBagLayout IST kompliziert (ganz subjektiv: Ich finde das eine gräßliche Klasse :autsch: gibt IMHO nur wenige Fälle, wo das wirklich Sinn macht...). Also, rein vom Layout her wäre sowas ja schon... kompakter
Dieser Rand, der da außen rum sein soll ist schon eher ungewöhnlich. Normalerweise hat man eher das Problem, zuwenig Platz zu haben. Man könnte da was mit einer EmptyBorder machen, aber ... üblich ist das nicht.
EDIT: Als nachtrag: Eine bestimmte Größe festzulegen macht man eben üblicherweise nicht - das überläßt man dem LayoutManager. Man kann den Components aber eine bevorzugte Größe geben, und die LayoutManager versuchen ggf., diesen Wunsch zu erfüllen:
someComponent.setPreferredSize(new Dimension(300,50));
Einen kleinen Abstrand kann man ggf. auch mit einem Rand oder einer anderen Layout-Verschachtelung hinkriegen. Aber leg' dich nicht so auf pixelgenaues aussehen fest.
EDIT2: Das Aussehen der ursprünglichen Tabelle ist zufällig genau das, wofür man GridBagLayout verwenden würde, aber nicht ganz in der Form, wie es bisher gemacht wurde. (Es macht z.B. keinen Sinn, eigenschaften in GridBagConstraints zu setzen, die man vorher schon gesetzt hat)
Danke schön für deine sehr schnelle Antwort.
Deine Umsetzung ist wesentlich leichter und verständlicher (auch für mich ).
Ich werd mich morgen Mittag wieder darum kümmern und werd dann auch gleich zum nächsten Schritt über gehen. Da ich da bestimmt wieder Problem hab meld ich mich wieder hier.
Sooo mein nächstes Problem läss mal wiedern icht lange auf sich warten. Ich konnte jetzt dank der Hilfe von Marco13 meine Tabelle um einiges leichter gestalten. Nun möchte ich dem Button Funktionen zuweißen.
Bis jetzt wird ja nur ein Button angezeigt:
[JAVA=1]p.add(new JButton("Kaufen"));[/code]
Ich möchte das aber so machen:
In die Textfelder kann ich etwas rein schreiben (funktioniert ja jetzt schon^^) [JAVA=1]p.add(new JTextField(""));[/code]
Das was ich in die Textfelder rein schreibe soll, peer klick auf den Button unten angezeigt werden.(In meinem PHP-Dokument hab ich das mit Hilfe von html/mysql/php gemacht). [JAVA=1]
p.add(new JLabel("Produkt", JLabel.CENTER));
p.add(new JLabel("Besteller", JLabel.CENTER));
[/code]
Danach sollen die Textfelder wieder leer sein nur bei Produkt/Besteller soll etwas drin stehen
Muss ich die PHP sachen überhaupt umschreiben oder kann ich das ganze irgendwie mit einander Verknüpfen?
Ich hoffe mal dass, das irgendwie unkompliziert funktioniert. (Bestimmt nicht )
Das, was ich gepostet hatte, hat (wie deine ursprüngliche Lösung) nur die Components in einem bestimmten Layout angezeigt. Um auf diese Components zugreifen zu können, muss man sie natürlich noch irgendwo vorhalten.
Das Panel, das in "init" erzeugt wird, wird nie dem Frame hinzugefügt. (Und wenn du gesagt hättest, was das Problem ist, hätte man das vielleicht auch ohne Test erkannt). Du solltest meine geposteten Codeschnipsel nicht als 1:1-Referenzlösungen in dein Programm packen (und wenn, dann die kleingeschriebenen Variablennamen beibehalten!). Um ein bißchen Überlegen wirst du nicht drumrumkommen...
Sag nächstes mal was das Problem ist, da die die helfen wollen dein Code ggf. rauskopieren müssen um zu sehen was das Problem ist. Wenn du schon von Beginn an sagst was das Problem ist, wird es für die anderen einfacher nach dem Fehler zu suchen.
Sag nächstes mal was das Problem ist, da die die helfen wollen dein Code ggf. rauskopieren müssen um zu sehen was das Problem ist. Wenn du schon von Beginn an sagst was das Problem ist, wird es für die anderen einfacher nach dem Fehler zu suchen.
Ja das nächstemal schreib ich gleich dazu was für ein Problem ich hab^^
War nur in eile und wollte das so schnell wie möglich posten. Kommt nicht wieder vor :applaus:.
Sooo ich hab jetzt mit der Hilfe von Deros das Problem fast gelöst. (Danke nohchmal an dich ).
Der Java Code sieht jetzt wie folgt aus:
[JAVA=1]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TestWindow extends JFrame {
private static final long serialVersionUID = -1261578283155362972L;
public TestWindow() {
setTitle("Auftrag");
int windowWidth = 275;
int windowHeight = 500;
setBounds(50, 100, windowWidth, windowHeight);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel(null);
p.setBackground(new Color(3,64,240));
p.setBounds(0, 0, windowWidth, windowHeight);
ActionListener al = new ActionListener() {
public void actionPerformed( ActionEvent e ) {
JButton button=(JButton) e.getSource();
JPanel panel=(JPanel) button.getParent();
In wie fern soll das Programm an der identischen Abfrage erkennen, ob es sich um produkt 1 oder 2 handelt?
Mach die JTextField in ein Array rein, dann brauchst du auch nicht über die Componenten zu iterieren.
jop entweder das JTextField anhand des Namen (.getName()) identifizieren oder sie halt anderweitig abspeichern, funktionieren würde wohl beides, aber so ist Käse, kriegst für alle den Wert des letzten Feldes
ActionListener al = new ActionListener() {
public void actionPerformed( ActionEvent e ) {
JButton button=(JButton) e.getSource();
JPanel panel=(JPanel) button.getParent();
[JAVA=1]
import java.applet.*;
import java.awt.*;
public class Hallo01 extends java.applet.Applet
{
public void paint(Graphics g)
{
g.drawString("Hallo, viel Erfolg mit Java!",100,50];
}
}
[/code]
Und genau dieses getComponentCount/getComponent/getName/instanceof :autsch: -Gekrampfe war das, was ich mit "Hacks" meinte: Das ist grober Unfug :noe: Wenn du die TextFields brauchst, dann speichere sie irgendwo... wie oben schon geschrieben
Und da es bei dir um mehrere JTextFields geht, packt man sie halt in eine List...
~80 statt ~200 Zeilen - und flexibler. (Füg' bei dir mal noch zwei weitere TextFields ein...). Das mit dem null-Layout ist zwar auch nicht so sinnvoll, aber wenn du drauf bestehst...
Falls das so zynisch gemeint war, wie es klang, (ist mir das egal aber) als kleine Rechtfertigung: Wenn man das Programm mit dem bisherigen Ansatz weitergemacht hätte, wäre man damit nicht glücklich geworden :noe: Ich durfte und darf mich selbst mit Software rumplagen, bei der zu jedem Zeitpunkt nur "das gemacht wurde, was gerade jetzt unbedingt gemacht werden muss" (d.h. die bennendste Frage wurde (irgendwie) beantwortet). Was da mittel- und langfristig rauskommt, kann man sich vielleicht vorstellen...