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.

picture of program

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

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

php - How to remove letter in front of the word laravel -

minify - Minimizing css files -