2016-05-26 3 views
0

私はすでにレンダラークラスを実装しているために自分が書いたクラスの異なるインスタンス間で選択するようにするJComboBoxを使用しようとしている:私はしようとしているときコンボボックス

class BackupJobRenderer extends JLabel implements ListCellRenderer { 
private static final Color HIGHLIGHT_COLOR = new Color(0, 0, 128); 

public BackupJobRenderer() { 
    setOpaque(true); 
    setHorizontalAlignment(CENTER); 
    setVerticalAlignment(CENTER);} 

public Component getListCellRendererComponent(JList list, Object value, 
               int index, boolean isSelected, boolean cellHasFocus) { 
    BackupJob bjob = (BackupJob) value; 
    setText(bjob.getName()); 


    if (isSelected) { 
     setBackground(HIGHLIGHT_COLOR); 
     setForeground(Color.white); 
    } else { 
     setBackground(Color.white); 
     setForeground(Color.black); 
    } 
    return this; 
} 

次のようにコンボボックスを初期化します。

//backMan.getArrayJobs returns an Array of BackupJobs 
comboBoxJobs = new JComboBox(backMan.getArrayJobs()); 
comboBoxJobs.setRenderer(new BackupJobRenderer()); 
comboBoxJobs.setMaximumRowCount(3); 
comboBoxJobs.setEnabled(true); 

コンボボックスが空のまま、デバッガによると、配列の要素は、コンボボックスの「データモデル」に存在するように見える、けれども。

私はここで間違っていますか?

+0

最良の回答については、作成して、[MCVE]投稿します。通常、ListCellRendererを実装するのではなく、DefaultListCellRendererを拡張する方がよいことに注意してください。 [例](http://stackoverflow.com/a/37398879/522444) –

答えて

1

DefaultComboBoxModelを作成し、このモデルを次のように配置します。

DefaultComboBoxModel model = new DefaultComboBoxModel<>(yourObjectArray); 
JComboBox<Object> combo = new JComboBox<>(model); 
combo.setRenderer(new BackupJobRenderer()); 

あなたのレンダラークラスは以下のようになります。

class BackupJobRenderer extends DefaultListCellRenderer { 

public Component getListCellRendererComponent(......) { 
JLabel label = (JLabel)super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus); 

if(value !=null && value instanceof BackupJob) { 
BackupJob backup = (BackupJob) value; 
label.setText(backup.getName()); 


if (isSelected) { 
    label.setBackground(HIGHLIGHT_COLOR); 
    label.setForeground(Color.white); 
} else { 
    label.setBackground(Color.white); 
    label.setForeground(Color.black); 
} 
} 
return label; 
} 
} 
+0

@Hovercraft Eelaの完全版...ここ - > https://docs.oracle.com/javase/7/docs/api/javax /swing/plaf/basic/BasicComboBoxRenderer.html –

+0

まず、あなたの答えに感謝します。私はあなたの例に従ってすべてを行いましたが、それでも動作しませんでした。したがって、私はちょうどジョブオブジェクトの名前をコンボボックスに入れてみましたが、どちらもうまくいきませんでしたので、より基本的なものが私のUIに間違っていると思います。私はまたデータモデルをもう一度チェックし、すべての仕事はそこにありました... – yungaero

+0

@yungaero:それであなたは有効な[mcve]を作成して投稿する必要があります。リンクをお読みください。 –