Java και getLayout() bug?

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
Zifnab
Venus Former Team Member
Posts: 7581
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

Java και getLayout() bug?

Post by Zifnab » 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());		
	}
}
Αυτό εκτυπώνει τα παρακάτω: :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 δύο φορές το ίδιο αντικείμενο, δεν θα το προσθέσει παρά μία φορά.
User avatar
elsupreme
Gbyte level
Gbyte level
Posts: 1573
Joined: Mon Nov 21, 2005 10:16 pm
Academic status: N>4
Gender:

Re: Java και getLayout() bug?

Post by elsupreme » Thu Dec 27, 2007 11:43 am

Για δοκίμασε :

Code: Select all

...
setLayout(new GridLayout(2,2,2,2));
...
Χρησιμοποιείς τον κατασκευαστή που παίρνει ορίσματα και τα Hgap, Vgap. Πες τι έγινε.
"Must float like lotus on river... and kill old lady!"
User avatar
Zifnab
Venus Former Team Member
Posts: 7581
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

Re: Java και getLayout() bug?

Post by Zifnab » Thu Dec 27, 2007 2:03 pm

Λοιπόν όποιον κατασκευαστή σε όποιο Layout ακόμα και null να βάλω μέσα στο setLayout ενός JFrame δεν παίρνει χαμπάρι ότι άλλαξε το getLayout()! Αντίθετα αν κάνω το ίδιο για JPanel δουλεύει σωστά το getLayout()...Είναι σχεδόν προφανές ότι μιλάμε για bug πλέον...
User avatar
elsupreme
Gbyte level
Gbyte level
Posts: 1573
Joined: Mon Nov 21, 2005 10:16 pm
Academic status: N>4
Gender:

Re: Java και getLayout() bug?

Post by elsupreme » Thu Dec 27, 2007 2:49 pm

Ε, κάντο override να τελειώνεις :lol:
"Must float like lotus on river... and kill old lady!"
User avatar
Zifnab
Venus Former Team Member
Posts: 7581
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

Re: Java και getLayout() bug?

Post by Zifnab » Thu Dec 27, 2007 3:43 pm

μα είναι υλοποιημένο σωστά απ' ότι είδα στο source... Δεν ξέρω τί παίζει...Θα πάει για Bug Report λογικά, αν το ψάξω και το περιορίσω λίγο περισσότερο...
Post Reply

Return to “Προγραμματισμός”