2012-11-05 2 views
1

문제를 해결하려고 노력하지만 왜 작동하지 않는지 알 수 없습니다. 내가 너를 노르웨이의 의견과 변수와 혼동하면 미안하다.DefaultListModel을 JList로 업데이트하고 서브 클래스를 확장하여

먼저 내 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"); 
     } 
    } 
} 

는 또한 몇 가지 클래스 fiels가에서 확장 Ansatt.java라는 클래스 파일이 있습니다. 내가 보여줄거야.

첫 번째 my 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 작품 작업 예제를 가지고!

ansatt_id.getSelectedItem() == "Sjef" 

가능성이 가장 높은 true을 반환하지 않습니다 :

+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

귀하의 문제는 ActionListener에서 String 비교입니다. 당신은 사용해야합니다

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

다른 비교를 위해 동일합니다.

+0

감사합니다. 이제 프로그램을로드 할 때 JList가 나타납니다. 그러나 그것은 여전히 ​​새로운 아이템을 추가하지 않을 것입니다. ActionListner의 모든 것을 삭제하고 다음과 같이 작성하십시오. Sjef sj = new Sjef(); model.addElement (sj); ' 아직 행운은 없지만 JList가 업데이트되지 않는 것으로 보입니다. – chriskvik