package com.han;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Toolkit;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* The same program as the previous one Graphics_11. The only difference is the
* Layout Manager : here BordeLayout is used while SpringLayout in the previous
* one.
* @author HAN
*
*/
@SuppressWarnings("serial")
public class Graphics_12 extends JFrame {
public Graphics_12() {
// TODO Auto-generated constructor stub
Container container = getContentPane();
final JSlider slider = new JSlider();
JScrollPane scrollPane = new JScrollPane();
final JLabel label = new JLabel();
URL imgURL = this.getClass().getResource("/images/Lighthouse.jpg");
final Image image = Toolkit.getDefaultToolkit().getImage(imgURL);
// final Image image = Toolkit.getDefaultToolkit().getImage("/images/Lighthouse.jpg"); // can not find the image file ! the string address has to be an complete absolute file path.
System.out.println(image.getWidth(null) + "\t" + image.getHeight(null));
ImageIcon icon = new ImageIcon(image);
label.setIcon(icon);
System.out.println(icon.getIconWidth() + "\t" + icon.getIconHeight());
System.out.println(image.getWidth(label) + "\t" + image.getHeight(label));
// label.setText("here");
label.setBackground(Color.RED);
// JTextArea textArea = new JTextArea();
// JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
// panel.add(label);
JPanel panel = new JPanel(new BorderLayout());
panel.add(label, BorderLayout.CENTER);
label.setHorizontalAlignment(SwingConstants.CENTER);
// System.out.println(label.getInsets());
// label.setBounds(0, 0, 300, 300);
// scrollPane.getViewport().add(panel); // is equivalent to "scrollPane.setViewportView(panel);" and "scrollPane.getViewport().setView(panel);"
// scrollPane.setViewportView(panel); // use the JPanel in the JScrollPanel's viewPort is for using the corresponding layout manager
// scrollPane.setViewportView(label);
scrollPane.getViewport().setBackground(Color.YELLOW);
// scrollPane.getViewport().setLayout(new FlowLayout()); // it should not be set
scrollPane.getViewport().add(panel);
panel.setBackground(Color.BLUE);
container.add(scrollPane, BorderLayout.CENTER);
// container.add(label);
container.add(slider, BorderLayout.SOUTH);
/* configure JSlider */
slider.setMinimum(1);
slider.setMaximum(1000);
slider.setValue(100);
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stub
int currentValue = slider.getValue();
int newWidth = image.getWidth(label) * currentValue / 100;
int newHeight = image.getHeight(label) * currentValue / 100;
Image imageScaled = image.getScaledInstance(newWidth,
newHeight, Image.SCALE_FAST);
// label.setBounds(0, 0, newWidth, newHeight); // null 的布局管理器一定要和setBounds()一起使用
// label.setLocation(0, 0);
label.setIcon(new ImageIcon(imageScaled));
}
});
/* initialize the frame */
setTitle("图像缩放");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(
getGraphicsConfiguration());
setBounds(0, 0, d.width, d.height - insets.bottom);
setVisible(true);
System.out.println(panel.getSize());
System.out.println(slider.getSize());
System.out.println(container.getSize());
System.out.println(scrollPane.getSize());
System.out.println(label.getSize());
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Graphics_12();
}
}
Java Graphics_12
最新推荐文章于 2024-09-15 19:46:31 发布