- PR -

JComboBoxのリサイズについて

1
投稿者投稿内容
90125
常連さん
会議室デビュー日: 2003/10/17
投稿数: 23
投稿日時: 2005-05-12 12:36
こんにちは。

以下は、同じItemのtoString()の戻り値を"a"から"a-changed"に変更することで、JComboBoxの表示を変更しようとしているプログラムですが、うまく行きません。JComboBoxがリサイズされないため、"a-changed"が表示しきれず、"..."とだけ表示されます。どのように解決すればよいでしょうか? よろしくおねがいします。
----
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;


public class ChangeItem extends JFrame {
public static void main(String[] args) {
new ChangeItem();
}

private ChangeItem() {
setSize(300, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
Combo combo = new Combo();
cp.add(combo);
cp.add(combo.new XButton());
setVisible(true);
}

private static class Combo extends JComboBox {
private Combo() {
addItem(new Item("a"));
}

private class XButton extends JButton {
private XButton() {
super("change");
}

protected void fireActionPerformed(ActionEvent e) {
Item i = (Item) getSelectedItem();
i.displayName = i.displayName == "a-changed" ? "a"
: "a-changed";
Combo.this.repaint();
}
}
}

private static class Item {
private String displayName;

private Item(String displayName) {
this.displayName = displayName;
}

public String toString() {
return displayName;
}
}
}
90125
常連さん
会議室デビュー日: 2003/10/17
投稿数: 23
投稿日時: 2005-05-12 12:39
インデントが無くて読みづらかったので、BBコードを使ってみました。どうでしょう?
[CODE]
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;


public class ChangeItem extends JFrame {
public static void main(String[] args) {
new ChangeItem();
}

private ChangeItem() {
setSize(300, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
Combo combo = new Combo();
cp.add(combo);
cp.add(combo.new XButton());
setVisible(true);
}

private static class Combo extends JComboBox {
private Combo() {
addItem(new Item("a"));
}

private class XButton extends JButton {
private XButton() {
super("change");
}

protected void fireActionPerformed(ActionEvent e) {
Item i = (Item) getSelectedItem();
i.displayName = i.displayName == "a-changed" ? "a"
: "a-changed";
Combo.this.repaint();
}
}
}

private static class Item {
private String displayName;

private Item(String displayName) {
this.displayName = displayName;
}

public String toString() {
return displayName;
}
}
}
[CODE]
90125
常連さん
会議室デビュー日: 2003/10/17
投稿数: 23
投稿日時: 2005-05-12 12:43
今度こそ(だめだったらあきらめます。すみません)。
コード:
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;


public class ChangeItem extends JFrame {
    public static void main(String[] args) {
        new ChangeItem();
    }

    private ChangeItem() {
        setSize(300, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container cp = getContentPane();
        cp.setLayout(new FlowLayout());
        Combo combo = new Combo();
        cp.add(combo);
        cp.add(combo.new XButton());
        setVisible(true);
    }

    private static class Combo extends JComboBox {
        private Combo() {
            addItem(new Item("a"));
        }

        private class XButton extends JButton {
            private XButton() {
                super("change");
            }

            protected void fireActionPerformed(ActionEvent e) {
                Item i = (Item) getSelectedItem();
                i.displayName = i.displayName == "a-changed" ? "a"
                        : "a-changed";
                Combo.this.repaint();
            }
        }
    }

    private static class Item {
        private String displayName;

        private Item(String displayName) {
            this.displayName = displayName;
        }

        public String toString() {
            return displayName;
        }
    }
}

びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2005-05-12 13:41
Swing 関係で「表示をどうかしたい」というとき、たいていはコンポーネントのレンダラかエディタをいじります。

まずは JComboBox の API ドキュメントをよく読んで、

関連 Java Tutorial を読んで、
http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

それから ListCellRenderer と関連レンダラの API ドキュメントを読むといいかもしれません。
90125
常連さん
会議室デビュー日: 2003/10/17
投稿数: 23
投稿日時: 2005-05-12 19:11
ありがとうございます。
時間はかかると思いますが、やってみます。
1

スキルアップ/キャリアアップ(JOB@IT)