2016-01-11 3 views
1

Я хочу создать предварительный просмотр файла, который я прочитал, с указанным количеством строк. Мой код работает нормально, проблема в том, что если я выберу другое количество строк, JDesktopPane не будет обновляться и перезаписывает предыдущие строки.Обновить JDesktopPane не работает

Мой код выглядит следующим образом:

previewButton.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent event) { 


         try { 

          if(Integer.parseInt(nrLines.getText()) < 20) { 
          for(int i=0; i< Integer.parseInt(nrLines.getText());i++){ 
          previewLabel[i] = new JLabel(" "); 
          previewLabel[i].setText("Line nr. "+(i+1)+": "+previewList.get(i)); 
          previewLabel[i].setBounds(20,575+25*i,700,300); 
          previewLabel[i].setVisible(true); 
          desktopPane.add(previewLabel[i]);        
          } 
          desktopPane.repaint(); 
          } 
          else { 
           System.out.println("Maximim number of lines is 20 !"); 
          } 

         } catch (Exception e) { 
          System.out.println("Please enter a integer value !"); 
         } 

         } 
       }); 

       desktopPane.add(previewButton);   

Вот как это выглядит после того, как я выбираю другое количество строк:

enter image description here

Спасибо заранее за помощь!

ответ

1

При взгляде на ваш код кажется, что каждый раз, когда вызывается actionPerformed(), вы добавляете новый previewLabel s в desktopPane. Вы можете попробовать следить за тем, что вы добавили (или осмотреть детей desktopPane) и удалить старые ярлыки перед добавлением новых.

В качестве альтернативы вместо создания новых меток, возможно, вы можете заменить содержимое старых.

Пример (я не использовал свой код, но он показывает два подхода, я имею в виду):

import javax.swing.*; 
import java.util.*; 
import java.awt.event.*; 

class Test { 

    static JLabel labelToReplace; 
    static JLabel labelToUpdate; 

    private static JLabel newLabel(String s) { 
    JLabel l = new JLabel(s); 
    l.setBounds(30, 160, 200, 40); 
    labelToReplace = l; 
    return l; 
    } 

    public static void main(String[] args) { 
    JFrame frame = new JFrame("Test"); 
    frame.setSize(300, 300); 
    JDesktopPane desktopPane = new JDesktopPane(); 
    frame.setContentPane(desktopPane); 

    // This one we will update. 
    labelToUpdate = new JLabel("Test label"); 
    labelToUpdate.setBounds(30, 120, 200, 40); 
    desktopPane.add(labelToUpdate); 

    // This one we will replace. 
    desktopPane.add(newLabel("Another")); 

    JButton btnRefresh = new JButton("Refresh"); 
    btnRefresh.addActionListener(
     new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      labelToUpdate.setText(new Date().toString()); 

      desktopPane.remove(desktopPane.getIndexOf(labelToReplace)); 
      desktopPane.add(newLabel(new Date().toString())); 
      } 
     } 
    ); 
    btnRefresh.setBounds(30, 50, 100, 70); 
    desktopPane.add(btnRefresh); 

    frame.show(); 
    } 
} 
+0

Спасибо за ваш ответ. Можете ли вы мне помочь, как я могу удалить или заменить старые новые? Я попробовал все, что знал. – DCalin

+0

добавил пример кода – Vlad

+0

Большое вам спасибо! Я действительно застрял в этом. Я знал, что сделал что-то не так, но не знал, как это исправить. еще раз спасибо – DCalin

Смежные вопросы