# JButtons werden nicht angezeigt



## Developer_X (5. Mrz 2009)

Hi, auch wenn viele nicht meiner Meinung sind, ich finde es besser das Layout eines Frames null zu setzten.
Ich habe hier zwei Buttons "X" und "-"
Diese werden bei ausführen des Programms nicht gezeigt.
[highlight=Java]
public class Start extends Frame
{
	static Image img;

	public Start()
	{

		setSize(700,450);
	    setLocationRelativeTo(null);
        setUndecorated(true);
        setVisible(true);
   	    setLayout(null);

         JButton b = new JButton("-"); b.setForeground(Color.red);b.setBackground(Color.black);
     	 b.setBounds(600,0,50,50); b.setVisible(true);
     	 b.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {setExtendedState(JFrame.ICONIFIED); }});
     	 add(b);
     	 JButton b1 = new JButton("X"); b1.setForeground(Color.red);b1.setBackground(Color.black);
    	 b1.setBounds(650,0,50,50); b1.setVisible(true);
    	 b1.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {System.exit(0);}});
    	 add(b1);



    	 setLayout(null);

	}
}
[/highlight]
Keine Angst in meinem COde ist auch ne MAin Methode so dumm bin ich auch nicht...


----------



## SlaterB (5. Mrz 2009)

setVisible(true);
erst am Ende aufrufen!, 

ist doch genau der gleiche Fehler wie beim letzen Thema
http://www.java-forum.org/allgemeines/79926-jframe-verkleinern.html
...

Swing-JButton in AWT-Frame ist auch nicht so dolle..


----------



## Developer_X (5. Mrz 2009)

geht immer noch nicht,
ich habe eine Paint Methode auch noch in der klasse drin falls euch das helfen sollte...


----------



## SlaterB (5. Mrz 2009)

daran kann es auch liegen,
eine Komponente mit paint sollte keine anderen Komponenten enthalten


----------



## Geeeee (5. Mrz 2009)

Developer_X hat gesagt.:


> ich habe eine Paint Methode auch noch in der klasse drin falls euch das helfen sollte...


Wenn die kein super.paint(g) aufruft und nicht selber das Zeichnen der Buttons übernimmt, wird das wohl eine gute Fehlermöglichkeit sein.
Außerdem setzt du den LayoutManager zweimal.
UND: mach mal deine Codeauszüge etwas übersichtlicher


----------



## Developer_X (5. Mrz 2009)

So das müsste euch genügen:
[highlight=Java]
public class Start extends Frame
{
	static Image img;

	public void paint(Graphics g)
	{

		g.drawImage(img,0,0,700,450, this);

	}
	public Start()
	{

       setSize(700,450);
       setLocationRelativeTo(null);
       setUndecorated(true);
       setLayout(null);

         JButton b = new JButton("-"); b.setForeground(Color.red);b.setBackground(Color.black);
     	 b.setBounds(600,0,50,50); b.setVisible(true);
     	 b.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {setExtendedState(JFrame.ICONIFIED); }});
     	 add(b);
     	 JButton b1 = new JButton("X"); b1.setForeground(Color.red);b1.setBackground(Color.black);
    	 b1.setBounds(650,0,50,50); b1.setVisible(true);
    	 b1.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {System.exit(0);}});
    	 add(b1);    	 

    	 setLayout(null);
         setVisible(true);
	}
	  public static void main(String[]args)
	    {
		    new Start();		  	  	  
	    }


}
[/highlight]


----------



## SebiB90 (5. Mrz 2009)

Wie Geeeee sagte, ein super.paint(g) in deine paint Methode rein machen, dann sollte es funktionieren


----------



## Developer_X (5. Mrz 2009)

und wie kann man das machen, ich weiß leider net wie und wo
sory


----------



## Ebenius (5. Mrz 2009)

[HIGHLIGHT="Java"]public void paint(Graphics g) {
  super.paint(g);
  g.drawImage(img,0,0,700,450, this);
}[/HIGHLIGHT]

// EDIT: Einmal auf Ändern geklickt, gespeichert (ohne inhaltliche Änderung) und dann war der Code wieder sichtbar.

Ebenius


----------



## SlaterB (5. Mrz 2009)

