2014-12-07 2 views
0

설정된 아이콘으로 JLabel의 크기를 조정하는 것에 대해 질문이 있습니다.창 크기를 조정할 때 패널에 설정된 아이콘으로 JLabel 크기 조정

내 솔루션은 ActionListener-interface의 actionperformed() - 메소드를 호출하여 Label의 크기를 조절하는 타이머를 작성했습니다.

더 좋은 해결책이 있습니까?

package examples; 

import images.MyImage; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.GridBagLayout; 
import java.awt.Image; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.image.BufferedImage; 

import javax.swing.Box; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class examples2 { 

    private static JFrame frame = new JFrame(); 
    private static JPanel panel = new JPanel(new BorderLayout()); 

    private static class ButtonHandler implements ActionListener { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      Image image = resizeImage(MyImage.IMAGE_BLUE_BLACKGROUND, 
        panel.getWidth(), panel.getHeight()); 
      label.setIcon(new ImageIcon(image)); 

     } 

    } 

    private static ActionListener buttonhandler = new ButtonHandler(); 
    private static Timer timer = new Timer(100, buttonhandler); 

    private static JLabel label = new JLabel(new ImageIcon(resizeImage(
      MyImage.IMAGE_BLUE_BLACKGROUND, 1600, 100))); 

    public static void main(String[] args) { 

     JPanel northPanel = new JPanel(new BorderLayout()); 
     JLabel text = new JLabel("Hakan Kiyar"); 

     frame.setLayout(new BorderLayout()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(northPanel, BorderLayout.NORTH); 
     frame.getContentPane().add(new JButton(), BorderLayout.CENTER); 
     frame.setVisible(true); 

     northPanel.add(Box.createVerticalStrut(10), BorderLayout.NORTH); 
     northPanel.add(Box.createHorizontalStrut(10), BorderLayout.WEST); 
     northPanel.add(Box.createHorizontalStrut(10), BorderLayout.EAST); 
     northPanel.add(Box.createVerticalStrut(10), BorderLayout.SOUTH); 
     northPanel.add(panel, BorderLayout.CENTER); 

     text.setForeground(Color.YELLOW); 

     label.setLayout(new GridBagLayout()); 
     label.add(text); 

     panel.add(label); 

     frame.setSize(364, 300); 

     timer.start(); 

    } 

    public static Image resizeImage(Image oldImage, int width, int height) { 

     Image newImage = new BufferedImage(width, height, 
       BufferedImage.TYPE_INT_ARGB); 

     Graphics g = newImage.getGraphics(); 

     g.drawImage(oldImage, 0, 0, null); 
     g.dispose(); 

     return newImage; 
    } 
} 

답변

2

Darryl의 Stretch Icon 클래스를 사용하여 아이콘의 크기를 동적으로 조정할 수 있습니다.

아이콘 크기를 조정하여 레이블에서 사용할 수있는 공간을 채 웁니다. 공간을 사용할 수있게되면 아이콘을 늘려 전체 공간을 채우거나 너비/높이 비율을 존중하도록 클래스를 구성 할 수 있습니다.