2017-05-01 10 views
-1

私はJFrame.IでJComboBoxを追加しましたが残念ながらJComboBoxインデックスを追加しました。そのため、選択したアイテムは「変更のアクション」時に変更されません。スイングフレーム上の別のアイテム。要求されたときは、選択されたItemに関係なく、Indexは0のみを返します。 ComboBoxの名前は "Kataloge"です。JComboBoxインデックスはリクエスト時に0を返すだけです。

エラーが返されません。 これを修正するにはどうすればよいですか?

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)より良いヘルプをもっと早く投稿するには、[MCVE] [短い、自己完結型、正しい例](http://www.sscce.org/)。 2)一般的なJava命名法(命名規則 - 例えば 'EachWordUpperCaseClass'、' firstWordLowerCaseMethod() '、' firstWordLowerCaseAttribute'が 'UPPER_CASE_CONSTANT'以外の場合)を学び、それを一貫して使用してください。 3)Java GUIは、異なるロケールの異なるPLAFを使用して、異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。 .. –

+0

..代わりにレイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com)のレイアウトパディングとボーダーを使用してください/ a/17874718/418556)。 –

+0

'e.getActionCommand()==" Fragebogen erstellen "はJavaで' String'を比較する方法ではありません – MadProgrammer

答えて

0

あなたはそれがあなたのオブジェクトの多くを再作成していますと、問題の終わりを起こさないために行くされて、二回drawを呼んでいます。

基本的に何が起きていますか、コンポーネントを二重に重ねているのですが、画面には実際には2つのJComboBoxがあります。あなたがgetSelectedIndexを呼び出すときに、あなたのケースでは、それは実際にあなたが最後に作成されたと対話することはできません一つだ、それは、常に0を返すということは、この場合

を選択しているものだから、で、publicすべきdrawのための理由はありません実際には、ほとんどの部分は、それだけで、あなたがnullレイアウトを使用してString#equals

避けを使用する必要があります

e.getActionCommand()=="Fragebogen erstellen"StringのはJavaで比較されていないか、クラスのコンストラクタの一部である可能性があり、ピクセル完璧なレイアウトは錯覚です現代の中で私はデザインする。コンポーネントの個々のサイズに影響する要因は多すぎますが、いずれも制御できません。スイングは、レイアウト管理者と協力してコアで作業するように設計されています。これにより、問題の終わりがなくなり、整理しようとする時間が長くなります。

+0

ありがとうございます!それは私のせいだった。 –

+0

私はレイアウトマネージャーだけを使用しようとしていましたが、実際には私が一日を失って、私が望むやり方で作業させようとしました。結局私はJPanelsの束を作りましたが、それはまだうまくいきませんでした。 –

+0

あなたはレイアウトマネージャーを使わずにそれを稼働させるのにもっと多くの時間を費やすでしょう – MadProgrammer

関連する問題