2014-12-07 24 views
0

我對調整具有設置圖標的JLabel大小有一定的疑問。在調整窗口大小時調整面板中設置的圖標的大小JLabel

我的解決方案是通過調用ActionListener接口的actionperformed()方法來創建一個調整標籤大小的Timer。

有沒有更好的解決方案?

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類動態調整圖標的大小。

它將調整圖標大小以填充標籤可用的空間。您可以配置該類以擴展圖標以填充整個空間或在空間可用時考慮寬高比。

相關問題