bei mir (diesmal Firefox WinXP) ist nur der Text 'Ebenius' zu sehen, 
aber wenn man auf zitieren drückt, kommt man auch an den geposteten Quelltext

(wenn ich als Mod auf Ändern und Vorschau klicke, ist der Code auch da)


----------



## SebiB90 (5. Mrz 2009)

SlaterB hat gesagt.:


> bei mir (diesmal Firefox WinXP) ist nur der Text 'Ebenius' zu sehen,
> aber wenn man auf zitieren drückt, kommt man auch an den geposteten Quelltext


Dito, aber bei mir mit IE und Vista.

Zu Ebenius Code:
Ich würde die Befehle umdrehen, da es mir scheint, dass das Bild ein Hintergrundbild ist, da die Buttons im Bereich des Bildes liegen.


----------



## Developer_X (5. Mrz 2009)

Ich zeig euch jetzt mal den gesamten Quelltext, also wirklich alles:

```
public class Start extends Frame
{
	static Image img;

	public void paint(Graphics g)
	{
		super.paint(g);
		g.drawImage(img,0,0,700,450, this);

	}
	public Start()
	{
					
		setSize(700,450);
	    setLocationRelativeTo(null);
        setUndecorated(true);
   	    setLayout(null);

         JButton b = new JButton("-"); b.setForeground(Color.red);b.setBackground(Color.black);
     	 b.setBounds(600,0,50,50); b.setVisible(true);
     	 b.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {setExtendedState(JFrame.ICONIFIED); }});
     	 add(b);
     	 JButton b1 = new JButton("X"); b1.setForeground(Color.red);b1.setBackground(Color.black);
    	 b1.setBounds(650,0,50,50); b1.setVisible(true);
    	 b1.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {System.exit(0);}});
    	 add(b1);    	 
    	 JButton Start = new JButton("Start"); Start.setForeground(Color.red);Start.setBackground(Color.black);
    	 Start.setBounds(-10,50,200,50); Start.setVisible(true);
    	 Start.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {System.exit(0);}});
    	 add(Start);    
    	 
    	 JButton Optionen = new JButton("Optionen"); Optionen.setForeground(Color.red);Optionen.setBackground(Color.black);
    	 Optionen.setBounds(-10,150,200,50); Optionen.setVisible(true);
    	 Optionen.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {System.exit(0);}});
    	 add(Optionen);    
    	 
    	 JButton Web = new JButton("Web"); Web.setForeground(Color.red);Web.setBackground(Color.black);
    	 Web.setBounds(-10,250,200,50); Web.setVisible(true);
    	 Web.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {System.exit(0);}});
    	 add(Web);  
    	 
    	 JButton Readme = new JButton("Readme"); Readme.setForeground(Color.red);Readme.setBackground(Color.black);
    	 Readme.setBounds(-10,350,200,50); Readme.setVisible(true);
    	 Readme.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {try {
			b1ActionPerformed(evt);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}}private void b1ActionPerformed(ActionEvent evt) throws IOException { if (Desktop.isDesktopSupported()) { }
         Desktop  desktop = Desktop.getDesktop(); 
         File uri = new File("F:/Rayman/Readme.txt"); desktop.open(uri); 
         }});
    	 add(Readme);  
    	 
     
    	 setLayout(null);
         setVisible(true);
	}
	  public static void main(String[]args)
	    {
		    new Start();	

		    Random zufallsgenerator;
	        zufallsgenerator = new Random();

	        String antworten[] = {"http://www.planet3dgames.de/images/content/rayman2_04.jpg" , 
	        		"http://www.feibel.de/uploads/tx_feibeldatabase/Rayman2_2001_1_01.jpg" , 
	        		"http://www.spieletipps.de/dyn/pub/av2_absatz_img/000/005/589/001/5589001.jpg",
	        		"http://www.ps3blog.de/wp-content/uploads/2008/12/raymanrevps2_004-large.jpg0",
	        		"http://www.planet3dgames.de/images/content/rayman2_05.jpg",
	        	    "http://www.arminbwagner.com/crates_and_barrels/crate_rayman2crates.jpg"
	        		,"http://www.rayman-fanpage.de/rayman2/ray2_tv/Ray_gang01k.jpg"
	        		,"http://img242.imageshack.us/img242/4541/rayman2thegreatescapeumte6.jpg"
	        		,"http://media.giantbomb.com/uploads/0/8805/419052-woods_of_light_super.jpg"
	        		,"http://www.gamebank.de/Bilder/Rayman3/rayman3_sshot6_ps2.jpg"
	        		,"http://www.rayman-fanpage.de/rayman2/ray2_grafik1/vasareli.jpg"
	        		,"http://www.rayman-fanpage.de/rayman2/ray2_grafik3/download/friends.jpg"
	        		,"http://www.gamebank.de/Bilder/Rayman3/rayman3_sshot5_ps2.jpg"
	        		,"http://ui19.gamefaqs.com/1234/gfs_50436_2_8.jpg"
	        		,"http://www.gameblitz.com/images/rayman.jpg"
	        		,"http://i281.photobucket.com/albums/kk240/TzunTzen/bg03.jpg"
	        		,"http://www.spieletipps.de/dyn/pub/av2_absatz_img/000/009/515/001/9515001.jpg"
	        		,"http://www.focusmm.co.uk/shop/files/screenshot_media/pfc006screen2.jpg"
	        		,"http://media.giantbomb.com/uploads/0/4938/270556-6_super.jpg"
	        		,"http://www.pcfreunde.de/images/db-fullsize-30202-rayman-3.jpg"
	        		,"http://www.spieletipps.de/dyn/pub/picture_img/000/000/053/177/53177.jpg"};
	       
	        int anzahl = 1;
	        for (int i=1; i<=anzahl; i++)
	        {
	      
	        	  try {
	      			img = Toolkit.getDefaultToolkit().getImage(new URL(antworten[zufallsgenerator.nextInt(21)]));} catch (MalformedURLException e) {e.printStackTrace();} 
	                  }		  	  	  
	    }		
}
```
PS: Das mit Random kam aber leider nicht in der Java Insel vor!


