JTabbedPane, richtige Übergabe von Tabs

Status
Nicht offen für weitere Antworten.

licht400

Bekanntes Mitglied
Hallo,
habe eine Main mit einem JTabbedPane (TPane).

TPane soll folgendermaßen aussehen. |Main||Design1||Design2|

In der Main steht drin.

Code:
TPane.addTab ("Main", makePanel);

das klappt auch. jetz soll noch design1 und design 2 hinzugefügt werden.

Code:
TPane.addTab ("Design1", design1 = new Design1());
TPane.addTab ("Design2", design2 = new Design2());

Problem ist hier, das ein fehler kommt "adding a window to a container".

also habe ich das geändert.

Code:
TPane.addTab ("Design1", null);
TPane.addTab ("Design2", null);

und dazu ein

Code:
public void stateChanged (ChangeEvent evt){
        JTabbedPane tab = (JTabbedPane)evt.getSource();
         int index = tab.getSelectedIndex();
       
         if (index ==1){
            design1 =new Design()1;
         }
       
         if (index ==2){
            design2 ) new Design2();
           
         }
        System.out.println("Der " + (tab.getSelectedIndex()+1) + ". Tab wurde gewählt");
        //System.out.println("name: "+pane.getName().toString());
    }


Problem: Bei Design1 und Design2, wenn ich auf deren Reiter klicke, öffnen sie sich in einem seperaten fenster und nicht im Reiter darunter Sad.
Wie bekomme ich das Fenster (design1 und design2) mit zur TPane?

Ich stehe auf dem Schlauch ...!
 
wie kannst du glauben, dass du einfach
TPane.addTab ("Design1", null);
schreiben kannst, was schon sehr merkwürdig ist,
und dann in stateChanged() die kaputte Einfügung wieder reparieren kannst?

das wird doch alles nur schlimmer und kaputter,

offensichtlich ist Design1 keine JComponent und öffnet ein separates Fenster, sobald es erzeugt wird,
mit diesen Eigenschaften ist es meilenweit von JTabbedPane entfernt,

du kannst doch auch kein Auto im Garten pflanzen
 
Mhh ok, da gebe ich dir recht. Ich dachte, da es eh in einem Fenster ausgegeben wird Design, sollte
es doch gelingen, auch ein ein JTabbedPane hinzuzufügen oder nicht?
Was müsste man den in Design vll ändern..? Design ist abgeleitet von JDialog. Irgendwie muss doch es doch möglich sein, die seite nicht extra zu öffnen..oder?

Gibt es den eine Möglichkeit, das ganze rein zubasteln?
 
kommt drauf an, was du überhaupt haben willst,
soll der Inhalt des JDialogs wie ein normales Tab angezeigt werden
oder beim Anklicken des Tabs ein Fenster geöffnet werden, wie es nun halb klingt,

bei ersterem musst du sinnvoll getrennten Code programmieren:
alles was im JDialog oder sonst einem Fenster zu sehen ist, von Menüs oder so abgesehen,
gehört in ein JPanel,
dieses JPanel kannst du nun entweder in dad JTabbedPane einfügen oder den JDialog
 
Die Klasse Design ist fertig.
Die läuft auch wunderbar alleine, im JDialog.

So, da ich mehrer Design Klassen habe, wollte ich einfach nur einen Reiter nutzen.
Den füge ich in Main ein. Aber wie füge ich dann am dümmsten die Tabs hinzu?

Es will einfach nicht so wie oben beschrieben und anders seh ich es grad nicht, auch nach deiner erläuterung.
 
du kannst nur ein JPanel einfügen, keinen JDialog,

du musst deinen JDialog so umbauen, dass du ein JPanel mit dem Inhalt extrahieren kannst,
ansonsten gehts nicht

da deine Fragen vermuten lassen, dass du kaum den Aufbau von graphischen Oberflächen verstehst, sehe ich etwas schwarz
 
Ok, nein umbasteln sollte nicht das Problem sein.
Wenn ich statt JDialog JPanel habe, wie füge ich in der Main,wo JTabbePane ist, das Design ein?
 
ich denke es geht hier um das JTabbedPane?
und da hast du doch anscheinend schon ein laufendes Beispiel:
> TPane.addTab ("Main", makePanel);
 
jaja..aber kann ich , wenn dann Design abgeleitet ist von JPanel

einfach sagen..

TPane.addTab("Design", design = new Design);

geht das dann..:?
 
Ok. es funktioniert fast.
Problem noch..bei JDialog musste man sagen...
this.getContentPane.add(irgendeinPanel);

das ist bei JPanel ja nicht so. wie geb ich dem da des irgendeinePanel mit??
 
> das ist bei JPanel ja nicht so. wie geb ich dem da des irgendeinePanel mit??

verstehe ich nicht,
du willst in ein JPanel x ein anderes JPanel irgendeinePanel einfügen?
aus welchem Grund geht das nicht und was hat das mit dem aktuellen Thema zu tun?
 
