سلام للجميع
------------------
هنا تم عمل كود بسيط يقرأ صورة و يعرضها عل panel
المشكلة أن هناك بعض الصور لم تعرض بالضبط داخل ال panel (( قد يعُرض جزء منها فى البانل و الاخر خارجها نظراً لكب الإتساع و الإرتفاع ))
رغم أنى واضع شرط أن لو كان إتساع و إرتفاع الصورة أكبر من ال panl ، يرسم طبقاً ل إتساع و ارتفاع ال paenl
ال code :
----------------
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class TestImage extends JFrame {
private JPanel mainPanel;
private Box displayPanel;
private JButton openButton;
private JFileChooser fileChooser;
private BufferedImage bufferedImage = null;
public TestImage() {
intializeingPanel();
intializeingButtons();
fileChooser = new JFileChooser();
getContentPane().add(mainPanel);
MyActionListener actionListener = new MyActionListener();
openButton.addActionListener(actionListener);
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
TestImage testImage = new TestImage();
testImage.setDefaultCloseOperation(TestImage.EXIT_ON_CLOSE);
testImage.setSize(new Dimension(600, 300));
testImage.setLocationRelativeTo(null);
testImage.setVisible(true);
testImage.setExtendedState(MAXIMIZED_BOTH);
}
private void intializeingPanel() {
mainPanel = new JPanel(null);
mainPanel.setBounds(100, 10, 600, 300);
displayPanel = Box.createVerticalBox();
displayPanel.setBounds(350, 150, 500, 300);
displayPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));
displayPanel.setOpaque(true);
displayPanel.setBackground(Color.WHITE);
mainPanel.add(displayPanel, BorderLayout.CENTER);
}
private void intializeingButtons() {
openButton = new JButton("Open");
openButton.setBounds(50, 10, 100, 50);
mainPanel.add(openButton, BorderLayout.NORTH);
}
@Override
public void paint(Graphics g) {
super.paint(g);
if (bufferedImage.getWidth() > displayPanel.getWidth() || bufferedImage.getHeight() > displayPanel.getHeight()) {
int imageWidth = displayPanel.getWidth();
int imageHeight = displayPanel.getHeight();
g.drawImage(bufferedImage, imageWidth, imageHeight, null);
}else{
g.drawImage(bufferedImage, displayPanel.getWidth(), displayPanel.getHeight(), null);
}
}
private class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == openButton) {
int returnValue = fileChooser.showOpenDialog(TestImage.this);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
bufferedImage = ImageIO.read(file);
repaint();
} catch (Exception exception) {
}
}
}
}
}
}و للعلم البرناج بيطلع nullpointerexception
من لديه طريقة غير هذه يعلمنا بها
شكرا ً