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;importjavax.swing.SwingUtilities;importjavax.swing.JPanel;importjavax.swing.JFrame;importjavax.swing.JToggleButton;importjava.awt.Rectangle;publicclass gui extendsJFrame{privatestaticfinallong serialVersionUID =1L;privateJPanel jContentPane =null;privateJToggleButton[][] button =null;privateJToggleButton[][]getbutton(){if(button ==null){int x =15;int y =15;int eins =1;int zwei =2;while(eins ==10&& zwei ==10){
button[eins][zwei]=newJToggleButton();
button[eins][zwei].setBounds(newRectangle(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;}publicstaticvoidmain(String[] args){SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){
gui thisClass =newgui();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);}});}publicgui(){super();initialize();getbutton();}privatevoidinitialize(){this.setSize(500,500);this.setContentPane(getJContentPane());this.setTitle("JFrame");}privateJPanelgetJContentPane(){if(jContentPane ==null){
jContentPane =newJPanel();
jContentPane.setLayout(null);}return jContentPane;}}
ö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.
ö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.
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)
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...
Ah, nun funktioniert es, wenn auch nicht ganz richtig angeordnet aber das bekomme ich wohl hin, verbesserter Quelltext:
Java:
package affen_trainer;importjavax.swing.SwingUtilities;importjavax.swing.JPanel;importjavax.swing.JFrame;importjavax.swing.JToggleButton;importjava.awt.Rectangle;publicclass gui extendsJFrame{privatestaticfinallong serialVersionUID =1L;privateJPanel jContentPane =null;privateJToggleButton[][] button =null;privateJToggleButton[][]getbutton(){if(button ==null){
button =newJToggleButton[10][10];int x =15;int y =15;int eins =1;int zwei =2;while(eins <10&& zwei <10){
button[eins][zwei]=newJToggleButton();
button[eins][zwei].setBounds(newRectangle(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;}publicstaticvoidmain(String[] args){SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){
gui thisClass =newgui();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);}});}publicgui(){super();initialize();getbutton();}privatevoidinitialize(){this.setSize(500,500);this.setContentPane(getJContentPane());this.setTitle("JFrame");}privateJPanelgetJContentPane(){if(jContentPane ==null){
jContentPane =newJPanel();
jContentPane.setLayout(null);}return jContentPane;}}
Ist dies das gewünschte Ergebnis? Verdrehst du da nicht die Parameter von
Java:
newRectangle(x,25, y,25)
??
Mit einer for-Schleife ginge das übrigens etwas lesbarer:
Java:
button =newJToggleButton[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]=newJToggleButton();
button[i][j].setBounds(newRectangle(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
privateJToggleButton[][]getbutton(){if(button ==null){
button =newJToggleButton[10][10];int x =15;int y =15;int eins =1;int zwei =1;while(eins <10&& zwei <10){
button[eins][zwei]=newJToggleButton();
button[eins][zwei].setBounds(newRectangle(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;}