组件更改大小后文本消失

时间:2012-04-26 10:05:59

标签: java swing jtextpane jeditorpane

我在上面创建了一个jTable和TableCellRenderer,TableCellEditor。我需要在那里放置editable(使用text / html上下文类型)JEditorPane。当我在里面写一些文字并调整组件大小时,文字会消失。我做错了什么?此外,在这个组件上方,我有按钮文本版本:例如:

JButton bold = new JButton():
bold.setAction(new StyledEditorKit.BoldAction());

这是我自定义模型的一部分:

private JEditorPane editorTxtPane = new JEditorPane("text/html", "");
private JEditorPane rendererTxtPane = new JEditorPane("text/html", "");
private final JPanel editorPanel = new JPanel();
private final JPanel rendererPanel = new JPanel();
private final ArrayList<FocusListener> editorFocusListeners = new ArrayList<FocusListener>();

public SampleModel() {
    super();

    rendererTxtPane.setContentType("text/html");
    editorTxtPane.setContentType("text/html");

    rendererPanel.add(initCellControls(rendererPanel, rendererLabel));
    rendererPanel.add(rendererTxtPane);

    editorPanel.add(initCellControls(editorPanel, editorLabel));
    JScrollPane sp = new JScrollPane(editorTxtPane);
    sp.setBorder(null);
    editorPanel.add(sp);

    editorTxtPane.addFocusListener(new FocusAdapter() {

        @Override
        public void focusGained(FocusEvent e) {
            super.focusGained(e);
            e.setSource(editorTxtPane);
            for (int i = editorFocusListeners.size() - 1; i >= 0; i--) {
                editorFocusListeners.get(i).focusGained(e);
            }
        }

        @Override
        public void focusLost(FocusEvent e) {
            super.focusLost(e);
            e.setSource(editorTxtPane);
            for (int i = editorFocusListeners.size() - 1; i >= 0; i--) {
                editorFocusListeners.get(i).focusLost(e);
            }
        }
    });
}

这是我的编辑器和渲染器方法:

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    Comment c = data.get(row);
    rendererTxtPane.setText(c.getComment());
    return rendererPanel;
}

@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    Comment c = data.get(row);
    c.setNeedSave(true);
    editorTxtPane.setText(c.getComment());
    return editorPanel;
}

2 个答案:

答案 0 :(得分:1)

<{3}}的工作原理 。特别是,编辑器仅在编辑单元格时有效。您的TableModel应存储每一行​​Document。编辑结束后,您的模型将使用修订后的Document进行更新,如Editors and Renderers所述。您可以将自己的行为与here进行比较,这可能构成example的基础。

答案 1 :(得分:0)

这可能是以下两个条件之一的结果:

  1. 您嵌入电阻中的文本组件 组件正在通过调整过程转移出去 机制,所以当你调整它时,内部文本组件是 消失
  2. 每当调整过程发生时,标准Swing 重新绘制过程不是由他的平台调用,在适当的时刻,所以你可以 通过编码手动调用重绘。 SWING平台通常 只要注意到更改,就会自动调用重绘方法 整个GUI,但它被调整为在其他一些之后运行 要完成的过程,在这种情况下手动调用重绘 inevitble