JTabbedPane

Status
Nicht offen für weitere Antworten.

Spin

Top Contributor
Java:
 /*JTabbedPane initialisieren*/
        tp = new JTabbedPane();
        weiter = new JButton("Weiter");
        beenden = new JButton("Beenden");

        /* Erster Tab, bzw. erstes JPanel*/
        p1 = new JPanel();
        p1.setLayout(null); // Layout auf null setzen
        weiter.setBounds(270,380,100,40);
        p1.add(weiter);
        beenden.setBounds(380,380,100,40);
        p1.add(beenden);
        tp.addTab("Warenkorb", p1);

        /*Zweiter Tab, bzw. zweites JPanel*/
        p2 = new JPanel();
        p2.setLayout(null); // Layout auf null setzen
        weiter.setBounds(270,380,100,40);
        p2.add(weiter);
        beenden.setBounds(380,380,100,40);
        p2.add(beenden);
        tp.addTab("Anschrift", p2);


Hey Leute , kann mir jemand sagen , warum er mir meinen Buttons nicht auch in Warenkorb anzeigt!

Hab da ne idee , dass mal zu ändern, versuche es auch gleich ^^..

Aber noch ne frage: Habe noch 2 weitere, also 4 Panels.
Habe es erst mit einer forschleife gemacht , aber dann gemerkt , dass ich es dann nicht hinbekomme, jedes Tab unterschiedlich zu benennen und jedes Panel mit anderen Komponenten zu beschmücken.

Muss wohl alles einzelnd dann passieren :/

danke




Java:
/*Komponenten die auf allen Panels zu sehen sein sollen*/
    JButton weiter_1;
    JButton beenden_1;
    JButton weiter_2;
    JButton beenden_2;
    JButton weiter_3;
    JButton beenden_3;
    JButton weiter_4;
    JButton beenden_4;


Habe das jetzt so gemacht und baue mir jetzt einen interne classe extands actionlistener ......aber ich dachte es würde auch nur mit einem button gehen , der auf allen panels geadded wird und jeweils das gleiche macht , nähmlich weiter und beenden :/
 
Zuletzt bearbeitet:
Weil jedes Swingkind nur einen Papa haben kann, müssen wir für p2 neue Buttons erzeugen. Die GUI Erzeugung in einer Schleife müsste prinzipiell funktionieren. Kannst du das Problem häher beschreiben?
 
Hallo 🙂

Ich denke es macht mehr Sinn , wenn ich dir etwas zum kompilieren hier lasse 🙂


Java:
 public Bestellformular() {
        /* Fenstertitel bestimmen*/
        super("Bestellformular");
        /* Fenster-schließen-Listener*/
        addWindowListener(new WindowClosingAdapter(true));

        /*JTabbedPane initialisieren*/
        tp = new JTabbedPane();
        weiter_1 = new JButton("Weiter");
        beenden_1 = new JButton("Beenden");
        weiter_2 = new JButton("Weiter");
        beenden_2 = new JButton("Beenden");
        weiter_3 = new JButton("Weiter");
        beenden_3 = new JButton("Beenden");
        weiter_4 = new JButton("Weiter");
        beenden_4 = new JButton("Beenden");

        /* Erster Tab, bzw. erstes JPanel*/
        p1 = new JPanel();
        p1.setLayout(null); // Layout auf null setzen
        weiter_1.setBounds(270, 380, 100, 40);
        weiter_1.addActionListener(new NextTab());
        p1.add(weiter_1);
        beenden_1.setBounds(380, 380, 100, 40);
        p1.add(beenden_1);
        tp.addTab("Warenkorb", p1);

        /*Zweiter Tab, bzw. zweites JPanel*/
        p2 = new JPanel();
        p2.setLayout(null); // Layout auf null setzen
        weiter_2.setBounds(270, 380, 100, 40);
        p2.add(weiter_2);
        beenden_2.setBounds(380, 380, 100, 40);
        p2.add(beenden_2);
        tp.addTab("Anschrift", p2);

        /*Dritter Tab, bzw. drittes JPanel*/
        p3 = new JPanel();
        p3.setLayout(null); // Layout auf null setzen
        weiter_3.setBounds(270, 380, 100, 40);
        p3.add(weiter_3);
        beenden_3.setBounds(380, 380, 100, 40);
        p3.add(beenden_3);
        tp.addTab("Zahlungsmethode", p3);

        /*Vierter Tab, bzw. viertes JPanel*/
        p4 = new JPanel();
        p4.setLayout(null); // Layout auf null setzen
        beenden_4.setBounds(380, 380, 100, 40);
        p4.add(beenden_4);
        tp.addTab("Bestätigung", p4);




        getContentPane().add(tp, BorderLayout.CENTER);
    }






    /*Hauptmethoden*/
    public static void main(String[] args) {

        Bestellformular b = new Bestellformular();
        b.setLocation(100, 100);
        b.setSize(500, 500);
        b.setVisible(true);

    }

  /* Innere Klasse für die Ereignissbehandlung der Buttons :)*/
    class NextTab implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        int tab = tp.getSelectedIndex(); // ermitteln des Tab Indexes
       /* TabCount = Antahl der Registerkarten*/
        tab = (tab >= tp.getTabCount()- 1 ? 0 : tab+1);
        tp.setSelectedIndex(tab);
        ((JPanel)tp.getSelectedComponent()).requestFocus();
    }

    }


}




