java - JPanel appearing to be two times bigger than set resolution -
i must tried , can't understand what's wrong code. in siview class create mainframe extends jframe specified resolution (let's x,y). create gamepanel extends jpanel whith same resolution mainframe, , add mainframe. problem effective resolution of panel twice big (x*2, y*2). it's panel being streched twice big.
frame display quarter (upper left quarter) of panel either pack() or mannualy setting size, unless set double resolution in case it's ok, that's not proper way that(when calculating positions in game have double or divide 2 keep proper proportions). tried different layout managers wthout succes.
here's code of main view class:
public class siview implements runnable { private final mainframe mainframe; private final gamepanel gamepanel; public siview(blockingqueue<sievent> eventqueue) { this.eventsqueue = eventqueue; mainframe = new mainframe(); gamepanel = new gamepanel(); gamepanel.setvisible(true); mainframe.getcontentpane().add(gamepanel); // mainframe.pack(); @override public void run() { mainframe.setvisible(true); } public void init() { swingutilities.invokelater(this); } //some code not related } the frame class:
public class mainframe extends jframe { /** * */ private static final long serialversionuid = 6513420589842315661l; public mainframe() { settitle("space intruders"); setsize(new dimension(siparams.res_x, siparams.res_y)); setresizable(false); setlayout(null); setdefaultcloseoperation(jframe.exit_on_close); } } panel class:
public class gamepanel extends jpanel { /** * */ private static final long serialversionuid = 8112087715257989968l; private final playershipview playership; private final arraylist<smallenemyshipview> smallenemyship; private final arraylist<lightmissleview> lightmissle; public gamepanel() { setpreferredsize(new dimension(siparams.res_x, siparams.res_y)); setmaximumsize(new dimension(siparams.res_x, siparams.res_y)); setbounds(0, 0, siparams.res_x, siparams.res_y); setbackground(new color(0, 0, 0)); setlayout(new overlaylayout(this)); setdoublebuffered(true); // todo playership = new playershipview(); smallenemyship = new arraylist<smallenemyshipview>(); lightmissle = new arraylist<lightmissleview>(); this.add(playership); } @override public void paintcomponent(graphics g) { super.paintcomponent(g); } //some code not related }
if use layoutmanager , override getpreferredsize() in gamepanel, code seems work expected:
import java.awt.color; import java.awt.dimension; import java.awt.graphics; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.swingutilities; import org.jfree.ui.overlaylayout; public class siview implements runnable { public static interface siparams { int res_x = 500; int res_y = 400; } public static class gamepanel extends jpanel { public gamepanel() { setbackground(new color(0, 0, 0)); setlayout(new overlaylayout()); } @override public dimension getpreferredsize() { return new dimension(siparams.res_x, siparams.res_y); } @override public void paintcomponent(graphics g) { super.paintcomponent(g); } // code not related } private jframe mainframe; private gamepanel gamepanel; @override public void run() { mainframe = createmainframe(); gamepanel = new gamepanel(); mainframe.getcontentpane().add(gamepanel); mainframe.pack(); mainframe.setvisible(true); } private jframe createmainframe() { jframe frame = new jframe(); frame.settitle("space intruders"); frame.setresizable(false); frame.setdefaultcloseoperation(jframe.exit_on_close); return frame; } public void init() { swingutilities.invokelater(this); } // code not related public static void main(string[] args) { new siview().init(); } } i dropped mainframe class since not needed extend jframe in context.
Comments
Post a Comment