2016-03-31 13 views
0

Was wäre die am besten geeignete Methode, um 4 Bilder mit einem GridLayout(2,2) auf einem JPanel anzuzeigen?Wie können Bilder mit GridLayout auf JPanel angezeigt werden?

Problem gelöst !! So habe ich es gemacht. Es ist vielleicht nicht effizient, aber es ist einfach zu lesen und es funktioniert :) Fühlen Sie sich frei zu lassen Sie mich wissen, wie dies verbessert werden kann! Ich bin immer auf der Suche nach Möglichkeiten, Code zu verbessern!

//  Create panel and set layout 
     pFlag= new JPanel(); 
     pFlag.setLayout(new GridLayout(2,2,10,10)); 

//  Get image  
     flag1Img = getImage(getCodeBase(), "croatia.png"); 
     flag2Img = getImage(getCodeBase(), "eng.png"); 
     flag3Img = getImage(getCodeBase(), "romania.png"); 
     flag4Img = getImage(getCodeBase(), "spain.png");   

//  Set as icon  
     flag1Icon = new ImageIcon(flag1Img); 
     flag2Icon = new ImageIcon(flag2Img); 
     flag3Icon = new ImageIcon(flag3Img); 
     flag4Icon = new ImageIcon(flag4Img); 

//  Create JLabel  
     flag1Label = new JLabel(); 
     flag2Label = new JLabel(); 
     flag3Label = new JLabel(); 
     flag4Label = new JLabel(); 

//  Set JLabel alignment   
     flag1Label.setHorizontalAlignment(JLabel.CENTER); 
     flag1Label.setVerticalAlignment(JLabel.CENTER); 
     flag2Label.setHorizontalAlignment(JLabel.CENTER); 
     flag2Label.setVerticalAlignment(JLabel.CENTER); 
     flag3Label.setHorizontalAlignment(JLabel.CENTER); 
     flag3Label.setVerticalAlignment(JLabel.CENTER); 
     flag4Label.setHorizontalAlignment(JLabel.CENTER); 
     flag4Label.setVerticalAlignment(JLabel.CENTER);  

//  Set JLabels as icons 
     flag1Label.setIcon(flag1Icon); 
     flag2Label.setIcon(flag2Icon); 
     flag3Label.setIcon(flag3Icon); 
     flag4Label.setIcon(flag4Icon); 

//  Assign icons to images 
     pFlag.add(flag1Label); 
     pFlag.add(flag2Label); 
     pFlag.add(flag3Label); 
     pFlag.add(flag4Label); 

     con.add(pFlag); 
+0

Der Versuch, die * am besten geeignete zu finden * doppelte ... –

+2

Mögliche Duplikat [Java Swing - mehrere Bilder dynamisch auf JPanel Anzeige] (http://stackoverflow.com/questions/8500746/java-swing- displaying-multiple-images-dynamisch-auf-jpanel) –

+0

* ".. aus einem lokalen Ordner" * Local was? Der Server oder der Clientcomputer? Beachten Sie, dass es sich in jedem Fall um ein Verzeichnis und nicht um einen "Ordner" handelt, bei dem es sich um ein GUI-Konzept handelt. Mit welchem ​​Teil hast du Probleme? Was hast du probiert? –

Antwort

1

Geben Sie einfach Ihre Bilder in JLabel s.

JFrame frame = new JFrame("Test"); 
JPanel panel = new JPanel(new GridLayout(2, 2)); 
frame.setContentPane(panel); 

frame.setVisible(true); 
JLabel label1 = new JLabel(); 
panel.add(label1); 
JLabel label2 = new JLabel(); 
panel.add(label2); 
JLabel label3 = new JLabel(); 
panel.add(label3); 
JLabel label4 = new JLabel(); 
panel.add(label4); 

try { 
    BufferedImage myPicture = ImageIO.read(new File("test.jpg")); 

    label1.setIcon(new ImageIcon(myPicture)); 
    label2.setIcon(new ImageIcon(myPicture)); 
    label3.setIcon(new ImageIcon(myPicture)); 
    label4.setIcon(new ImageIcon(myPicture)); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

frame.pack(); 
frame.setMinimumSize(frame.getPreferredSize()); 

UPDATE als Andrew Thompson vorgeschlagen

aktualisiert

Dies ist ein sehr einfaches Applet zeigt 4 Bilder von einer URL.

public class Main extends JApplet { 

    public void paint(Graphics g) { 
     JPanel panel = new JPanel(new GridLayout(2, 2)); 
     add(panel); 

     JLabel label1 = new JLabel(); 
     panel.add(label1); 
     JLabel label2 = new JLabel(); 
     panel.add(label2); 
     JLabel label3 = new JLabel(); 
     panel.add(label3); 
     JLabel label4 = new JLabel(); 
     panel.add(label4); 

     try { 
      URL url = new URL("YOU_IMAGE_URL.jpg"); 
      Image myPicture = getImage(url); 

      label1.setIcon(new ImageIcon(myPicture)); 
      label2.setIcon(new ImageIcon(myPicture)); 
      label3.setIcon(new ImageIcon(myPicture)); 
      label4.setIcon(new ImageIcon(myPicture)); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
+0

'frame.setMinimumSize (neue Dimension (200, 200));' Raten Sie keine Größen. 'pack()' den Rahmen, dann verwende seine Größe als Grundlage für die Mindestgröße. –

+0

'neue Datei (" test.jpg ")' Dies funktioniert nicht in einem Applet, da es das lokale Dateisystem (des Client-Rechners) nach einer Datei durchsucht, die nicht existiert! –

+0

@AndrewThompson Vielen Dank für das Aufzeigen dieser. Changed wie die Größe eingestellt wurde. Ich dachte, sie würde nur fragen, wie man Bilder mit 'GridLayout' in ein' JPanel' legt. Ich habe keine Ahnung, wo sie die Bilder bekommen möchte. –