Toggle Button Array zum anzeigen auf GUI

  • Themenstarter Themenstarter SkonroX
  • Beginndatum Beginndatum
S

SkonroX

Gast
Hallo,

ich habe eine womöglich überflüssige frage, jedoch bekomme ich es einfach nicht hin..
ich weiß zwar das man einfach ganz viele einzelne togglebutton erstellen kann und diese anordnet, ich wollte jedoch ein JToggleButton array erstellen und einfach immer die position verändern in einer schleife, wodurch sie natürlich angezeigt werden müssten wie einzeln zugefügte Buttons, jedoch funktioniert es einfach nicht, hier der Code:

Java:
package affen_trainer;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import java.awt.Rectangle;
public class gui extends JFrame 
{
	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JToggleButton[][] button = null;
	private JToggleButton[][] getbutton()
	{
		if (button == null) 
		{
			int x = 15;
			int y = 15;
			int eins = 1;
			int zwei = 2;
			while(eins == 10 && zwei == 10)
			{
				button[eins][zwei] = new JToggleButton();
				button[eins][zwei].setBounds(new Rectangle(x, 25, y, 25));
				jContentPane.add(button[eins][zwei]);
				x = x + 25;
				zwei++;
				if(zwei == 10 && eins <= 10)
				{
					zwei = 1;
					y = y + 25;
					eins++;
				}
			}
		}
		return button;
	}
	public static void main(String[] args) 
	{
		SwingUtilities.invokeLater(new Runnable() 
		{
			public void run()
			{
				gui thisClass = new gui();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}
	public gui() 
	{
		super();
		initialize();
		getbutton();
	}
	private void initialize() 
	{
		this.setSize(500, 500);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}
	private JPanel getJContentPane() 
	{
		if (jContentPane == null) 
		{
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
		}
		return jContentPane;
	}
}

Bin dankbar für jede Hilfe.

Mfg,
SkonroX
 
*nur kurz drüberguck*

int eins = 1;
int zwei = 2;
while(eins == 10 && zwei == 10)...

Wie oft sollte diese Schleife durchlaufen werden?
 
Das Array musst du vorher natürlich auch noch erstellen !

Code:
button = new JToggleButton[...][...];
 
öhm,
von bis der von 1 bei 10 angekommen ist, bei jedem durchlauf wird eins draufgerechnet,
die if schleife in der while schleife ist nur dafür da, das erst einmal die ganze erste reihe dargestellt wird.

mfg,
SkonroX
 
Habe ich ja erstellt:

private JToggleButton[][] button = null;
eingesetzt wird ohne festlegung.

mfg,
SkonroX
 
öhm,
von bis der von 1 bei 10 angekommen ist, bei jedem durchlauf wird eins draufgerechnet,
die if schleife in der while schleife ist nur dafür da, das erst einmal die ganze erste reihe dargestellt wird.

mfg,
SkonroX

Dein Code heißt aber übersetzt: solange eins == 10 && zwei == 10 tue: ....
Also wird genau gar nichts getan, weil eins und zwei eben nicht 10 sind 🙂

/EDIT: Lies am Besten noch einmal :
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 3.10 Arrays
 
Fehler:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at affen_trainer.gui.getbutton(gui.java:22)
at affen_trainer.gui.<init>(gui.java:53)
at affen_trainer.gui$1.run(gui.java:43)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

mfg,
SkonroX.
 
na wenn du
Java:
int eins = 1;
int zwei = 2;
machst und die Bedingung der Schleife ist
Java:
while( eins == 10 && zwei == 10 ){}

[code=Java]
Dann wird die Schleife nie betretten weil eins nicht gleich 10 ist und zwei ebenso.

wenn dann eins kleiner wie 10 usw...
 
Habs in
while(eins <= 10 && zwei <= 10)
geändert, dann kommt der oben erwähnte fehler.

mfg,
SkonroX
 
Habs jetzt neu deklariert:

private JToggleButton[][] button = new JToggleButton[10][10];

kommt kein fehler mehr, jedoch wird auch nix angezeigt auf dem gui.

mfg,
SkonroX
 
Java:
button = new JToggleButton[10][10];

while( eins < 10 && zwei < 10 )
{
...
}
// weil button 10x10 groß ist
 
Ah, nun funktioniert es, wenn auch nicht ganz richtig angeordnet aber das bekomme ich wohl hin, verbesserter Quelltext:

Java:
package affen_trainer;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import java.awt.Rectangle;
public class gui extends JFrame 
{
	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JToggleButton[][] button = null;
	private JToggleButton[][] getbutton()
	{
		if (button == null) 
		{
			button = new JToggleButton[10][10];
			int x = 15;
			int y = 15;
			int eins = 1;
			int zwei = 2;
			while(eins < 10 && zwei < 10)
			{
				button[eins][zwei] = new JToggleButton();
				button[eins][zwei].setBounds(new Rectangle(x, 25, y, 25));
				jContentPane.add(button[eins][zwei]);
				x = x + 25;
				zwei++;
				if(zwei == 10 && eins <= 10)
				{
					zwei = 1;
					y = y + 25;
					eins++;
				}
			}
		}
		return button;
	}
	public static void main(String[] args) 
	{
		SwingUtilities.invokeLater(new Runnable() 
		{
			public void run()
			{
				gui thisClass = new gui();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}
	public gui() 
	{
		super();
		initialize();
		getbutton();
	}
	private void initialize() 
	{
		this.setSize(500, 500);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}
	private JPanel getJContentPane() 
	{
		if (jContentPane == null) 
		{
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
		}
		return jContentPane;
	}
}

Vielen dank an euch ;D

mfg,
SkonroX
 
Ist dies das gewünschte Ergebnis? Verdrehst du da nicht die Parameter von
Java:
new Rectangle(x, 25, y, 25)
?? 🙂

Mit einer for-Schleife ginge das übrigens etwas lesbarer:
Java:
			button = new JToggleButton[10][10];
			int y = 15;
			for (int i = 0; i < button.length; i++) {
				int x = 15;
				for (int j = 0; j < button[i].length; j++) {
					button[i][j] = new JToggleButton();
					button[i][j].setBounds(new Rectangle(x, y, 25, 25));
					jContentPane.add(button[i][j]);
					x += 25;
				}
				y += 25;
			}

Noch besser wäre auch ein LayoutManager..mit dem GirdLayout ginge das wahrscheinlich alles noch viel leichter..aber das ist nur meine Meinung dazu 🙂
 
Danke für den Tipp, aber ich Löse es lieber so:

Java:
private JToggleButton[][] getbutton()
	{
		if (button == null) 
		{
			button = new JToggleButton[10][10];
			int x = 15;
			int y = 15;
			int eins = 1;
			int zwei = 1;
			while(eins < 10 && zwei < 10)
			{
				button[eins][zwei] = new JToggleButton();
				button[eins][zwei].setBounds(new Rectangle(x, y, 45, 45));
				jContentPane.add(button[eins][zwei]);
				x = x + 45;
				zwei++;
				if(zwei == 10 && eins < 10)
				{
					zwei = 1;
					y = y + 45;
					x = 15;
					eins++;
				}
			}
		}
		return button;
	}

Funktioniert wie ich es wollte ;D

mfg,
SkonroX
 
Hmm ...
Java:
int eins = 1;
int zwei = 1;
while(..)
{
button[eins][zwei] = new JToggleButton();

}
Ist auch falsch , Arrays beginnen von 0 - ... 🙂

Übernehme mal die Variante von eRaaaa.
 

Neue Themen


Zurück
Oben