Gibt es eine Möglichkeit in einem jpanel, jbuttons auf einem Hintergrundbild zu platzieren, sodass man dann mehrere jpanels mit unterschiedlichen Bildern und buttons erzeugen, um danach unter den panels hin und her zu schalten?
Ich habe gar keinen Code bis jetzt geschrieben
Vielleicht kann mir da jemand helfen
Ich hoffe meine Frage ist verständlich, wenn nicht bitte einfach noch einmal fragen .
Alles andere als verständlich.
Suchst du JTabbedPane? Klingt zwar nicht so, aber sicher ist sicher.
Was hast du denn vor, du willst JPanels erzeugen und wie sollen diese JPanels ausgelegt sein? Eins in jeder Ecke und jedes hat ein Hintergrundbild? Und auf diesem Hintergrundbild sind JButtons, mit denen du was machen willst? Also das leuchtet mir gar nicht ein, du musst schon genauer ausdrücken, was du willst.
Also auf einem JFrame ist ein JPanel mit der selben Größe. Dieses panel hat einen Hintergrundbild mit buttons drauf. Sagen wir zwei buttons next und previous. Wenn ich auf den button next klicke soll dieses panel mit seinen eigenen buttons "geschlossen" .setEnabled(false) .setVisible(false)
und einen anderen panel statt dem Vorigen "geladen" werden .setEnabled(true) .setVisible(true)
also ich will zwischen den panels hin und her wechseln bei denen eben die buttons next und previous im panel halt auf dem Bild sind.
Du kannst ein JPanel erzeugen mit einem Hintergrundbild und du kannst in dieses JPanel JButtons hinzufügen. Ich verstehe die Fragestellung nicht. Wo genau kommst du nicht weiter?
Java:
publicclassJPanelDemo{publicstaticvoidcreateAndShowGUI(){finalJFrame frame =newJFrame();finalJPanel[] panels =newJPanel[x];// wie viele Panels du benötigst..for(int i =0; i++< panels.length;)
panels[i]=newJPanel();/* Bilder lädst du hier in die JPanels. */int current =0;finalJButton nextBtn =newJButton("Next");finalJButton prevBtn =newJButton("Previous");
panels[current].add(prevBtn,BorderLayout.WEST);/* wobei ich denke, dass ein anderes suchst, bin grad zu faul nachzugucken */
panels[current].add(nextBtn,BorderLayout.EAST);
prevBtn.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvent evt){
panels[current].remove(prevBtn);
panels[current].remove(nextBtn);
panels[current].setEnabled(false);
panels[current].setVisible(false);
frame.getContentPane().remove(panels[current]);if(current ==0)
current = panels.length;
current--;
panels[current].add(prevBtn);/* usw */}}
nextBtn.addActionListener(/* dein ActionListener */);
frame.getContentPane().add( panels[current],BoderLayout.CENTER );
frame.pack();
frame.setVisible(true);}publicstaticvoid main (String args){createAndShowGUI();}}
Bei JPanels sieht das so aus: Es wird automatisch immer das oberste angezeigt, weswegen du sie nicht einfach setVisible(false); setzen kannst. Du musst den Buttons einen Actionlistener hinzufügen, diesem z.B. die Funktion JFrame.removeJPanel(1); JFrame.addJPanel(2); JFrame.repaint(); hinzufügen, am besten in einer Methode bspw. Swappanel() deklariert.
Brauchst du Code dazu, oder kannst du dir das vorstellen?
Bei JPanels sieht das so aus: Es wird automatisch immer das oberste angezeigt, weswegen du sie nicht einfach setVisible(false); setzen kannst. Du musst den Buttons einen Actionlistener hinzufügen, diesem z.B. die Funktion JFrame.removeJPanel(1); JFrame.addJPanel(2); JFrame.repaint(); hinzufügen, am besten in einer Methode bspw. Swappanel() deklariert.
Brauchst du Code dazu, oder kannst du dir das vorstellen?
Das hängt u.a. auch vom verwendeten LayoutManager ab. Richtig eingesetzt reicht es vollkommen aus mit setVisible() Panels aus- und einzublenden, ohne dass man per remove und add dauernd das Layout umbaut um anschließend mit validate() die GUI zu konsolidieren.
Aber dafür gibt es das bereits erwähnte CardLayout, das einem diese Arbeit abnimmt.
Ich habe den Verdacht, er will nur das Hintergrundbild wechseln.
Da er aber nicht weiss, wie man im Panel zeichnet kommt er mit diesen ein- und ausblend Dingen an.
So habe ich das z.B. in einem meiner momentanen Programme gemacht.
Ich hoffe, das ist so ähnlich wie das, was du dir da gerade vorstellst und ich konnte dir damit helfen.