後,我有一個TreeCellEditor
具有可變大小(當你選擇在編輯器中的一個組成部分的值,顯示額外的組件)一個JTree
。最初顯示編輯器時,它的大小是正確的。但是,如果顯示其他組件,導致其首選大小更大,則編輯器將不會被放大並且其內容將被剪切。如何調整的TreeCellEditor它顯示
我發現,如果我設置的編輯器,它會調整大小,但我想一個辦法把它自動調整它的首選大小變化時。
下面是一個使用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);
}
});
}
}
我最近了解到[this](http://stackoverflow.com/a/19225982/230513)。 – trashgod
謝謝,@trashgod。這適用於行高。我對單元格編輯器寬度感興趣。 –