java.lang.NullPointerException sagt er mir immer in dieser Zeile:
int row = tabelle.getSelectedRow();
Bei einem klick in die Tabelle bekomme ich immer diese Fehlermeldung. Weiss aber nicht warum. Hier mal der Code:
int row = tabelle.getSelectedRow();
Bei einem klick in die Tabelle bekomme ich immer diese Fehlermeldung. Weiss aber nicht warum. Hier mal der Code:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.io.*;
import java.util.*;
public class Symbol extends JFrame
implements ActionListener{
String zahl;
JLabel lab_anzahl;
JSpinner spinner = new JSpinner();
JTextField[] tf_sym = new JTextField[10];
JTable tabelle;
JButton but_cancel;
JButton but_apply;
String str_symbol;
JPanel panel;
JScrollPane scroll;
DefaultTableModel tm;
String s_sym;
String s_dat;
public Symbol(){
this.setLocation(150, 150);
this.setSize(550, 350);
this.setTitle("Symbol");
/////// N U R T E S T ////////////////////////////////////////////////
this.addWindowListener(new WindowClosingAdapter(true));////////
///////////////////////////////////////////////////////////////////////
panel = new JPanel();
panel.setLayout(null);
lab_anzahl = new JLabel("Number of Spezies");
lab_anzahl.setBounds(20, 20, 120, 20);
panel.add(lab_anzahl);
spinner.setModel(new SpinnerNumberModel(0, 0, tf_sym.length, 1));
spinner.setBounds(170, 20, 40, 20);
panel.add(spinner);
for (int i=0; i<tf_sym.length; i++)
{
tf_sym[i] = new JTextField(4);
tf_sym[i].setEditable(false);
tf_sym[i].setHorizontalAlignment(JTextField.RIGHT);
panel.add(tf_sym[i]);
}
tf_sym[0].setBounds(310, 60, 40, 20);
tf_sym[1].setBounds(370, 60, 40, 20);
tf_sym[2].setBounds(430, 60, 40, 20);
tf_sym[3].setBounds(310, 100, 40, 20);
tf_sym[4].setBounds(370, 100, 40, 20);
tf_sym[5].setBounds(430, 100, 40, 20);
tf_sym[6].setBounds(310, 140, 40, 20);
tf_sym[7].setBounds(370, 140, 40, 20);
tf_sym[8].setBounds(430, 140, 40, 20);
tf_sym[9].setBounds(370, 180, 40, 20);
// ---------------- Tabelle ------------------------------------------
Object[] namen = {"Symbol","Description"};
tm = new DefaultTableModel(namen,0);
final JTable tabelle = new JTable(tm);
//Spaltengroesse
tabelle.getColumnModel().getColumn(0).setPreferredWidth(40);
tabelle.getColumnModel().getColumn(1).setPreferredWidth(160);
tabelle.setShowVerticalLines(false);
tabelle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabelle.setColumnSelectionAllowed(false);
scroll = new JScrollPane(tabelle);
scroll.setBounds(20, 60, 275, 200);
panel.add(scroll);
// ------------------- button -------------------------------
but_cancel = new JButton("Cancel");
but_cancel.setBounds(200, 280, 85, 20);
but_cancel.addActionListener(this);
panel.add(but_cancel);
but_apply = new JButton("Apply");
but_apply.setBounds(300, 280, 85, 20);
but_apply.addActionListener(this);
panel.add(but_apply);
this.getContentPane().add(panel);
// registriere nun die Listener
MyListSelectionListener listListener = new MyListSelectionListener();
MyChangeListener changeListener = new MyChangeListener(listListener);
spinner.addChangeListener(changeListener);
ListSelectionModel rowSelector = tabelle.getSelectionModel();
rowSelector.addListSelectionListener(listListener);
}
private class MyListSelectionListener implements ListSelectionListener {
int counter = -1;
int maximum = 0;
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) return; // tue nichts
System.out.println("welche Zelle ? : " );
int row = tabelle.getSelectedRow(); // frage Tabelle nach selektierter Zeile
if ((row != -1) && (counter<maximum))
{
tf_sym[counter].setText((String) tm.getValueAt(row,0));
counter = (counter+1)%maximum;
}}
public void setMaxAndReset(int max) {
counter = 0;
maximum = max;
}};
private class MyChangeListener implements ChangeListener {
MyListSelectionListener ls;
public MyChangeListener(MyListSelectionListener ls) {
this.ls = ls;
}
public void stateChanged(ChangeEvent e) {
JSpinner spin = (JSpinner) e.getSource();
int count = ((Integer) spin.getValue()).intValue();
ls.setMaxAndReset(count);
for(int i = 0; i < count; i++){
tf_sym[i].setEditable(true);
}
for(int j = count; j < tf_sym.length; j++){
tf_sym[j].setEditable(false);
}}};
public void actionPerformed(ActionEvent ae) {
String cmd = ae.getActionCommand();
if(cmd.equalsIgnoreCase("Apply"))
System.out.println("Apply - clicked");
if(cmd.equalsIgnoreCase("Cancel"))
exit();
}
public void symbole_auslesen(){
String temp;
if (System.getProperty("os.name").toLowerCase().indexOf("windows")!=-1)
{temp = "";
// System.out.println("Tante If");
}
else
{ temp = ".";
// System.out.println("Tante Else");
}
try {
BufferedReader br = new BufferedReader(new FileReader(temp + File.separator + "txt" + File.separator + "symbol3.txt"));
String os = System.getProperty("os.name");
// System.out.println(os);
while ((str_symbol = br.readLine()) != null)
{
s_sym = (str_symbol.substring(1,4));
s_dat = str_symbol.substring(102,str_symbol.length());
//uebergabe an Tabellenodell
tm.addRow(new String[]{s_sym, s_dat});
}
br.close(); // schliessen der geoeffnetten Datei
}
catch(IOException ioe) // Datei gibt's nich'
{
System.err.println(ioe + "\n Datei gibt's nicht " );
}
}
private void exit() {
setVisible(false);
dispose();
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// ----------- NUR ZUM TESTEN ----------------
public static void main(String[] args)
{
Symbol frame = new Symbol();
frame.symbole_auslesen();
frame.setResizable(false);
frame.setVisible(true);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
}