jpanel - Java JScrollPane ve -
i want make java-code, can insert many panels want. can scroll down see panels. i'm far right now: problem is, can't scroll down. tested jscrollpane jtextareas worked fine.
package test; import java.awt.*; import javax.swing.*; public class scrollbar { public static void main(string[] args) { jframe frame = new jframe(); jpanel panel = new jpanel(); jpanel panel1 = new jpanel(); jpanel panel2 = new jpanel(); jpanel panel3 = new jpanel(); jtextfield tfid = new jtextfield("id: ", 5); jtextfield tfname = new jtextfield("name: ", 5); jtextfield tfhersteller = new jtextfield("hersteller: ", 5); jtextfield tfid2 = new jtextfield("id: ", 5); jtextfield tfname2 = new jtextfield("name: ", 5); jtextfield tfhersteller2 = new jtextfield("hersteller: ", 5); jtextfield tfid3 = new jtextfield("id: ", 5); jtextfield tfname3 = new jtextfield("name: ", 5); jtextfield tfhersteller3 = new jtextfield("hersteller: ", 5); frame.setsize(400, 400); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setlayout(new flowlayout()); panel.setlayout(new flowlayout()); panel.setpreferredsize(new dimension(200, 85)); panel.add(panel1); panel.add(panel2); panel.add(panel3); jscrollpane scrollpanel = new jscrollpane(panel, jscrollpane.vertical_scrollbar_always, jscrollpane.horizontal_scrollbar_always); panel1.setlayout(new flowlayout()); panel1.add(tfid); panel1.add(tfname); panel1.add(tfhersteller); panel2.setlayout(new flowlayout()); panel2.add(tfid2); panel2.add(tfname2); panel2.add(tfhersteller2); panel3.setlayout(new flowlayout()); panel3.add(tfid3); panel3.add(tfname3); panel3.add(tfhersteller3); frame.add(scrollpanel); frame.setvisible(true); } }
you over-using flowlayout.
different layouts have diferent behaviors. first, need remove line:
frame.setlayout(new flowlayout()); the default layout frame’s content pane borderlayout. want leave way, because component added borderlayout no constraints placed in center, stretch fill entire space.
second, want remove these:
panel.setlayout(new flowlayout()); panel.setpreferredsize(new dimension(200, 85)); setting preferred size interferes jscrollpane’s ability manage view (that is, panel). when want have components appear on multiple rows, should try force flowlayout constraining width; rather, use layout designed place components on different rows. best choice gridbaglayout:
panel.setlayout(new gridbaglayout()); gridbagconstraints gbc = new gridbagconstraints(); gbc.gridwidth = gridbagconstraints.remainder; panel.add(panel1, gbc); panel.add(panel2, gbc); gbc.weighty = 1; gbc.anchor = gridbagconstraints.north; panel.add(panel3, gbc); the use of gridbagconstraints.remainder in constraint tell gridbaglayout make child component take entire row.
the use of weighty = 1 tells gridbaglayout grid cell of child added should take vertical space, when panel larger children. finally, gridbagconstraints.north keeps child placed @ top of stretched grid cell, no matter how high grid cell is.
Comments
Post a Comment