0

コードを機能させるためにすでに数日試していますが、成功していません。私のコードは私の問題を説明していると思います。「Serif」などのコンボ ボックス項目を表示する方法がわかりません。アクションのハッシュ コードが表示されます。コメントにあるコードの部分は、正しく動作させようとして失敗したものです。これが私のコードの解決策だと思いますが、うまくいきません: 別のクラスのアクションリスナー - Java

 public class ComboBoxFontFamilyAction extends JFrame implements ItemListener {
    public ComboBoxFontFamilyAction() {
        JComboBox comboBox = new JComboBox();
        comboBox.addItem(new StyledEditorKit.ForegroundAction("Red", Color.red));
        comboBox.addItem(new StyledEditorKit.FontFamilyAction("Serif"
                .toString(), "Serif"));

        // When I click on this item I get the error
        comboBox.addItem(new FontSetting(new StyledEditorKit.ForegroundAction(
                "Red", Color.red), "Read what you want", comboBox));

        comboBox.addItemListener(this);

        getContentPane().add(comboBox, BorderLayout.SOUTH);
        JTextPane textPane = new JTextPane();
        textPane.setText("Some text to change attributes of.");
        getContentPane().add(new JScrollPane(textPane));

        // I think that i should do something like that
        // ItemListener itemListener = new FontSetting(new
        // StyledEditorKit.ForegroundAction("Red", Color.red),
        // "Wohoo",comboBox);
        // comboBox.addItemListener(itemListener);

    }

    public void itemStateChanged(ItemEvent e) {
        Action action = (Action) e.getItem();
        action.actionPerformed(null);
    }

    public static void main(String[] args) {
        ComboBoxFontFamilyAction frame = new ComboBoxFontFamilyAction();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

}


    //public class FontSetting implements ItemListener {

public class FontSetting {

    private StyledEditorKit.StyledTextAction textAction;
    private String displayValue;

    // private JComboBox comboBox1;

    public FontSetting(StyledEditorKit.StyledTextAction textAction,
            String displayValue, JComboBox comboBox1) {
        this.textAction = textAction;
        this.displayValue = displayValue;
        // this.comboBox1 = comboBox1;

    }

    // public void itemStateChanged(ItemEvent e) {
    // Action action = (Action) e.getItem();
    // action.actionPerformed(null);
    // }

    public String toString() {
        return displayValue;
    }
}

助けを求めて事前にThx :)

4

1 に答える 1

1

toString()のメソッドをオーバーライドしていないため、おそらくハッシュコードが表示されますStyledEditorKit.FontFamilyAction

適切な文字列 ("Serif") を返すようにオーバーライドするか、作成されたものを適切なテキストにJComboBox.setRenderer(ListCellRenderer)レンダリングするカスタム レンダラーを設定するために使用する必要があります。StyledEditorKit.FontFamilyAction

于 2013-08-06T10:34:33.450 に答える