Java Swing:打开后,无法在JDialog中设置JTextArea文本

时间:2017-11-15 11:22:32

标签: java swing jtextarea jdialog invokelater

我有一个JTable,其中最后一列是一个JButton,其ActionListener是:

private class EventDetailActionListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                final long seqEventSel = tblModelEvents.getEventSeq(tblEvents.getSelectedRow());
                final String eventDetail = tblModelEvents.getEventDetail(tblEvents.getSelectedRow());
                new DialogEventDetail(seqEventSel).setDetailText(eventDetail);
            }
        });
    }
}

和JDialog的类是:

public class DialogEventDetail extends JDialog {
    private JTextArea txtAreaDetail;

    public DialogEventDetail(JFrame parent) {
      /* Building JDialog with its size and a BorderLayout
         with a JScrollPanel at CENTER containing a
         txtAreaDetail */
      this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      this.setVisible(true);
    }

    public void setDetailText(String text) {
      this.txtAreaDetail.setText(text);
    }
}

此JDialog用于显示由TableModel持有的长XML文本,但在JTable加载时不会立即显示为suer。 JTextArea无法由用户编辑,但我无法理解为什么JDialog出现后它总是为空。 里面没有文字显示。相反,如果我打电话

this.txtAreaDetail.setText(text);

在构造函数中,文本出现。 为什么这样?

1 个答案:

答案 0 :(得分:1)

尝试使用

this.txtAreaDetail.revalidate();
this.txtAreaDetail.repaint();

使用EventQueue而不是SwingWorker的任何特定原因。

由于我无法添加评论,因此将其作为答案发布。