Page 1 of 1

Java και getLayout() bug?

Posted: Wed Dec 26, 2007 3:08 pm
by Zifnab

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());		
	}
}
Αυτό εκτυπώνει τα παρακάτω: :shock: :shock: :shock:
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]
Ότι και να κάνω ακόμα και setLayout(null) ή να του βάλω μέσα FlowLayout() τίποτα...θα εκτυπώνει BorderLayout...Το ίδιο γίνεται αμα κάνω override την paint(Graphics g) και καλέσω και από εκεί την getLayout(), με την υπόνοια ότι ίσως φταίει που το είχα καλέσει στον constructor....Παρ' όλα αυτά σε κάθε resize μου τυπώνει πάλι java.awt.BorderLayout[hgap=0,vgap=0]...

Παρατήρησα επίσης ότι το default LayoutManager δεν είναι το BorderLayout, γιατί όταν έκανα add(Comp,BorderLayout.CENTER) έκανε απλό add() εκτός και αν είχα προηγουμένως ορίσει setLayout(new BorderLayout()) , όπου το έβαζε πράγματι στο κέντρο....
btw παρατήτησα ότι το add() ελέγχει να μιλάμε για διαφορετικό αντικείμενο, οπότε αν κάνω add δύο φορές το ίδιο αντικείμενο, δεν θα το προσθέσει παρά μία φορά.

Re: Java και getLayout() bug?

Posted: Thu Dec 27, 2007 11:43 am
by elsupreme
Για δοκίμασε :

Code: Select all

...
setLayout(new GridLayout(2,2,2,2));
...
Χρησιμοποιείς τον κατασκευαστή που παίρνει ορίσματα και τα Hgap, Vgap. Πες τι έγινε.

Re: Java και getLayout() bug?

Posted: Thu Dec 27, 2007 2:03 pm
by Zifnab
Λοιπόν όποιον κατασκευαστή σε όποιο Layout ακόμα και null να βάλω μέσα στο setLayout ενός JFrame δεν παίρνει χαμπάρι ότι άλλαξε το getLayout()! Αντίθετα αν κάνω το ίδιο για JPanel δουλεύει σωστά το getLayout()...Είναι σχεδόν προφανές ότι μιλάμε για bug πλέον...

Re: Java και getLayout() bug?

Posted: Thu Dec 27, 2007 2:49 pm
by elsupreme
Ε, κάντο override να τελειώνεις :lol:

Re: Java και getLayout() bug?

Posted: Thu Dec 27, 2007 3:43 pm
by Zifnab
μα είναι υλοποιημένο σωστά απ' ότι είδα στο source... Δεν ξέρω τί παίζει...Θα πάει για Bug Report λογικά, αν το ψάξω και το περιορίσω λίγο περισσότερο...