を開いた後JDialogの中JTextAreaのテキストを設定することができない私は、最後の列がActionListenerのあるJButtonのあるJTableのを持っている:Javaのスイング:それは
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によって保持されているが、JTableがロードされたときにすぐに表示されない長いXMLテキストを表示するために使用されます。 JTextAreaはユーザーによって編集可能になっていませんが、JDialogが表示された後は常に空である理由を理解できません。 内部にテキストが表示されていません。代わりに、コンストラクタ内で
this.txtAreaDetail.setText(text);
と入力すると、テキストが表示されます。 これはなぜですか?
モーダルダイアログでsetVisibleを呼び出すと、ダイアログが破棄されるまでUIがブロックされるため、コンストラクタを使用するのが最適な解決策であると考えてください。しかし、現在あなたのダイアログはモーダルではないので、これは起こらないはずです – Ansharja
私はそれを発見しました!はい、私のJDialogはモーダルです、私はそれを言及するのを忘れました。 setDetailText()内のsetVisible()メソッドを動かすようになりました。 –