2012-11-05 34 views
1

試圖解決一個問題,我不能得到它爲什麼不工作。如果我把我的挪威評論和變數混淆你,我很抱歉。用JList更新DefaultListModel,在子類上使用擴展

首先,這裏是我的form.java文件。

import java.awt.FlowLayout; 
import java.awt.List; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JOptionPane; 
import javax.swing.ListSelectionModel; 


public class Form implements ActionListener { 

    String[] ansatt_type = {"Sjef","Mellomleder","Assistent"}; 
    String totlønn; 

    // KOMPONENTER FOR GUI START 
    JList ansatte; 
    DefaultListModel model; 

    JLabel label1 = new JLabel(); 
    JComboBox ansatt_id = new JComboBox (ansatt_type); 
    JButton add_me = new JButton(); 
    JLabel lønn = new JLabel(); 
    // KOMPONENTER FOR GUI SLUTT 

    public Form() { 

     // LAGER RAMME START 
     JFrame ramme = new JFrame(); 
     ramme.setBounds(0,0,275,400); 
     ramme.setTitle("Ansatt kontroll"); 
     ramme.setLayout(new FlowLayout()); 
     ramme.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // LEGGER TIL TEXT LABEL1 
     label1.setText("Liste over ansatte: "); 
     ramme.add(label1); 

     // LEGGER TIL DEFAULTLISTMODEL 
     model = new DefaultListModel(); 

     ansatte = new JList(model); 
     ansatte.setBounds(0, 0, 200, 200); 
     model.addElement("KU"); 
     ramme.add(ansatte); 


     // LEGGER TIL DROPDWON LIST; 
     ramme.add(ansatt_id); 

     // LEGGER TIL ANSATT KNAPP 
     add_me.setText("Legg til ny ansatt"); 
     ramme.add(add_me); 
     add_me.addActionListener(this); 

     // LEGGER TIL SAMLEDE LØNNSKOSTNADER 
     totlønn = "Totale lønnskostnader er : eksempeltall"; 
     lønn.setText(totlønn); 
     ramme.add(lønn); 

     ramme.setVisible(true); 
    } 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     JOptionPane.showMessageDialog(null, "Du har valgt: 

       "+ansatt_id.getSelectedItem()+"!" + 
       " Du blir nå videreført og kan legge til en ny ansatt"); 

     if(ansatt_id.getSelectedItem() == "Sjef"){ 
      System.out.println("Valgt Sjef"); 
      Sjef sj = new Sjef(); 
      model.addElement(sj);  
      } 

     if(ansatt_id.getSelectedItem() == "Mellomleder"){ 
      System.out.println("Valgt Mellomleder"); 
     } 

     if(ansatt_id.getSelectedItem() == "Assistent"){ 
      System.out.println("Valgt Assistent"); 
     } 
    } 
} 

我也有一個名爲Ansatt.java的類文件,其中有幾個類fiels延伸而來。我會告訴你一個。

首先我的Ansatt.java文件;

import javax.swing.JOptionPane; 


public class Ansatt extends Form { 

    public String Navn; 
    public int Lønn; 
    public String Type; 

    public Ansatt() { 
    Navn = JOptionPane.showInputDialog(null, "Skriv inn navn på ny ansatt: "); 
    System.out.println("Ansatt lag til i liste"); 
    } 

    public String toString(){ 
     return Navn + " " + Type; 
    } 
} 

和擴展類Sjef.java

public class Sjef extends Ansatt { 

    public Sjef() { 
     super(); 
     this.Lønn = 40000; 
     this.Type = "Sjef"; 


    } 
} 

一切正常,除了ModelList不會更新,我有一個工作例子,誰幾乎是相同的,但在這其中只是doesent工作!

+0

請勿使用'setBounds()';相反,'pack()'你選擇的佈局。請編輯您的問題,以包含展示您描述的問題的[sscce](http://sscce.org/)。請參閱[*初始線程*](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)以及示例[此處](http://stackoverflow.com/a/5760093/230513)和[這裏](http://stackoverflow.com/a/5372169/230513)。 – trashgod

回答

1

你的問題是在你的ActionListenerString比較:

ansatt_id.getSelectedItem() == "Sjef" 

將最有可能不會返回true。您應該使用

"Sjef".equals(ansatt_id.getSelectedItem()) 

其他比較相同。

+0

謝謝,現在JList確實出現在我加載程序時。但它仍然不會添加新項目。我刪除了ActionListner中的所有內容,只寫: Sjef sj = new Sjef(); model.addElement(sj);' 但仍然沒有運氣,看起來JList不更新。 – chriskvik