Java και getLayout() bug?
Posted: Wed Dec 26, 2007 3:08 pm
Code: Select all
import javax.swing.JFrame;
import java.awt.GridLayout;
public class TestWindow extends JFrame {
TestWindow(){
GridLayout gridlayout = new GridLayout(2,2);
gridlayout.setHgap(2);
gridlayout.setVgap(2);
setLayout(gridlayout);
add(new myPanel());
add(new myPanel());
add(new myPanel());
add(new myPanel());
setBounds(100,100,400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("TestWindow");
setVisible(true);
System.out.println(this);
System.out.println(getLayout());
}
}



Ότι και να κάνω ακόμα και setLayout(null) ή να του βάλω μέσα FlowLayout() τίποτα...θα εκτυπώνει BorderLayout...Το ίδιο γίνεται αμα κάνω override την paint(Graphics g) και καλέσω και από εκεί την getLayout(), με την υπόνοια ότι ίσως φταίει που το είχα καλέσει στον constructor....Παρ' όλα αυτά σε κάθε resize μου τυπώνει πάλι java.awt.BorderLayout[hgap=0,vgap=0]...TestWindow[frame0,100,100,400x300,layout=java.awt.BorderLayout,title=TestWindow,resizable,normal,defaultCloseOperation=
EXIT_ON_CLOSE, rootPane=javax.swing.JRootPane[,8,28,384x264,layout=
javax.swing.JRootPane$RootLayout, alignmentX=0.0,alignmentY=0.0,
border=,flags=16777673,maximumSize=, minimumSize=,preferredSize=],
rootPaneCheckingEnabled=true]
java.awt.BorderLayout[hgap=0,vgap=0]
Παρατήρησα επίσης ότι το default LayoutManager δεν είναι το BorderLayout, γιατί όταν έκανα add(Comp,BorderLayout.CENTER) έκανε απλό add() εκτός και αν είχα προηγουμένως ορίσει setLayout(new BorderLayout()) , όπου το έβαζε πράγματι στο κέντρο....
btw παρατήτησα ότι το add() ελέγχει να μιλάμε για διαφορετικό αντικείμενο, οπότε αν κάνω add δύο φορές το ίδιο αντικείμενο, δεν θα το προσθέσει παρά μία φορά.