----------



## hdi (5. Mrz 2009)

Boah wieso musst du jedes kleine Drecks-Programm mit so einem setUndecorated()-Scheiss usw. zu müllen?
Das ist NICHT cool, nicht toll, das is ein user-unfreundliches Fenster, das ich sofort abschiess
wenn es sich bei mir öffnet.

Desweiteren sagte ich dir schon öfters: nix mit setBounds, benutz lieber layouts!
Und dazu gehört NICHT das null-layout...

Die setVisible()-Aufrufe bei den Buttons sind nicht nötig.

Und was alle meinen: Man sollte das zeichnen nicht mischen mit Standalone-Komponenten
wie Buttons etc.

Abgesehen davon zeichnet man nicht direkt in einem Frame, sondern nur in Panels.

Pseudo-Code:
[HIGHLIGHT="Java"]JPanel picPanel // @Override paintComponent(Graphics g), dort das img zeichnen
JPanel buttonPanel;
JButton webBtn = new JButton(..)
webBtn.setPreferredSize(new Dimension(50,25)); // statt setBounds!
// analog zu den anderen Buttons
buttonPanel.setLayout(sinnvolles Layout)
buttonPanel.add(webBtn) // und die anderen
this.setLayout(ein sinnvolles Layout)
this.add(picPanel)
this.add(btnPanel)
this.pack(); // !!
this.setLocationRelativeTo(null); // NACH pack()
this.setDefaultCloseOperation(EXIT_ON_CLOSE) // bitte immer bei frames[/HIGHLIGHT]

Wichtig also: Zwei verschiedene Panels, eins zu zeichnen, eins für die Buttons.
Letzteres mit schönem Layout. Diese beiden auf das Frame, auch mit passendem Layout. Und lass diese Kinder-Einstellungen weg..


----------



## Developer_X (5. Mrz 2009)

ich hatte auch eine andere idee, mit einem JLabel();
aber da weiß ich nicht wie man die größe des images einstellt, weiß es einer von euch?

