java - Can't center JButtons -
i need centering jbuttons. right now, centered horizontally, refuse center vertically. here code 2 classes game , menu. also, there anyway put spaces between buttons using blocklayout.
game class:
package main; import java.awt.*; import javax.swing.jframe; import javax.swing.jpanel; public class game extends jframe{ private static final long serialversionuid = -7071532049979466544l; public static final int width = 1280, height = width/12 * 9; private handler handler; public state state = state.menu; jpanel screen; //state of game public enum state{ menu, deckconstructor, game; } //game launch public game() { screen = new jpanel(new cardlayout()); screen.add(new menu(this).getmenu(), "menu"); screen.add(new deckconstructor(this).getdeckconstructor(), "deck_constructor"); getcontentpane().add(screen,borderlayout.center); setpreferredsize(new dimension(width, height)); setdefaultcloseoperation(jframe.exit_on_close); setresizable(false); pack(); setvisible(true); } public static void main(string[]args){ new game(); } } menu class:
package main; import java.awt.event.*; import java.awt.*; import javax.swing.*; import javax.swing.border.emptyborder; public class menu extends jframe implements actionlistener{ private jpanel buttonpanel; private jbutton play; private jbutton deckconstructor; private jbutton quit; private game game; public menu(game game){ this.game = game; buttonpanel = new jpanel(); play = new jbutton("play"); play.addactionlistener(this); deckconstructor = new jbutton("deck constructor"); deckconstructor.addactionlistener(this); quit = new jbutton("quit"); quit.addactionlistener(this); buttonpanel.add(play); buttonpanel.add(deckconstructor); buttonpanel.add(quit); buttonpanel.setlayout(new boxlayout(buttonpanel, boxlayout.y_axis)); play.setalignmentx(component.center_alignment); deckconstructor.setalignmentx(component.center_alignment); quit.setalignmentx(component.center_alignment); } public jpanel getmenu(){ return buttonpanel; } @override public void actionperformed(actionevent e) { // todo auto-generated method stub if(deckconstructor.equals((jbutton) e.getsource())){ cardlayout c1 = (cardlayout)(game.screen.getlayout()); c1.show(game.screen, "deck_constructor"); } } }
instead of boxlayout, used gridbaglayout , gridbagconstraints.
code:
public menu(game game) { this.game = game; buttonpanel = new jpanel(new gridbaglayout()); play = new jbutton("play"); play.addactionlistener(this); deckconstructor = new jbutton("deck constructor"); deckconstructor.addactionlistener(this); quit = new jbutton("quit"); quit.addactionlistener(this); gridbagconstraints c = new gridbagconstraints(); c.gridx = 0; c.gridy = 0; c.anchor = gridbagconstraints.center; // top, left, bottom, right c.insets = new insets(0, 0, 50, 0); buttonpanel.add(play, c); c = new gridbagconstraints(); c.gridx = 0; c.gridy = 1; c.anchor = gridbagconstraints.center; // top, left, bottom, right c.insets = new insets(0, 0, 50, 0); buttonpanel.add(deckconstructor, c); c = new gridbagconstraints(); c.gridx = 0; c.gridy = 2; c.anchor = gridbagconstraints.center; buttonpanel.add(quit, c); } to center it, used gridbagconstraints#anchor , add spacing, used gridbagconstraints#insets.
the original frame:

frame using gridbaglayout:

Comments
Post a Comment