26. september 2003 - 18:33Der er
8 kommentarer og 3 løsninger
Placere et Jpanel oven på et andet Jpanel. Hvordan?
Jeg har et Jpanel (JP1) som fylder hele min JFrame. Oven på JP1 skal jeg så placere et nyt panel(JP2). Dette skal placeres således at der er ca 50 pixel ud til kanten af min frame hele vejen rundt. Kan dette lade sig gøre?
import javax.swing.*; import java.awt.Color; public class MyFrame extends JFrame {
JPanel p1,p2;
public MyFrame() { super("Panel test"); setSize(500,500); p1 = new JPanel(); p1.setSize(getWidth(),getHeight());//same as frame p1.setBackground(Color.red); p1.setLayout(null);//It is not recommended to run without a layout manager p2= new JPanel(); p2.setSize(p1.getWidth()-10,p1.getHeight()-10);//same as p1-50 p2.setBackground(Color.green); p1.add(p2); p2.setLocation(5,5);
getContentPane().add(p1); setVisible(true);
}
public static void main(String args[]) { MyFrame f = new MyFrame(); }
Der er kun en måde at gøre det på, men har du overhovedet behov for panel JP1, når du smider et JP2 ovenpå ???
Hvis du ikke bruger JP1 til noget, skal du istedet override getInsets() i din JFrame, vil du der imod have JP1 og JP2 så lav en klasse som extender JPanel og brug denne som JP1 (har kaldt den MyPanel her)
// KLASSEN SOM GØR DET HELE SÅ NEMT, UANSET HVILKEN STØRRELSE // DIN FRAME HAR VIL JP2(MyPanel) ALTID VÆRE 50 PIXELS FRA KANTEN // AF DIN FRAME public class MyPanel extends javax.swing.JPanel { public MyPanel() { super(); }
public java.awt.Insets getInsets(){ return new java.awt.Insets(50,50,50,50); } }
Det du gør forkert er at når du ikke vælger en layoutmanager med SetLayout() så vil den som default vælge FlowLayout. og SetBounds() virker kun hvis du sætter dit layout til Null... altså .SetLayout(null)
Husk at gøre det med både ContentPane() og med dit første panel... så er det bare et spørgsmål om at regne ud hvilke værdier du skal bruge for at det kommer til at passe
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.