Also, wenn ich eine klasse nach JDialog ableite, muss ich um später etwas drauf zu bekommen (ein button, ein label, etc) dem sagen, wo drauf. Also bei JDialog macht man das mit this.ContentPane.add(irgendwas);

Aber wenn ich von JPanel ableite, muss ich doch auch den Komponenten sagen, hier du musst dort drauf...wie contentPane.add..aber das gibts ja nicht..da gibts dann nur this.add(komponente), da zeigts mir aber nix an. bei contentPane, wenn ich nach JDialog ableite schon.

Verstehste 😀?
 
auf Deutsch:
du hast nun also irgendwo in deinem Programm ein JPanel, in welches du etwas einfügst,
was aber am Ende nicht zu sehen ist,

na das ist doch ne Aussage, kann aber tausend Gründe haben,
Layout, setPreferredSize, das JPanel gar nicht in die GUI eingefügt oder oder oder,

langsam hilft wieder nur das Allheil-Mittel: poste ein möglichst kurzes vollständiges Programm,
es reicht übrigens, wenn nur ein Button nicht zu sehen ist,
müsse nicht alle 20 Stück sein, die normalerweise in deinem Programm drin sind, also kürzen kürzen kürzen 😉
 
okey..also..es klappt, nur zeigt es nix an ^^

In der Main steht...

Code:
public class Main extends JDialog{
  private JTabbedPane tabPanel;

   public static void main(String[] args)
     JDialog start = new Main();
     start.setAlwaysOnTop(true);
     start.setVisible(true);
     start.setLocation(100,100);
   //....
   }
   public Main(){
   tabPanel = new JTabbedPane();
   this.getContentPane().setLayout(null);
   this.getContentPane().add(tabPanel);
   Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
	screensize.height=768;
	screensize.width=1024;
        
        tabPanel.setSize(screensize.width,screensize.height);
	tabPanel.setLocation(0,0);

        tabPanel.addTab("Main: ",makePanel());
        tabPanel.addTab("Design",Design design = new Design);
        tabPanel.addTab("Design2",Design design2 = new Design2());
        tabPanel.addChangeListener(this);
        this.getContentPane().add(tabPanel);

}
}

jetzt was in design steht...

Code:
public class Design extends JPanel {
private JPanel designPanel ;

 public Design(){
  designPanel = new JPanel();
  designPanel.setSize(1024,768);
  designPanel.setVisible(true);
  makeBereiche();
}
 //Deutsch-Englisch MIX :))
 public void makeBereiche(){
   
    BackGroundPane mainPanel = new BackGroundPane(designPath);
        mainPanel.setLayout(null);
        //mainPanel.setPreferredSize(new Dimension(1024,668));
        mainPanel.setSize(1024,668);
        mainPanel.setLocation(0,100);
       // mainPanel.setOpaque(false);
        designPanel.add(mainPanel);
}

//Klasse zum Laden des Designbild ..das bild reinladen ging, bevor ich das Design extends JPanel gemacht habe !
    class BackGroundPane extends JPanel {
		Image img = null;
		BackGroundPane(String imagefile) {
			if (imagefile != null) {
				MediaTracker mt = new MediaTracker(this);
				img = Toolkit.getDefaultToolkit().getImage(imagefile);
				mt.addImage(img, 0);
				try {
					mt.waitForAll();
				} catch (InterruptedException e) {
                                    PropertyConfigurator.configureAndWatch( "log4j.properties" );
                                    logger.info("Designbild nicht geladen");
                                    e.printStackTrace();
				}
			}
		}

            /**Background draw*/
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.drawImage(img,0,0,this.getWidth(),this.getHeight(),this);
		}
	}

}
 
so. jetz zeichnet es.
hab das null layout rausgenommen.

Problem: Jetz wird das bild nicht mehr ordentlich gezeichnet. nur die hälfte.^^ also es ist nach links verschoben, so das die rechte hälfte leer ist. ^^
und die Buttons die drauf sind, liegen auch nicht da, wo sie seien sollten. Irgendwie benötige ich das null layout ^^

Wie bekomme ich es hin, das es noch ordentlich zu sehen ist?


Edit: statt setSize setPreferredSize(new Dimension(1024,668)) ,aber das ergibt immer noch keine 1024 mal 668..es wird ein stück größer..^^ versteh ich nicht.
 
von den Buttons ist im Code nix zu sehen, poste mehr,

wenn du null-Layout verwendest, dann musst du doch auch setBounds angeben?
oder reicht für andere Komponenten setLocation + setSize?

-------

zweimal this.getContentPane().add(tabPanel); (Zeile 14 und 26) klingt nicht so gut
 
na setbounds ist doch setLocation + setSize ???
jetz ist ja alles zu sehen, nur nicht da wo es sein soll ^^.

wo design noch abgeleitet war von JDialog, passte alles.
Jetz mit JPanel liegt alles sehr komisch^^!

edit: 1mal getcontentpane rausgenommen ^^. trotzdem hauts mir alles durcheinander 🙁
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben