I want to make a paint program and i don't know why , i cannot display the image using JFileChooser to Open the image
Here's the code that i'm stuck on
if(e.getActionCommand().equals(" Open "))
{
JFileChooser file = new JFileChooser();
file.setAccessory(new ImagePreview(file)); //Memanggil Image Preview
file.setCurrentDirectory(new File(System.getProperty("user.home")));
//filter the files
FileNameExtensionFilter filter = new FileNameExtensionFilter("*.Images", "jpg","gif","png");
file.addChoosableFileFilter(filter);
int result = file.showOpenDialog(null);
//if the user click on Open in Jfilechooser
if(result == JFileChooser.APPROVE_OPTION){
File selectedFile = file.getSelectedFile();
String path = selectedFile.getAbsolutePath();
label.setIcon(ResizeImage(path));
canvas.add(label);
}
//if the user click on save in Jfilechooser
else if(result == JFileChooser.CANCEL_OPTION){
System.out.println("No File Select");
}
}
And here's all of the code
package uas.designtool;
public class DrawPanel extends JPanel implements ActionListener,MouseMotionListener {
private JMenuBar menuBar;
private JMenu menu;
private JMenuItem newItem, openItem, saveItem, exitItem;
private JFrame frame, frame2;
private ButtonGroup buttons=new ButtonGroup();
private JButton penButton,colorButton,button3,button4,button5,button6,button7,button8;
private NewPanel panel2;
private Color color = (Color.white);
private Graphics2D g2;
private int currentX, currentY, oldX, oldY;
private boolean isCanvasCreated = false;
private JPanel canvas=new JPanel();
private JLabel label;
private String location;
public DrawPanel() {
setPreferredSize(new Dimension(1400, 740));
setMaximumSize(new Dimension(1400, 740));
this.Menubar();
this.ItemBar();
this.JFrame();
}
public void JFrame(){
frame=new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(this);
frame.setTitle("Design Tools");
frame.pack();
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
}
public void Menubar() {
//MenuBar
menuBar = new JMenuBar();
//"FILE" menu Section
menu = new JMenu("File");
menu.setMnemonic(KeyEvent.VK_F);
menuBar.add(menu);
//Sub Menu for "FILE" Section
//New
newItem = new JMenuItem(" New ", new ImageIcon("image/new.png"));
newItem.addActionListener(this);
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
menu.add(newItem);
//Open
openItem = new JMenuItem(" Open ", new ImageIcon("image/open.png"));
openItem.addActionListener(this);
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
menu.add(openItem);
//Save
saveItem = new JMenuItem(" Save ", new ImageIcon("image/save.png"));
saveItem.addActionListener(this);
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
menu.add(saveItem);
//Exit
exitItem = new JMenuItem(" Exit ", new ImageIcon("image/exit.png"));
exitItem.addActionListener(this);
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.ALT_MASK));
menu.add(exitItem);
//"EDIT" menu Section
menu = new JMenu("Edit");
menu.setMnemonic(KeyEvent.VK_E);
menuBar.add(menu);
//Place MenuBar to JPanel
this.setLayout(new BorderLayout());
this.add(menuBar, BorderLayout.NORTH);
}
//Left Toolbar
public void ItemBar()
{
JPanel ButtonPanel=new JPanel();
ButtonPanel.setPreferredSize(new Dimension(110,720));
penButton=new JButton();
colorButton=new JButton();
button3=new JButton();
button4=new JButton();
button5=new JButton();
button6=new JButton();
button7=new JButton();
button8=new JButton();
penButton.setPreferredSize(new Dimension(50,50));
colorButton.setPreferredSize(new Dimension(50,50));
button3.setPreferredSize(new Dimension(50,50));
button4.setPreferredSize(new Dimension(50,50));
button5.setPreferredSize(new Dimension(50,50));
button6.setPreferredSize(new Dimension(50,50));
button7.setPreferredSize(new Dimension(50,50));
button8.setPreferredSize(new Dimension(50,50));
buttons.add(penButton);
penButton.setSelected(true);
penButton.addActionListener(this);
buttons.add(colorButton);
colorButton.addActionListener(this);
buttons.add(button3);
buttons.add(button4);
buttons.add(button5);
buttons.add(button6);
buttons.add(button7);
buttons.add(button8);
ButtonPanel.add(penButton);
ButtonPanel.add(colorButton);
ButtonPanel.add(button3);
ButtonPanel.add(button4);
ButtonPanel.add(button5);
ButtonPanel.add(button6);
ButtonPanel.add(button7);
ButtonPanel.add(button8);
this.add(ButtonPanel, BorderLayout.WEST);
}
public ImageIcon ResizeImage(String ImagePath)
{
ImageIcon MyImage = new ImageIcon(ImagePath);
Image img = MyImage.getImage();
Image newImg = img.getScaledInstance(label.getWidth(), label.getHeight(), Image.SCALE_SMOOTH);
ImageIcon image = new ImageIcon(img);
return image;
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(colorButton))
{
if(isCanvasCreated == true)
{
color = JColorChooser.showDialog(null, "Pick your Color", color);
if(color == null)
{
color = (Color.white);
}
canvas.setBackground(color);
}
}
if(e.getActionCommand().equals(" New "))
{
BorderLayout layout = (BorderLayout)this.getLayout();
if(layout.getLayoutComponent(BorderLayout.CENTER)!=null)
this.remove(layout.getLayoutComponent(BorderLayout.CENTER));
panel2= new NewPanel(this);
frame2=new JFrame();
frame2.setContentPane(panel2);
frame2.setTitle("New");
frame2.pack();
frame2.setVisible(true);
frame2.setLocationRelativeTo(null);
}
if(e.getSource().equals(panel2.getCreateButton()))
{
frame2.dispose();
int[] value=panel2.dimensionValue();
JPanel mainPanel=new JPanel();
int calculate= (1280-value[0]+10);
int calculate1= (720-value[1]+10);
String column= "10px,"+String.valueOf(value[0])+"px,"+String.valueOf(calculate)+"px";
String row="10px,"+String.valueOf(value[1])+"px,"+String.valueOf(calculate1)+"px";
FormLayout layout = new FormLayout(column, row);
mainPanel.setLayout(layout);
CellConstraints cc=new CellConstraints();
canvas.setPreferredSize(new Dimension(value[0],value[1]));
canvas.setBackground(color);
isCanvasCreated = true;
mainPanel.add(canvas, cc.xy(2, 2));
JPanel layouting=new JPanel();
layouting.setPreferredSize(new Dimension(1400,10));
this.add(layouting, BorderLayout.SOUTH);
this.add(mainPanel, BorderLayout.CENTER);
frame.setContentPane(this);
}
if(e.getActionCommand().equals(" Open "))
{
JFileChooser file = new JFileChooser();
file.setAccessory(new ImagePreview(file)); //Memanggil Image Preview
file.setCurrentDirectory(new File(System.getProperty("user.home")));
//filter the files
FileNameExtensionFilter filter = new FileNameExtensionFilter("*.Images", "jpg","gif","png");
file.addChoosableFileFilter(filter);
int result = file.showOpenDialog(null);
//if the user click on Open in Jfilechooser
if(result == JFileChooser.APPROVE_OPTION){
File selectedFile = file.getSelectedFile();
String path = selectedFile.getAbsolutePath();
label.setIcon(ResizeImage(path));
canvas.add(label);
}
//if the user click on save in Jfilechooser
else if(result == JFileChooser.CANCEL_OPTION){
System.out.println("No File Select");
}
}
@Override
public void mouseDragged(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mouseMoved(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
The error output is
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at uas.designtool.DrawPanel.ResizeImage(DrawPanel.java:216)