2016-05-10 5 views
1

Dies ist mein CodeJava Layout bei der Verwendung von JScrollPane

private static KeyEvent e; 
private static String text1 = null; 
private static String text = null; 

    public fysikdel() { 
    super("Fysikformler"); 
    setSize(700, 502); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    init(); 
    setResizable(true); 
    setVisible(true); 
    } 

    public void init() { 
    JPanel main = new JPanel(); 
    JPanel p = new JPanel(); 
    CardLayout c1 = new CardLayout(); 

    JScrollPane scrollpane = new JScrollPane(p); 

    JPanel Mekanik = new JPanel(); 
    p.setSize(700, 502); 
    Mekanik.setLayout(new FlowLayout()); 

    //637*237 
    ImageIcon likformigrorelsei = new ImageIcon(); 
    JLabel likformigrorelsel = new JLabel(); 

    ImageIcon lagesenergii = new ImageIcon(); 
    JLabel lagesenergil = new JLabel(); 

    ImageIcon a = new ImageIcon(); 
    JLabel aa = new JLabel(); 

    ImageIcon b = new ImageIcon(); 
    JLabel bb = new JLabel(); 

    try { 
     likformigrorelsei = new ImageIcon(new URL("http://i.imgur.com/TZFkXYa.jpg")); 
    } catch (MalformedURLException e1) { 
     e1.printStackTrace(); 
    } 
    likformigrorelsel.setIcon(likformigrorelsei); 

    try { 
     lagesenergii = new ImageIcon(new URL("http://i.imgur.com/TZFkXYa.jpg")); 
    } catch (MalformedURLException e1) { 
     e1.printStackTrace(); 
    } 
    lagesenergil.setIcon(lagesenergii); 

    try { 
     a = new ImageIcon(new URL("http://i.imgur.com/TZFkXYa.jpg")); 
    } catch (MalformedURLException e1) { 
     e1.printStackTrace(); 
    } 

    aa.setIcon(a); 

    try { 
     b = new ImageIcon(new URL("http://i.imgur.com/TZFkXYa.jpg")); 
    } catch (MalformedURLException e1) { 
     e1.printStackTrace(); 
    } 

    bb.setIcon(b); 

    Mekanik.add(likformigrorelsel); 
    Mekanik.add(lagesenergil); 
    Mekanik.add(aa); 
    Mekanik.add(bb); 

    JPanel Tryck = new JPanel(); 

    main.setLayout(new GridLayout(1,1)); 
    p.setLayout(c1); 

    this.add(main); 

    main.add(scrollpane); 

    p.add(Mekanik, "1"); 
    p.add(Tryck, "2"); 
    c1.show(p, "1"); 

Wenn ich mehr Bilder hinzufügen ich sie will von links aufzufüllen nach rechts, bis eine Zeile gefüllt ist, dann die nächste Zeile füllen. Im Moment füllt es nur noch die erste Reihe.

Wenn ich

scrollpane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER); 

fügen Sie es entfernt nur die horizontale Bildlaufleiste, aber die Bilder sind zu Ende noch auf eine Zeile nach oben.

Ich weiß nicht, was falsch ist. Danke für jede Hilfe!

+1

[WrapLayout] (https://tips4java.wordpress.com/2008/11/06/wrap-layout/) – MadProgrammer

Antwort

2

Sie legen also alle Ihre Bilder in das Mekanik Panel, das eine FlowLayout verwendet. Wie the java tutorial Staaten,

The FlowLayout class puts components in a row, sized at their preferred size 

, die offensichtlich nicht das, was Sie wollen. Sie müssen also das von Ihrem Panel verwendete Layout ändern.

In meinen Augen wäre die GridLayout eine bessere Lösung für Ihr Problem.

+0

GridLayout löst das Problem nicht, da Sie die Anzahl der Spalten fest codieren müssen. Wenn sich die Breite des Rahmens ändert, kann sich auch die Anzahl der Bilder pro Zeile ändern. Das 'WrapLayout', wie im Kommentar vorgeschlagen, ermöglicht es Komponenten, bei Bedarf in die nächste Zeile zu wechseln. – camickr