내 코드는 기본적으로 일부 텍스트 필드와 JButton
이 포함 된 JPanel
이며 사용자가 버튼을 클릭하면 버튼 수신기로 이동 한 다음 텍스트 필드의 데이터를 가져 와서 처리합니다 JLabels
다른 보이지 않는 JPanel
에 추가합니다. 그런 다음 첫 번째 JPanel을 보이지 않게 만들고 두 번째 패널을 표시하여 내가 생성 한 "결과"를 나타냅니다.JButton 텍스트가 변경되지 않습니다
이 모든 문제는 내 프로그램이 텍스트 필드에서 가져온 데이터를 처리하는 동안 JButton
이 말한 내용을 변경하고 이미 event.getSource().setText()
을 사용하려고 시도했음을 발견했습니다. 콘솔에 인쇄하여 단추 텍스트를 변경하지만 변경된 텍스트로 단추를 업데이트하지 않습니다.
나는 모든 형태의 재 검증과 재 페인트를 시도하고이 후에도 유효성을 검사했지만 그 중 아무 것도 효과가 없었다. 어떤 아이디어? 감사!
//entryPanel is the first panel, and picksPanel is the second panel
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
((JButton)event.getSource()).setText("Thinking...");
revalidate();
repaint();
try
{
CriticPick picks = new CriticPick(cityfield.getText(),statefield.getText());
LinkedList<Movie> pickslist = picks.getList();
glayout.setRows(pickslist.size()+2+thepicks.movnum);
picksPanel.add(new JLabel("The Results:"));
//In my actual code I do a bunch of processing and looping that results in jlabels being added to picksPanel
for (int i=0;i<pickslist.size();i++)
{
JLabel label = new JLabel(pickslist.get(i).title);
picksPanel.add(label);
}
}
catch (Exception exc)
{
System.out.println(exc);
}
entryPanel.setVisible(false);
picksPanel.setVisible(true);
}});
guiFrame.add(entryPanel);
guiFrame.add(picksPanel);
guiFrame.setLayout(new FlowLayout(FlowLayout.LEFT));
guiFrame.setVisible(true);
}
필요한 업데이트를 위해 EDT를 차단하는 장기 실행 작업을 수행하지 않기를 바랍니다 ... [CardLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/card)을 사용하지 않는 이유는 무엇입니까? .html).이 시나리오에서는'revalidate()/repaint()'로 머리카락을 뽑지 않고? –