java - Accessing an object created by a constructor -
i'm trying learn basic gui implementation in java.
i have 2 classes, 1 contains constructor. constructor creates new jframe object.
i'm having trouble working jframe constructor - want change size, , other operations, can't figure out how to, after call constructor.
here both classes, bmrcalcmain:
import javax.swing.*; public class bmrcalcmain { public static void main(string[] args) { bmrcalcv2 frame = new bmrcalcv2(); bmrcalcv2.newframe.setdefaultcloseoperation(jframe.exit_on_close); bmrcalcv2.newframe.setvisible(true); bmrcalcv2.newframe.setsize(650, 475); bmrcalcv2.newframe.setresizable(false); } }
bmrcalcv2:
package v2; import javax.swing.*; import java.awt.flowlayout; public class bmrcalcv2 { private jlabel agelabel; private jlabel genderlabel; private jlabel img1; static jframe newframe; public bmrcalcv2() { newframe = new jframe("bmr/tdee calculator"); newframe.setlayout(new flowlayout()); agelabel = new jlabel("age:"); genderlabel = new jlabel("gender:"); img1 = new jlabel(new imageicon("filesrc/bodybuilding-icon.png")); newframe.add(agelabel); newframe.add(genderlabel); newframe.add(img1); } }
when run application, jlabels , images bmrcalcv2
class not appear. believe because in main class, use of frame wrong (i need use newframe somehow if change frame newframe throws errors).
any guidance appreciated.
understand bmrcalcv2 class uses two jframes, not one. 1 instance of bmrcalcv2 class extends jframe, , other private field within bmrcalcv2's constructor. should rid of 1 or other straighten out. if decide use variable, make field of class, not variable local constructor. or if want use jframe class extends from, rid of newframe field:
i.e,
import javax.swing.*; import java.awt.flowlayout; public class bmrcalcv2 extends jframe { private jlabel agelabel; private jlabel genderlabel; private jlabel img1; public bmrcalcv2() { super("bmr/tdee calculator"); setlayout(new flowlayout()); agelabel = new jlabel("age:"); genderlabel = new jlabel("gender:"); img1 = new jlabel(new imageicon("filesrc/bodybuilding-icon.png")); add(agelabel); add(genderlabel); add(img1); } }
other side recommendations:
- usually it's better not set sizes of components rather let components , layout managers size themselves.
- understand layout managers go, flowlayout not brightest in pack, , gui's more complex, 1 soon, you'll want nest jpanels using more robust layouts.
- none of swing gui's extend jframe rather of them either extend jpanel or geared towards producing jpanel, , way gain flexibility since can place jpanel anywhere wish, in jframe, jdialog, joptionpane, jpanel, in jtabbedpane,.....
Comments
Post a Comment