Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java vectoriin lisäys?

Shaw [22.12.2013 23:57:57]

#

Moro

Yritän saada vectorin lisättyä fileChooserilla haetun tiedostonnimeä, mutta saan pelkästään virheilmoituksia.

package kuvagalleria;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Vector;

import javax.swing.*;



public class MainApp extends JFrame implements ActionListener {
JLabel rightLabel, centerLabel, leftLabel;
JList valikko1, valikko2;
String kuva;
Vector<String> kuvat;
JList ku;
JPanel valikot;
JTextArea area;

	public static void main(String[] args){
		MainApp appWindow = new MainApp();
		appWindow.setTitle("Hello");
		appWindow.setSize(600,1000);

		appWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		appWindow.setVisible(true);




	}

	public MainApp()
	{

		rightLabel = new JLabel ("oikea");
		centerLabel = new JLabel ("keski");
		leftLabel = new JLabel ("vasen");

		centerLabel.setHorizontalAlignment(SwingConstants.CENTER);
        rightLabel.setHorizontalAlignment(SwingConstants.CENTER);



        //Main BorderLayout

       JPanel placeholder = new JPanel();
       BorderLayout mainbl = new BorderLayout();
       placeholder.setLayout(mainbl);




        //EAST BORDER and buttons
		JButton button1 = new JButton("Lisää uusi kuva");
		button1.addActionListener(this);
		JButton button2 = new JButton("Lisää uusi kuvakansio");
		JButton button3 = new JButton("Poista kuva");


		JPanel buttons = new JPanel();

		buttons.setLayout(new BoxLayout(buttons, BoxLayout.PAGE_AXIS));

		buttons.add(button1);
		buttons.add(button2);
		buttons.add(button3);

		buttons.add(centerLabel);


		this.getContentPane().add(buttons, BorderLayout.CENTER);


		//Add left layout to choose picture
		JPanel valikot = new JPanel();
		valikot.setLayout(new BoxLayout(valikot, BoxLayout.PAGE_AXIS));

		//valikot.setPreferredSize(new Dimension(100, 550));



		Vector<String> kuvat = new Vector<String>();

		ku = new JList(kuvat);
		JScrollPane sp3 = new JScrollPane(ku);


		valikot.add(sp3);



		Vector<String> kansiot = new Vector<String>(1);
		JList ka;
		ka = new JList(kansiot);
		JScrollPane sp4 = new JScrollPane(ka);
		valikot.add(sp4);
		kansiot.add("asd");




		this.getContentPane().add(valikot, BorderLayout.CENTER);




		// Add layouts to main BorderLayout
		placeholder.add(buttons, BorderLayout.WEST);

		this.getContentPane().add(placeholder, BorderLayout.EAST);
		this.getContentPane().add(valikot, BorderLayout.WEST);



	}

	public void actionPerformed(ActionEvent arg0) {
		JFileChooser valkuv = new JFileChooser();
		valkuv.showOpenDialog(null);
		File f = valkuv.getSelectedFile();
		//String filepath = f.getAbsolutePath();
		//String filename = f.getName();
		System.out.println(f.getName());

		kuvat.add(f.getName());

	}



}

Miten tuo lisäys onnistuu?

Virheilmoituksia tulee:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at kuvagalleria.MainApp.actionPerformed(MainApp.java:147)

Mod. huom: järkeä virheilmoituksen pituuteen!

Sisuaski [23.12.2013 01:01:44]

#

Luot konstruktorissa uuden muuttujan 'kuvat' sen sijaan että alustaisit luokan jäsenmuuttujan.

Vector<String> kuvat = new Vector<String>();

pitäisi olla

kuvat = new Vector<String>();

Shaw [23.12.2013 01:43:22]

#

Kiitos. Tämän avulla pääsin eroon virheilmoituksista, mutta ei se vieläkään lisää nimeä sinne. Nyt ei anna mitään virheilmoitusta. Listassa alunperin oleva "asd" häviää myös, kun yritän lisätä tiedoston nimen.

Sisuaski [23.12.2013 15:32:40]

#

JListin konstruktorin dokumentaation mukaan tuota vektoria ei tosiaan saisi muuttaa JListin luomisen jälkeen.

En tunne Swingin listoja hirveän hyvin, mutta ymmärtäisin, että oikea ratkaisu on luoda ListModel ja antaa se JListin konstruktorille jotenkin tyyliin:

DefaultListModel<String> listModel = new DefaultListModel<String>();
ku = new JList<String>(listModel);

Tämän jälkeen listaan voi lisätä elementtejä listModelin addElement-funktiolla.

Shaw [23.12.2013 17:18:38]

#

Valtavat kiitokset Sisuaskille, jos nyt saisin tämän homman tehtyä ja pääsisin joulun viettoon. Hyvää joulua!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta