Stworzyłem niewielki prosty moduł gdzie można wczytać zdjęcie powiększyć oraz będzie jeszcze opcja zapisu. Problem na obecnym etapie tworzenia jest
tylko w tym iż z wielkim trudem powiększa fotkę przesuwając kontrolkę JSlider. Nie wiem czy to jest kwestia obiektu zwanego ,,img" czy też obiektu ,,ico".
Gdyby komus nie chciało sie rozpakować rar załaczam kod :
package practise_use_slider;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JSlider;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
public class ResizeSelectedPhoto extends JFrame {
private JPanel contentPane;
BufferedImage img = null;
ImageIcon ico;
JLabel image;
int width, height, imageH2,imageW2;
public JSlider slider;
/**
* Launch the application.
*/
public void openSource()
{
JFileChooser choose = new JFileChooser();
int result = choose.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION){
File f = choose.getSelectedFile();
try{
img = ImageIO.read(f);
width = img.getWidth();
height = img.getHeight();
/*
if(width >= 500){
JFrame window2 = new JFrame();
JPanel p2 = new JPanel();
window2.getContentPane().add(p2);
window2.setVisible(true);
window2.setDefaultCloseOperation(window2.EXIT_ON_CLOSE);
window2.setSize(300, 100);
JLabel command = new JLabel("Zdjecie jest zbyt duze wybierz inne");
p2.add(command);
}else{*/
int a = img.getWidth() - image.getWidth() / 2;
imageW2 = img.getWidth() - a;
int b = img.getHeight() - image.getHeight() / 2;
imageH2 = img.getHeight() - b;
ico = new ImageIcon(img.getScaledInstance(200,150,Image.SCALE_DEFAULT));
image.setIcon(ico);
}catch(IOException ea){
ea.printStackTrace();
}
}
}
public void changeImageMeasure()
{
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JSlider slider = (JSlider)e.getSource();
ImageIcon ico2 = new ImageIcon(img.getScaledInstance(ico.getIconWidth()+slider.getValue(), ico.getIconHeight()+slider.getValue(), Image.SCALE_DEFAULT));
System.out.println(ico.getIconWidth()+slider.getValue()+ "" + ico.getIconHeight()+slider.getValue());
image.setIcon(ico2);
}
});
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ResizeSelectedPhoto frame = new ResizeSelectedPhoto();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ResizeSelectedPhoto() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 544, 382);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
panel.setLayout(null);
image = new JLabel("",JLabel.CENTER);
image.setOpaque(true);
image.setBounds(10, 11, 480, 220);
panel.add(image);
JButton btnNewButton = new JButton("Open Browser");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openSource();
}
});
btnNewButton.setBounds(204, 242, 107, 23);
panel.add(btnNewButton);
slider = new JSlider();
slider.setMaximum(50);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(5);
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setValue(0);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
changeImageMeasure();
}
});
}
});
slider.setBounds(45, 276, 394, 47);
panel.add(slider);
}
}
- ResizeSelectedPhoto.rar (1 KB) - ściągnięć: 45