```
public class Start extends Frame
{
	static Image img;

	
	public Start()
	{
					
		setSize(700,450);
	    setLocationRelativeTo(null);
        setUndecorated(true);
   	    setLayout(null);

   	 
         JButton b = new JButton("-"); b.setForeground(Color.red);b.setBackground(Color.black);
     	 b.setBounds(600,0,50,50); b.setVisible(true);
     	 b.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {setExtendedState(JFrame.ICONIFIED); }});
     	 add(b);
     	 JButton b1 = new JButton("X"); b1.setForeground(Color.red);b1.setBackground(Color.black);
    	 b1.setBounds(650,0,50,50); b1.setVisible(true);
    	 b1.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {System.exit(0);}});
    	 add(b1);    	 
    	 JButton Start = new JButton("Start"); Start.setForeground(Color.red);Start.setBackground(Color.black);
    	 Start.setBounds(-10,50,200,50); Start.setVisible(true);
    	 Start.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {System.exit(0);}});
    	 add(Start);    
    	 
    	 JButton Optionen = new JButton("Optionen"); Optionen.setForeground(Color.red);Optionen.setBackground(Color.black);
    	 Optionen.setBounds(-10,150,200,50); Optionen.setVisible(true);
    	 Optionen.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {System.exit(0);}});
    	 add(Optionen);    
    	 
    	 JButton Web = new JButton("Web"); Web.setForeground(Color.red);Web.setBackground(Color.black);
    	 Web.setBounds(-10,250,200,50); Web.setVisible(true);
    	 Web.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {b1ActionPerformed(evt);}private void b1ActionPerformed(ActionEvent evt) {System.exit(0);}});
    	 add(Web);  
    	 
    	 JButton Readme = new JButton("Readme"); Readme.setForeground(Color.red);Readme.setBackground(Color.black);
    	 Readme.setBounds(-10,350,200,50); Readme.setVisible(true);
    	 Readme.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent evt) {try {
			b1ActionPerformed(evt);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}}private void b1ActionPerformed(ActionEvent evt) throws IOException { if (Desktop.isDesktopSupported()) { }
         Desktop  desktop = Desktop.getDesktop(); 
         File uri = new File("F:/Rayman/Readme.txt"); desktop.open(uri); 
         }});
    	 add(Readme);  
    	 
    	 Random zufallsgenerator;
	        zufallsgenerator = new Random();

	        String antworten[] = {"http://www.planet3dgames.de/images/content/rayman2_04.jpg" , 
	        		"http://www.feibel.de/uploads/tx_feibeldatabase/Rayman2_2001_1_01.jpg" , 
	        		"http://www.spieletipps.de/dyn/pub/av2_absatz_img/000/005/589/001/5589001.jpg",
	        		"http://www.ps3blog.de/wp-content/uploads/2008/12/raymanrevps2_004-large.jpg0",
	        		"http://www.planet3dgames.de/images/content/rayman2_05.jpg",
	        	    "http://www.arminbwagner.com/crates_and_barrels/crate_rayman2crates.jpg"
	        		,"http://www.rayman-fanpage.de/rayman2/ray2_tv/Ray_gang01k.jpg"
	        		,"http://img242.imageshack.us/img242/4541/rayman2thegreatescapeumte6.jpg"
	        		,"http://media.giantbomb.com/uploads/0/8805/419052-woods_of_light_super.jpg"
	        		,"http://www.gamebank.de/Bilder/Rayman3/rayman3_sshot6_ps2.jpg"
	        		,"http://www.rayman-fanpage.de/rayman2/ray2_grafik1/vasareli.jpg"
	        		,"http://www.rayman-fanpage.de/rayman2/ray2_grafik3/download/friends.jpg"
	        		,"http://www.gamebank.de/Bilder/Rayman3/rayman3_sshot5_ps2.jpg"
	        		,"http://ui19.gamefaqs.com/1234/gfs_50436_2_8.jpg"
	        		,"http://www.gameblitz.com/images/rayman.jpg"
	        		,"http://i281.photobucket.com/albums/kk240/TzunTzen/bg03.jpg"
	        		,"http://www.spieletipps.de/dyn/pub/av2_absatz_img/000/009/515/001/9515001.jpg"
	        		,"http://www.focusmm.co.uk/shop/files/screenshot_media/pfc006screen2.jpg"
	        		,"http://media.giantbomb.com/uploads/0/4938/270556-6_super.jpg"
	        		,"http://www.pcfreunde.de/images/db-fullsize-30202-rayman-3.jpg"
	        		,"http://www.spieletipps.de/dyn/pub/picture_img/000/000/053/177/53177.jpg"};
	       
	        int anzahl = 1;
	        for (int i=1; i<=anzahl; i++)
	        {
	      
	        	  try {
	      			img = Toolkit.getDefaultToolkit().getImage(new URL(antworten[zufallsgenerator.nextInt(21)]));} catch (MalformedURLException e) {e.printStackTrace();} 
	                  }		  	  
	  
         ImageIcon img = null;
		try {
			img = new ImageIcon(new URL(antworten[zufallsgenerator.nextInt(21)]));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
         JLabel lab = new JLabel(); 
         lab.setIcon(img); 
         lab.setIconTextGap(10);  add(lab); lab.setBounds(0,0,700,450);
        
    	 setLayout(null);
         setVisible(true);
	}
	  public static void main(String[]args)
	    {
		    new Start();		    
	    }
		
  
}
```


