2016-04-09 10 views
0

左側にクリックして右側に表示できる画像のリストを含む流出したパネルを使用していますが、画像が多少あります。私は画像をウィンドウサイズで拡大縮小可能にしたい。 EXITボタンの近くにマウスをドラッグしてウィンドウを大きくすると、画像が大きくなり、その逆も小さくなります。現時点では、JFrameはデフォルトのウィンドウサイズが固定されていますが、イメージが大きすぎて完全に表示されません。JPanelでイメージをウィンドウサイズにスケーラブルにするにはどうすればいいですか?

ドライバー・クラス:

import java.awt.*; 
import javax.swing.*; 
public class PickImage 
{ 
    //----------------------------------------------------------------- 
    // Creates and displays a frame containing a split pane. The 
    // user selects an image name from the list to be displayed. 
    //----------------------------------------------------------------- 
    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame("Pick Image"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setSize(500, 300); 

     JLabel imageLabel = new JLabel(); 
     JPanel imagePanel = new JPanel(); 
     imagePanel.add(imageLabel); 
     imagePanel.setBackground(Color.white); 

     ListPanel imageList = new ListPanel(imageLabel); 

     JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, 
            imageList, imagePanel); 

     sp.setOneTouchExpandable(true); 

     frame.getContentPane().add(sp); 

     frame.setVisible(true); 
    } 
} 

ListPanelクラス:JPanelのは、デフォルトでFlowLayoutのを使用して、すべての

import java.awt.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class ListPanel extends JPanel 
{ 

    private JLabel label; 
    private JList list; 
    public ListPanel(JLabel imageLabel) 
    { 
     label = imageLabel; 

     String[] fileNames = { "Denali2.jpg", 
          "denali.jpg", 
          "MauiLaPerouseBay.jpg", 
           }; 
     list = new JList(fileNames); 
     list.addListSelectionListener(new ListListener()); 
     list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
     add(list); 
     setBackground(Color.white); 
} 
    private class ListListener implements ListSelectionListener 
    { 
     public void valueChanged(ListSelectionEvent event) 
     { 
     if (list.isSelectionEmpty()) 
      label.setIcon(null); 
     else 
     { 
      String fileName = (String)list.getSelectedValue(); 
      ImageIcon image = new ImageIcon(fileName); 
      label.setIcon(image); 
     } 
     } 
    } 
} 
+0

[ImageIconを自動的にラベルサイズに合わせる]の複製が可能です(http://stackoverflow.com/questions/14548808/scale-the-imageicon-automatically-to-label-size) – Titus

答えて

0
JPanel imagePanel = new JPanel(); 
    imagePanel.add(imageLabel); 

まず

は、ここに私のコードです。したがって、コンポーネントは望ましいサイズで表示されるので、ラベルは決してサイズ変更されません。

だから、ラベルが使用可能なスペースにサイズを変更できるようにレイアウトを変更する必要があります。

JPanel imagePanel = new JPanel(new BorderLayout()); 

次にあなたがStretch Iconを使用することができます。このアイコンは、親コンポーネントで使用可能なスペースを埋めるように自動的に拡大/縮小されます。

もう1つの選択肢は、画像をパネルにペイントしてから、ペイントしながら画像を拡大縮小することです。詳細と例についてCustom Painting上のSwingのチュートリアルからのセクションをお読み

@Override 
protected void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    Dimension d = getSize(); 
    g.drawImage(image, 0, 0, d.width, d.height, this); 

} 

:あなたは、あなたのパネルのpaintComponent()メソッドをオーバーライドする必要があります。

また、このアプローチのより洗練された実装であるBackground Panelをチェックすることもできます。それはあなたが元のサイズで1)縮尺、2)タイル張り3)画像をペイントすることができます。

+0

paintComponentメソッドはListListenerイベントクラスまたはそれ自身のエンティティですか?私が得ている唯一のエラーは、paintComponentメソッドでイメージシンボル –

+0

@UsmanBashiruを見つけることができないということです。カスタムペイントチュートリアルを読んでデモコードをダウンロードし、デモコードをテストして基礎を理解してください。その後、カスタマイズすることができます。あなた自身で学ぶことができるSwingの基礎については、Swingチュートリアルへのリンクを残しておいてください。あるいは、BackgroundPanelをダウンロードしてそこのコードを見れば、カスタムペインティングがどのように動作するか見ることができます。 – camickr