2017-05-01 1 views
-1
Im

juste travailler sur un JFrame.I ajouté un y JComboBox mais malheureusement l'indice JComboBox, et donc le point sélectionné ne change pas sur « l'action de changement », je veux dire quand je sélectionne un autre objet sur le cadre pivotant. Lorsque demandé, il renvoie uniquement un index de 0, quel que soit l'élément sélectionné. Le nom de la zone de liste déroulante est "Kataloge".JComboBox Index retourne seulement 0 sur demande

Il ne me renvoie aucune erreur. Comment puis-je résoudre ce problème?

static BufferedImage icon; 

private JButton update; 
private JButton getKata; 

private JComboBox<String> Kataloge; 


private JLabel Title; 
private JLabel WhichKatalog; 
private JLabel WhichDatum; 
private JLabel line; 

private JPanel topper; 
private JPanel middle; 
private JPanel bottom; 
private JPanel frame; 

public String Katalog = "Fragenkatalog 1 (normiert)"; 


public static void main(String args[]) { 
    MainFrame frame = new MainFrame(); 
    frame.draw(); 
} 

public MainFrame(){ 
    setTitle("Fragebogen erstellen Section"); 
    setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (Exception e) { 

    } 

    draw(); 
    setResizable(false); 
    try { 
     icon = ImageIO.read(new File("icon.png")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    setIconImage(icon); 
    setVisible(true); 
} 

public void draw(){ 



    setDefaultCloseOperation(DISPOSE_ON_CLOSE); 


    update = new JButton(); 
    getKata = new JButton(); 



    Title = new JLabel(); 
    line = new JLabel(); 
    WhichKatalog = new JLabel(); 
    WhichDatum = new JLabel(); 

    topper = new JPanel(); 
    middle = new JPanel(); 
    bottom = new JPanel(); 
    frame = new JPanel(); 

    setSize(575, 220); 

    getKata.setFont(new java.awt.Font("Tahoma", 0, 14)); 
    getKata.setText("Fragebogen erstellen"); 
    getKata.addActionListener(new ActionHandler()); 
    update.setFont(new java.awt.Font("Tahoma", 0, 14)); 
    update.setText("Katalog bearbeiten"); 
    update.addActionListener(new ActionHandler()); 



    Kataloge = new JComboBox<String>(); 
    Kataloge.addItem("Fragenkatalog 1 (normiert)"); 
    Kataloge.addItem("Fragenkatalog 2 (normal)"); 
    Kataloge.setFont(new java.awt.Font("Tahoma", 0, 14)); 
    Kataloge.addItemListener(new ItemHandlerMainFrame()); 

    Title.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N 
    Title.setText("Main Menu"); 
    WhichKatalog.setText("Ausgewählter Katalog: "+Katalog); 
    WhichDatum.setText(new Datum().getDatum()); 
    line.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); 

    frame.setSize(575, 220); 

    topper.setSize(575,40); 
    topper.setLayout(new FlowLayout()); 
    topper.add(Title, CENTER_ALIGNMENT); 

    middle.setSize(575, 150); 
    middle.setLayout(null); 
    middle.add(getKata).setBounds(15, 30, 160, 30);; 
    middle.add(update).setBounds(195,30,145,30);; 
    middle.add(Kataloge).setBounds(360, 30, 200, 30);; 


    bottom.setSize(575,30); 
    bottom.setLayout(new BorderLayout(50,5)); 
    bottom.add(line, BorderLayout.NORTH); 
    bottom.add(WhichKatalog, BorderLayout.WEST); 
    bottom.add(WhichDatum, BorderLayout.EAST); 


    frame.setLayout(null); 
    frame.add(topper).setBounds(0, 10, 575, 40);;   
    frame.add(middle).setBounds(0,45,575,60);; 
    frame.add(bottom).setBounds(15, 150, 535, 30);; 
    getContentPane().add(frame); 
    setLocationRelativeTo(null); 


    setLocationRelativeTo(null); 
} 

public void close(){ 

    this.setVisible(false); 
    this.dispose(); 

} 

private class ActionHandler implements ActionListener{ 
    public void actionPerformed(ActionEvent e) { 

     if(e.getActionCommand()=="Fragebogen erstellen"){ 
      close(); 
      FragebogenErstellen frame = new FragebogenErstellen(); 
      frame.drawIt(); 
     } 
    } 
} 

private class ItemHandlerMainFrame implements ItemListener{ 
    public void itemStateChanged(ItemEvent e) { 
     if(e.getStateChange() == ItemEvent.SELECTED){ 
      System.out.println("Changed to: "+Kataloge.getSelectedIndex()); 
     } 
     //Katalog = (String) Kataloge.getSelectedItem(); 

     if (Katalog == "Fragenkatalog 1 (normiert)"){ 
      WhichKatalog.setText("Ausgewählter Katalog: "+Katalog); 
     }if (Katalog == "Fragenkatalog 2 (normal)"){ 
      WhichKatalog.setText("Ausgewählter Katalog: "+Katalog+" "); 
     } 

    } 
} 
+1

1) Pour une meilleure aide plus tôt, poster un [MCVE] ou [Court, autonome, exemple correct] (http://www.sscce.org/). 2) Apprendre la nomenclature Java courante (conventions de nommage - par exemple 'EachWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute' sauf s'il s'agit d'un 'UPPER_CASE_CONSTANT') et l'utiliser de façon cohérente. 3) Les interfaces graphiques Java doivent fonctionner sur différents systèmes d'exploitation, taille d'écran, résolution d'écran, etc., en utilisant différents PLAF dans différents environnements locaux. En tant que tels, ils ne sont pas propices à la mise en page pixel parfait. .. –

+0

.. Utilisez plutôt des gestionnaires de disposition, ou [des combinaisons de ceux-ci] (http://stackoverflow.com/a/5630271/418556) avec un remplissage de mise en page et des bordures pour [espace blanc] (http://stackoverflow.com/A/17874718/418556). –

+0

'e.getActionCommand() == « Fragebogen erstellen »' est pas comment 'String's sont comparés en Java – MadProgrammer

Répondre

0

Vous appelez draw deux fois, ce qui va provoquer pas de fin de l'émission comme il est re-créer un grand nombre d'objets que vous.

Fondamentalement ce qui se passe, est votre double couche de vos composants, vous avez en fait deux JComboBox s sur l'écran, un que vous interagissez avec et un que vous ne pouvez pas. Dans votre cas, il est en fait celui que vous ne pouvez pas interagir avec ce qui a été créé en dernier, il est de retour 0 en permanence lorsque vous appelez getSelectedIndex, parce que c'est sélectionné

Dans ce cas, il n'y a aucune raison pour draw être public, en fait, pour la plupart, il pourrait tout simplement faire partie des classes constructeur

e.getActionCommand()=="Fragebogen erstellen" est comment String s sont comparés en Java, vous devez utiliser String#equals

Évitez d'utiliser null mises en page, mise en page de pixels parfaits sont une illusion dans moderne u je conçois. Il y a trop de facteurs qui affectent la taille individuelle des composants, dont vous ne pouvez contrôler aucun. Balançoire a été conçu pour fonctionner avec les gestionnaires de mise en page au cœur, abandonner ceux-ci conduira à aucune fin des problèmes et des problèmes que vous passerez de plus en plus de temps à essayer de rectifier

+0

Merci !! C'était ma faute. –

+0

J'ai juste essayé d'utiliser les gestionnaires de mise en page mais en fait j'ai perdu une journée entière à essayer de les faire fonctionner comme je le voulais. À la fin, j'ai créé un tas de JPanels et ça n'a pas encore marché. –

+0

Vous passerez beaucoup plus de temps à essayer de le faire fonctionner sans les gestionnaires de disposition – MadProgrammer