----------



## hdi (5. Mrz 2009)

Ich poste dir mal dein Programm wie man es machen sollte... please wait, loading


----------



## Ebenius (5. Mrz 2009)

*hdi, immer ruhig... Sei froh, dass Du nicht in Japan lebst. Was da nicht flackert und pink ist, ist tot! *

Ebenius


----------



## Leroy42 (5. Mrz 2009)

Developer_X hat gesagt.:


> Hi, auch wenn viele nicht meiner Meinung sind, ich finde es besser das Layout eines Frames null zu setzten.



Okay, aber ich glaube nicht, daß du andere davon überzeugen kannst


----------



## hdi (5. Mrz 2009)

So also Developer, kuck dir mal diesen Code an. Was du daraus lernen sollst:
1) Layouts nutzen & preferredSize statt null-Layout und setBounds()
2) Man zeichnet nicht im selben Panel wenn man Komponenten drauf hat
3) Man zeichnet erst recht nicht in einem Frame
4) setUndecorated() und keine Schliess-Möglichkeit erzeugt ein Programm dass jeder User
sofort von der Platte löscht
5) Code sollte man formatieren!
6) Variablen-Namen sind klein geschrieben (camelCase)

Wenn du Fragen hast, nur zu!

[HIGHLIGHT="Java"]import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

// Heutzutage nutzt man eher Swing als AWT, es ist "moderner" und besser.
// Also JFrame statt Frame:
public class BspFrame extends JFrame {

	private static Image img; // solche Variablen bitte immer private

	public BspFrame() {
		super("Ein Beispiel-Fenster");

		/* Man zeichnet nie in Frames, sondern immer in Panels: */
		JPanel imgPanel = new JPanel() {
			/*
			 * Beim panel heisst die Methode nicht paint() sondern
			 * paintComponent():
			 */
			@Override
			protected void paintComponent(Graphics g) {
				// Als ERSTE zeile, löscht den inhalt vor dem neuzeichnen:
				super.paintComponent(g);

				// das hier tauscht du halt dann aus gegen dein drawImage:
				g.fillRect(0, 0, 500, 500);
			}
		};
		/* Die grösse setzt man so: */
		imgPanel.setPreferredSize(new Dimension(500, 500));

		/* Für vorgefertigte Komponenten nimmt man ein ANDERES panel: */
		JPanel buttonPanel = new JPanel();
		JButton btnOne = new JButton("klein");
		JButton btnTwo = new JButton("mittel");
		JButton btnThree = new JButton("gross");

		/* Hier kannste jetzt noch ActionListener zu den Buttons geben.. */

		/*
		 * statt setBounds legen wir fest, wie gross die Buttons sind und legen
		 * sie dann mit einem geeigneten Layout auf das Panel:
		 */
		btnOne.setPreferredSize(new Dimension(70, 20));
		btnTwo.setPreferredSize(new Dimension(90, 40));
		btnThree.setPreferredSize(new Dimension(150, 60));
		buttonPanel.setLayout(new FlowLayout());
		buttonPanel.add(btnOne);
		buttonPanel.add(btnTwo);
		buttonPanel.add(btnThree);

		/*
		 * Wir legen letztendlich beide Panel ins Frame, wieder nicht mit
		 * setBounds sondern:
		 */
		this.setLayout(new BorderLayout());
		this.add(imgPanel, BorderLayout.CENTER);
		this.add(buttonPanel, BorderLayout.SOUTH);

		/*
		 * ... wie du siehst wurde also nur die Grösse der innersten Komponenten
		 * gesetzt, und zwar der Buttons per setPrefrerredSize(). Nirgendwo
		 * sonst wird eine Grösse festgelegt, und auch keine Koordinaten
		 * angegeben. Beim Zeichen-Panel steht auch ein setPreferredSize, weil
		 * es keine inneren Komponenten hat. Der folgende Aufruf von pack()
		 * liest die preferredSizes aus und baut mit dem gesetzen Layout eine
		 * schöne GUI:
		 */
		this.pack();
		/* DANACH das hier: */
		this.setLocationRelativeTo(null);
		// Wenn du das hier weglässt hasst jeder User dein Programm:
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		// setVisible(true) ruft man eig. von aussen auf
	}

