Tableau 1D dans un JTable

charlonien Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
charlonien Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

voila mon problème.
Je me suis lancer dans un petit projet en JAVA et mon objectif premier est d'afficher une liste de String dans un JTable au moyen d'un Model.
J'ai donc créer mes deux classe et lors de l'exécution, je remarque que j'ai une belle erreur de type IllégalArgumentException. en parcourant le code de ma JFrame et de mon modèle, vous comprendrez surement que je veut afficher la liste des URL rentrée. Le tableau que je voudrai obtenir serait d'une colonne mais qui prenne quand même de la place.
Voici donc la classe non finie bien sûr de ma fenêtre :

package youtube;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;


public class GuiUrl extends JFrame{
	
	private RunUrl run = new RunUrl();
	private model mod ;
	
	private JPanel north = new JPanel();
	private JLabel addLabel = new JLabel("add URL : ");
	private JTextField addText = new JTextField(20);
	private JButton addButton = new JButton("add URL");
	
	private JPanel center = new JPanel();
	private JTable table = new JTable(); 
	
	private JPanel south = new JPanel();
	private JLabel southLabel = new JLabel("Create by Mr Charlonien");
	private JScrollPane jsp = new JScrollPane();
	
	public GuiUrl(){
		super();
		init();
	}
	
	public void init(){
		setTitle("");
		setSize(400,350);
		setLocationRelativeTo(null);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout());
		north();
		south();
		center();
		setVisible(true);
		run.print();
	}
	
	public void north(){
		
		getContentPane().add(north, BorderLayout.NORTH);
		north.setLayout(new FlowLayout(FlowLayout.CENTER));
		north.add(addLabel);
		north.add(addText);
		north.add(addButton);
		
	}
	
	public void south(){
		getContentPane().add(south, BorderLayout.SOUTH);
		south.setLayout(new FlowLayout(FlowLayout.CENTER));
		south.add(southLabel);
	}
	
	public void center(){
		getContentPane().add(center, BorderLayout.CENTER);
		center.setLayout(new FlowLayout(FlowLayout.CENTER));
		mod = new model(run.getLs());
		table = new JTable(mod);
		center.add(new JScrollPane(table));
	}
	
}


et la classe Model

package youtube;

import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

public class model extends AbstractTableModel {

	private ArrayList<String> ls;

	public model(ArrayList<String> ls) {
		this.ls = ls;
	}

	private String title[] = { "URL"};

	public int getColumnCount() {
		return title.length;
	}

	public String getColumnName(int columnIndex) {
		return title[columnIndex];
	}

	public int getRowCount() {
		return ls.size();
	}

	public Object getValueAt(int rowIndex, int columnIndex) {

		switch (columnIndex) {

		case 1:
			return ls.get(rowIndex);

		default:
			throw new IllegalArgumentException();
		}
	}

}

A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"Voici donc la classe non finie bien sûr"
Mais du coup, on ne peux pas tester vu qu'on n'a pas tout le code, donc on ne peux pas reproduire l'erreur d'exécution que tu as !

"j'ai une belle erreur de type IllégalArgumentException"
Est-ce que ce ne serait pas tout simplement celle que tu as dans ton switch ?

public Object getValueAt(int rowIndex, int columnIndex) {

	switch (columnIndex) {

	case 1:
		return ls.get(rowIndex);

	default:
		throw new IllegalArgumentException();
	}
}

Normalement, les indices de colonnes commencent à 0, pourquoi ce "1" ?

Essayes ceci (au pire ça nous donnera peut-être plus d'info)

public Object getValueAt(int rowIndex, int columnIndex)
{
    switch (columnIndex)
    {
        case 0 : return ls.get(rowIndex);
        default: throw new IllegalArgumentException("column="+columnIndex);
    }
}
0
charlonien Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Voici le code manquant il étai constitué de deux classes le RunURL

package youtube;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;

public class RunUrl {

	private ArrayList<String> ls = new ArrayList<String>();
	private int size = 1;

	public RunUrl() {
		ls.add(new String("https://www.youtube.com/"));
	}

	public void addUrl(String url) {
		ls.add(url);
		size++;
	}

	public void removeUrl(String url) {
	}

	public void openUrl(String url) {
		Runtime r = Runtime.getRuntime();
		try {
			r.exec("rundll32 url.dll, FileProtocolHandler " + url);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public ArrayList<String> getLs() {
		return ls;
	}

	public int randomAcces() {
		Random rd = new Random();
		int index = rd.nextInt(size) + 1;
		return index;
	}

	public int getSize() {
		return size;
	}

	public void print() {
		for (String i : ls) {
			System.out.println(i);
		}
	}
}


et le Main

package youtube;

import java.io.IOException;
import java.util.Properties;

public class Main {
	public static void main(String[] args) {

		new GuiUrl();
	}

}


Et dans le désespoir j'avais mis ce 1 car avec 0 sa me renvoyais aussi cette exception
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je viens de tester et avec ma correction d'hier ça semble fonctionner.
0
charlonien Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
oki je teste tout de suite javais pas trop le temps c'était partiel aujourd'hui :)
0
charlonien Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Oui c'est parfias merci , mais je ne comprend pas trop la modification que tu m'a apporté
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il n'y a quasiment rien, à part que j'ai mis 0 au lieu du 1, et que j'ai rajouté un petit message dans l'exception pour savoir quelle est la valeur de columnIndex lorsqu'on arrive dans le default.
0
charlonien Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
apparement tu a juste changé l'indice ? parce que j'avait déja testé . Enfin sa doit être parce que entre temps je suis passé d'un tableau à une arrayList
0