2012-06-09 6 views
0

Как я могу поместить экран загрузки, который будет отображаться в java-апплете, пока график не будет нарисован? Мой код:Экран загрузки JApplet во время рисования

public class Test extends JApplet 
{ 
    GrappaPanel gp = null; 
    JPanel jpanel = null; 
    JEditorPane dataDisplayer = null; 
    Graph graph = null; 
    JProgressBar progressBar = null; 

    public void init() {  
     Parser program =null; 
     InputStream input; 
      String sgraph = getGraph(); 
      try { 
       input = new ByteArrayInputStream(sgraph.getBytes("UTF-8")); 
       program = new Parser(input); 
       program.parse(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      graph = program.getGraph(); 
      gp = new GrappaPanel(graph); 
      JScrollPane jspg = new JScrollPane(gp,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
      GridBagLayout gb = new GridBagLayout(); 
      jpanel = new JPanel(gb); 
      setContentPane(jpanel); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.fill = GridBagConstraints.BOTH; 
      gbc.gridwidth = GridBagConstraints.REMAINDER; 
      gbc.weightx = 1.0; 
      gbc.weighty = 1.0; 
      gb.setConstraints(jspg,gbc); 
      jpanel.add(jspg); 
    } 

    private String getGraph(){ 
    ... 
    } 

} 

Рисование графика в апплете занимает большую часть времени загрузки. Получение строки, представляющей граф, и разбора его на объект Graph относительно дешево. Любая помощь будет оценена!

+1

Все, что требуется для завершения, должно выполняться в фоновом потоке, например, с объектом SwingWorker. –

+0

Кстати, где вы «рисуете график»? Какие строки кода выше занимают много времени? Кроме того, мне смешно, что вы разбираете String в какую-то графику. Является ли это строкой XML? –

+0

Нет, это точечный язык, который используется для описания графика. –

ответ

2

Используйте CardLayout с JProgressBar (или анимированный значок загрузки) на одной карте, а график в другой. По умолчанию сначала загрузите карту загрузки, затем выполните задание на длительное время в SwingWorker. Когда результаты будут возвращены, подготовьте график, добавьте его на другую карту &, поверните на эту карту.