	public static void main(String[] args) {
		new BspFrame().setVisible(true);
	}
}[/HIGHLIGHT]

@Ebenius:
Das versteh ich nicht


----------



## Ebenius (5. Mrz 2009)

hdi hat gesagt.:


> @Ebenius:
> Das versteh ich nicht


Bezog sich auf:


hdi hat gesagt.:


> Boah wieso musst du jedes kleine Drecks-Programm mit so einem setUndecorated()-Scheiss usw. zu müllen?
> Das ist NICHT cool, nicht toll, das is ein user-unfreundliches Fenster, das ich sofort abschiess wenn es sich bei mir öffnet.





Ebenius


----------



## hdi (5. Mrz 2009)

Ach und Developer, noch ein Nachtrag:
Ich gebe dir durchaus Recht, dass vorallem bei Menüs für Spiele o.ä. es oft schneller
und einfacher geht, es mit null-Layout pixelgenau zusammenzubauen.
Leider hat das 2 Nachteile

1) Wenn du einen neuen Button irgendwo reinpressen willst, musst du auf blöd alle
anderen Komponenten anpassen
2) und das bezieht sich jetzt wieder weniger auf Spiele-Menüs, sondern "normale" GUIs:
Mach Undecorated(false) und dann resize mal das Fenster mit der Maus. Sieht derbe scheisse aus mit setBounds,
weil sich die Komponenten nicht anpassen.

Mit Layouts rückt sich das immer schön zurecht, und das sieht gut so aus.
Siehst du zB an meinem Bsp: Egal wie gross du das Fenster ziehst, die Buttons sind immer
schön in der Mitte.

@Ebenius:
Die Japaner spinnen sowieso. Die haben alle kein Leben, nur Geld und Arbeit im Sinn.
Absolut unsymphatisch dieses Volk wenn du mich fragst.


----------



## Developer_X (5. Mrz 2009)

danke hdi, ich habe soweit keine frage


----------



## Ebenius (5. Mrz 2009)

hdi hat gesagt.:


> Die Japaner spinnen sowieso. Die haben alle kein Leben, nur Geld und Arbeit im Sinn.
> Absolut unsymphatisch dieses Volk wenn du mich fragst.


Ich für meinen Teil kann nur sagen: Ich mag Japaner nicht. Das liegt daran, dass Japaner auch nur Menschen sind. 

Und jetzt im Ernst: Ich habe bisher mit Japanern, Chinesen, Taiwanesen, Indern, Pakistani, Italienern, Russen, Belgiern, Holländern, Deutschen und Amerikanern zusammengearbeitet. Ich glaube gelernt zu haben, dass es in jedem Volk genügend Idioten gibt, um fälschlich Pauschalurteile zu fällen. Das einzige was ich verallgemeinert wirklich sagen kann ist, ich arbeite am liebsten mit Amerikanern und Deutschen zusammen, weil das für mich am unkompliziertesten ist. Asien macht mir schon zu viel Aufwand, weil man vieles beachten muss was man hier nicht gewohnt ist. Ein paar blöde Beispiele, derer Sachen gibt es viele: 
Leg nie die Stäbchen überkreuz in Japan (wenn ich mich recht erinnere).

