サイズが可変JTree
のTreeCellEditor
があります (エディター内の 1 つのコンポーネントで値を選択すると、追加のコンポーネントが表示されます)。エディターが最初に表示されるときは、正しいサイズです。ただし、優先サイズを大きくする追加のコンポーネントが表示される場合、エディターは拡大されず、その内容はクリップされます。
エディターのサイズを設定するとサイズが変更されることがわかりましたが、推奨サイズが変更されたときに自動的にサイズを変更する方法が必要です。
JTextField
を使用してエディタをシミュレートする例を次に示します。ボタンをクリックすると、テキスト フィールドの優先サイズが大きくなりますが、私のエディターでは、これはエディター コンポーネント内からトリガーされ、ツリー セル エディター以外のコンテキストで使用されるため、サイズを明示的に設定したくありません。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JTree;
public class Test extends JFrame {
@Override
public void setVisible(boolean b) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTree tree = new JTree();
tree.setEditable(true);
final JTextField field = new JTextField();
tree.setCellEditor(new DefaultCellEditor(field));
JButton button = new JButton(new AbstractAction("Make CellEditor Wider") {
@Override
public void actionPerformed(ActionEvent e) {
Dimension size = field.getPreferredSize();
size.width += 50;
field.setPreferredSize(size);
field.setSize(size); // This forces the tree to show the correct size
}
});
setLayout(new BorderLayout());
add(tree, BorderLayout.CENTER);
add(button, BorderLayout.SOUTH);
setSize(500, 500);
super.setVisible(b);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Test().setVisible(true);
}
});
}
}