i'd create 2 nested border layouts inner border layout holds panel center. panel should have vertical flow , specific components should grow , use available space. in end panel should wrapped jscrollpane, it'll vertical scrollbar whenever not can shown @ default size. along lines of:
+-------------------------------+ | | | +-----------------------+ | | | don't grow | | | +-----------------------+ | | | | +-----------------------+ | | | | | | | growy | | | | | | | +-----------------------+ | | | | +-----------------------+ | | | don't grow | | | +-----------------------+ | | | | +-----------------------+ | | | | | | | growy | | | | | | | +-----------------------+ | | | +-------------------------------+ this how far got:

provided following sscce:
public class simplemain { public static void main(string[] args) { swingutilities.invokelater(new runnable() { public void run() { //createandshowmiggui(); createandshowswinggui(); } }); } private static void createandshowswinggui() { jframe frame = new jframe("swing"); frame.setdefaultcloseoperation(jframe.exit_on_close); /* frame */ frame.setlayout(new borderlayout()); /* outer panel */ jpanel outerpanel = new jpanel(new borderlayout()); outerpanel.add(new jtextfield("inner north"), borderlayout.north); outerpanel.add(new jtextfield("inner south"), borderlayout.south); outerpanel.add(new jtextfield("inner west"), borderlayout.west); outerpanel.add(new jtextfield("inner east"), borderlayout.east); /* text area */ jtextarea area = new jtextarea("ahjaskjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawdhjaskjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawdhjaskjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawdhjaskjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawdhjaskjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawd"); area.setlinewrap(true); area.setwrapstyleword(true); /* elements container */ jpanel innerpanel = new jpanel(new gridbaglayout()); /* grid bag constraints */ gridbagconstraints cons = new gridbagconstraints(); cons.fill = gridbagconstraints.horizontal; cons.weightx = 1; cons.gridx = 0; /* elements */ innerpanel.add(area, cons); // component should use available y-space innerpanel.add(new jradiobutton("test hello"), cons); // remain as-is innerpanel.add(new jtextfield("some text field..."), cons); // remain as-is innerpanel.add(new jtextfield("some text field push..."), cons); // component should use available y-space /* add inner panel outer panel */ outerpanel.add(new jscrollpane(innerpanel), borderlayout.center); /* add outer elements */ frame.getcontentpane().add(new jtextfield("outer north"), borderlayout.north); frame.getcontentpane().add(new jtextfield("outer south"), borderlayout.south); frame.getcontentpane().add(new jtextfield("outer west"), borderlayout.west); frame.getcontentpane().add(new jtextfield("outer east"), borderlayout.east); frame.getcontentpane().add(outerpanel, borderlayout.center); frame.setsize(800, 600); frame.setvisible(true); frame.setlocation(40, 40); } }
i have trouble using 1 gridbagconstraints of components of gridbaglayout, created constraints each of components. can't remember defaults anyway.
the changes included adding weights , setting proper fill gridbagconstraints.

edited respond comment.
when window (jframe) expands, jtextarea, along other components in window, expands. when window shrinks in size, jtextarea not shrink. around problem, put jtextarea in jscrollpane, , removed , added jtextarea every time jframe size changed.
here's code.
import java.awt.borderlayout; import java.awt.component; import java.awt.container; import java.awt.gridbagconstraints; import java.awt.gridbaglayout; import java.awt.insets; import java.awt.event.windowevent; import java.awt.event.windowstatelistener; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jradiobutton; import javax.swing.jscrollpane; import javax.swing.jtextarea; import javax.swing.jtextfield; import javax.swing.swingutilities; public class simplemain { protected static final insets default_insets = new insets(0, 4, 4, 4); protected static jtextarea area; public static void main(string[] args) { swingutilities.invokelater(new runnable() { public void run() { // createandshowmiggui(); createandshowswinggui(); } }); } private static void createandshowswinggui() { final jframe frame = new jframe("swing"); frame.setdefaultcloseoperation(jframe.exit_on_close); /* frame */ frame.setlayout(new borderlayout()); /* outer panel */ jpanel outerpanel = new jpanel(new borderlayout()); outerpanel.add(new jtextfield("inner north"), borderlayout.north); outerpanel.add(new jtextfield("inner south"), borderlayout.south); outerpanel.add(new jtextfield("inner west"), borderlayout.west); outerpanel.add(new jtextfield("inner east"), borderlayout.east); area = settextarea(); final jscrollpane scrollpane = new jscrollpane(area); /* elements container */ final jpanel innerpanel = new jpanel(new gridbaglayout()); /* elements */ int gridy = 0; // component should use available y-space addcomponent(innerpanel, scrollpane, 0, gridy++, 1, 1, 1.0d, 800.0d, default_insets, gridbagconstraints.line_start, gridbagconstraints.both); // remain as-is jradiobutton hellobutton = new jradiobutton("test hello"); addcomponent(innerpanel, hellobutton, 0, gridy++, 1, 1, 1.0d, 1.0d, default_insets, gridbagconstraints.line_start, gridbagconstraints.horizontal); // remain as-is jtextfield textfield1 = new jtextfield("some text field..."); addcomponent(innerpanel, textfield1, 0, gridy++, 1, 1, 1.0d, 1.0d, default_insets, gridbagconstraints.line_start, gridbagconstraints.horizontal); // component should use available y-space jtextfield textfield2 = new jtextfield("some text field push..."); addcomponent(innerpanel, textfield2, 0, gridy++, 1, 1, 1.0d, 800.0d, default_insets, gridbagconstraints.line_start, gridbagconstraints.both); /* add inner panel outer panel */ outerpanel.add(new jscrollpane(innerpanel), borderlayout.center); /* add outer elements */ frame.getcontentpane().add(new jtextfield("outer north"), borderlayout.north); frame.getcontentpane().add(new jtextfield("outer south"), borderlayout.south); frame.getcontentpane().add(new jtextfield("outer west"), borderlayout.west); frame.getcontentpane().add(new jtextfield("outer east"), borderlayout.east); frame.getcontentpane().add(outerpanel, borderlayout.center); frame.addwindowstatelistener(new windowstatelistener() { @override public void windowstatechanged(windowevent event) { scrollpane.getviewport().remove(area); area = settextarea(); scrollpane.getviewport().add(area); } }); frame.setsize(800, 600); frame.setlocation(40, 40); frame.setvisible(true); } private static jtextarea settextarea() { /* text area */ jtextarea area = new jtextarea(); area.settext("ahjaskjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawd " + "askjdhuyawduyawdhjaskjdhuyawduyawd askjdhuyawduyawd " + "askjdhuyawduyawd askjdhuyawduyawdhjaskjdhuyawduyawd " + "askjdhuyawduyawd askjdhuyawduyawd " + "askjdhuyawduyawdhjaskjdhuyawduyawd askjdhuyawduyawd " + "askjdhuyawduyawd askjdhuyawduyawdhjaskjdhuyawduyawd " + "askjdhuyawduyawd askjdhuyawduyawd askjdhuyawduyawd"); area.setlinewrap(true); area.setwrapstyleword(true); return area; } private static void addcomponent(container container, component component, int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, insets insets, int anchor, int fill) { gridbagconstraints gbc = new gridbagconstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, 0, 0); container.add(component, gbc); } }
Comments
Post a Comment