Karaoke hat in Taiwan wenig mit singen zu tun. 

Sag nie "nein" zu einem Chinesen, weil es das gleiche heißt wie "Du hast Unrecht".

Erwarte nie, dass ein Taiwanese Dir sagt, er wisse etwas nicht. Er wird sich stets nach bestem Wissen und Gewissen das aus den Fingern saugen, was er für am wahrscheinlichsten hält. Und Du wirst nie erfahren, dass er gegebenenfalls keine Ahnung vom besagten Thema hat. Du musst ihn ja nicht fragen.  Es ist Deine Schuld, wenn Du ihn in die Situation bringst, auf eine Frage antworten zu müssen, die er nicht beantworten kann.

Ebenius


----------



## hdi (5. Mrz 2009)

Ja der letzte Punkt ist besonders blödsinnig. Auch dahingehend hab ich von Japanern einiges
von einem Freund gehört:

Wenn ein Japaner niesst, sagst du nicht "Gesundheit" sondern "Entschuldigung". Und zwar dafür,
dass du anwesend warst und ihn demnach in eine peinliche Situation gebracht hast.

Was ich aber richtig krass finde, wobei ich nicht weiss wie streng die das wirklich nehmen, aber
ich habe gehört, dass es dort absolut üblich ist sich die Nase nicht zu putzen (mit einem Taschentuch).

Angeblich schmieren die Geschätsleute die Rotze einfach mit dem Anzugsärmel weg
und das ist überhaupt nicht assi dort. Hab ich gehört...

Naja, genug gelästert. Ausserdem muss man ihnen eins lassen: Die Gameshows kann
keiner toppen


----------



## Developer_X (6. Mrz 2009)

Ja so, also mir ist was aufgefallen, also ich hab deine IDee in mein eingebaut, ohne einfach so zu kopieren, sondern es mir anzuschauen. Ich will das mit setBounds bei behalten, da ich es sehr wichtig finde, alle Objekte so zu Platztieren, wie es mir passt, und nicht einfach mit irgendwelchen dahergeholten billigen Layouts...
net bös gemeint, wenn ich einen Kreis zeichne, mit deiner methode, dann sind die Buttons zu sehen, der kreis ist hinter den buttons, wenn ich aber ein Bild einfüge, dann sind die buttons nicht zu sehen
mit einem Oval gehts, aber mit einem Image nicht mehr,
wieso, hat das was damit zu tun, wann ich das bild loade?


----------



## hdi (6. Mrz 2009)

Also ich glaube ich bin jetz mal zum Entschluss gekommen, dass ich dir nicht mehr weiterhelfen möchte.
Du bringst nicht die Voraussetzungen mit um Programmieren zu lernen.
Liegt am wahrscheinlichstem an deinem Alter, *kann/wird sich also wohl ändern*.

Aber die nächsten Jahre werd ich dich hier erstmal fein ignorieren, ist doch alles
verschwendete Zeit 

Soll jetz nich arrogant oder sonst was rüberkommen, und man selber sieht es eh nie ein,
aber du bist irgendwie n Stückchen zu jung/naiv/ignorant als das man dir echt helfen könnte. 
Und den Helfern geht dann auch grob der Spass und Sinn an der Sache ab.


----------



## Developer_X (6. Mrz 2009)

ich möchte einfach keine Layouts benutzten, weil ich die Objekte nicht perfekt positionieren kann
,okay?


----------



## Wildcard (6. Mrz 2009)

Developer_X hat gesagt.:


> ich möchte einfach keine Layouts benutzten, weil ich die Objekte nicht perfekt positionieren kann
> ,okay?


Ohne den Rest des Threads gelesen zu haben (man möge mir verzeihen):
Eine absolut positionierte GUI (also ohne LayoutManager) funktioniert nur auf einem einzigem Rechner, und das ist deiner. Anderer Window Manager, anderes Locale, anderer Skin, anderes Look And Feel, andere Java Version, andere Schriftgrößensettings, und das ganze Ding fliegt dir um die Ohren. Eine GUI die nicht mit LayoutManagern positioniert wird ist schlicht und ergreifend nicht nutzbar.
Ganz nebenbei macht es auch wesentlich mehr arbeit händisch zu frickeln.


----------