So das ist meine Java Klasse 🙂 Es funktioniert alles einwandfrei. Doch ist der Code jetzt schon elendig lang . Vorallem wenn ich jetzt anfange auf jeden TAB noch Komponenten hinzuzufügen , für die Methoden zu erschaffen usw.

Ich finde for schleifen toll, da sie aus vielen zweilen code , wenige machen.

Bsp.: ich habe :
Java:
for ( int i =0; i<4; ++i)  7
JPanel a = new JPanel();
tp.addTab("" + i;a) }

Damit erstell ich meine Panel und adde sie ! Aber ich wwiss nun nicht wie ich da meine einzelnden TABS anders bennen kann. Vorallem wie ich nun zwischen den panels unterscheide.

a.add( Komponnente)

Dann würde ja jedes Panel diese bekommen, obwohl ich es ja nur bei Tab1 implementieren möchte.

Das ist mein Problem ^^.

Also eher ein Problem der Performance 🙂

grüße
 
Versuch's mal so:
Java:
String[] tabNames = new String[]{"Warenkorb", "Anschrift", "Zahlungsmethode", "Bestätigung"};
for (int i = 0; i < tabNames.length; i++) {
    String name = tabNames[i];
    weiter_1 = new JButton("Weiter");
    beenden_1 = new JButton("Beenden");
    p1 = new JPanel();
    p1.setLayout(null); // Layout auf null setzen
    weiter_1.setBounds(270, 380, 100, 40);
    weiter_1.addActionListener(new NextTab());
    p1.add(weiter_1);
    beenden_1.setBounds(380, 380, 100, 40);
    p1.add(beenden_1);
    tp.addTab(name, p1);
}
 
Danke , ich habe nun ein anderes Problem :

Und zwar:
Java:
list1 = new JList(INHALT);
        list1.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        list1.setBounds(20, 60, 150, 200);
        p1.add(list1);
        tp.addTab("Warenkorb", p1);

Ich möchte gerne , der liste eine scrollleiste hinzufügen.

mhh, wie mach ich dass ?

p1.add( new JScrollPane(list));
Will nicht funktionieren.

Liegt es daran dass ich setBounds verwende, also das null Layout?


Ich komme nämlich mit den Layouts nicht richtig klar. Ich weiß wie ich sie alle implementiere , aber die ausrichtung , boah ey.

GridLayout wäre eine alternative, aber dann müsste ich mein ganzes progg , wieder umbauen . Kann mir vielleicht jemand helfen , danke
 
Java:
JScrollPane scrollingList = new JScrollPane(list1);
scrollingList.setBounds(20, 60, 150, 200);
p1.add(scrollingList);
 
Vielen Dank.

Java:
  public void actionPerformed(ActionEvent e) {

    int index = list1.getSelectedIndex();
    String action = e.getActionCommand();
            if( action.equals("hinzu"))
            {  for (int i =0;i<INHALT.length;i++)
               {
                   
               }
                listModel2.addElement(index);


            }
    }

Nun möchte ich gerne aus der einen Liste etwas holen und der anderen übergeben.
Ich habe ein schönes Objekt(String) array und der liste hinzugefügt.

Ich muss irgendwie den String , der hinter dem Index steht holen. Ich hatte das mal , mit get irgendwie, kann mir da kurz einer auf die sprünge helfen?

Ich will nicht die ganze list ausgegeben bekommen , sonder nur ein element , welches dann in die andere liste kommt.

<---grml :autsch:

danke
 
Java:
ListModel model = list1.getModel();
String element = model.getElementAt(11).toString();
 
Vielen Dank Andre, habe es noch ein wenig umgebaut , aber es klappt perfekt.

Nun habe ich folgendes Problem, bin schon viel weiter, möchte aber jetzt die Vererbung ein bischen mehr reinbringen.

Mein Problem ist nun , wie ich Den Konstruktor ohne Stackoverflow der anderen Klasse aufrufen kann.

Folgendes Szenario.: Mein Bestellformular enthält nun Tab1 und Tab 2 fertig programmiert, von 4.

Tab3 wollte ich nun außerhalb der klasse programmieren ind der Klasse : Tab3_Zahlungsmethode.




Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Tab3_Zahlungsmethode extends Bestellformular {


    /*******************************************/
            /****TAB 3****/
    JLabel blz;
    JLabel kontonummer;

    JTextField tf_blz;
    JTextField tf_kontonummer;
    JCheckBox cb_nachname;
    JCheckBox cb_ueberweisung;
    JCheckBox cb_Lastschrift;



    public Tab3_Zahlungsmethode()
    {
        blz = new JLabel("BLZ");
        kontonummer = new JLabel("Kontonummer");

        cb_nachname = new JCheckBox("Nachname");
        cb_nachname.setBounds(10, 20, 100, 30);
        p3.add(cb_nachname);
        cb_ueberweisung = new JCheckBox("Überweisung");
        cb_ueberweisung.setBounds(10, 60, 100, 30);
        p3.add(cb_ueberweisung);
        cb_Lastschrift = new JCheckBox("Lastschrift");
        cb_Lastschrift.setBounds(10, 100, 100, 30);
        p3.add(cb_Lastschrift);
    }

Soweit so gut.

Nun möchte ich diese Klasse gerne in der anderen aufrufen.
Ich dachte mir einfach 😉 :
Java:
new Tab3_Zahlungsmethode();


Hier macht aber mein Stack nicht mehr mit, der ja alle Variablen und so bereitstellt, die Instanziiert werden.

Weiß jemand auf anhieb wie ich das ändern kann?

grüße
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben