2016-03-31 23 views
0

JPanelGridLayout(2,2)を使用して4つの画像を表示する最も適切な方法は何ですか?JPanelでGridLayoutを使用して画像を表示する方法は?

問題が解決しました。これが私のやり方です。それは効率的ではないかもしれませんが、読むのは簡単ですし、それは動作します:) これはどのように改善できるか教えてください!私はいつもどのようにコードを改善する方法を探しています!

//  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

*複製*最も適切なを見つけるためにしようと... [Javaのスイング - JPanelの上で動的に複数の画像を表示する]の –

+2

可能な複製(http://stackoverflow.com/questions/8500746/java-swing- jpanelを表示する複数の画像を表示する) –

+0

* "..ローカルフォルダから" *どのようなローカル?サーバー、またはクライアントマシン?いずれの方法でも、ディレクトリであり、「フォルダ」ではないことに注意してください。これはまったくGUIのコンセプトです。どちらの部分に問題がありますか?何を試しましたか? –

答えて

1

画像をJLabelに入れてください。

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()); 

アンドリュー・トンプソンは、これは非常に単純なアプレットが表示されたURLから4枚の画像である

を示唆したように更新UPDATE

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(new Dimension(200、200));'サイズを推測しないでください。 'pack()'フレームを作成し、そのサイズを最小サイズの基礎として使用します。 –

+0

'new File(" test.jpg ")'存在しないファイルのローカルファイルシステム(クライアントマシンの)を検索するので、これはアプレットでは機能しません! –

+0

@AndrewThompsonこれらを指摘していただきありがとうございます。サイズの設定方法を変更しました。私は彼女が 'GridLayout'を使って画像を' JPanel'に入れる方法を尋ねていると思っていました。私は彼女がどこの画像を手に入れたいのか分かりません。 –

関連する問題