2012-03-29 16 views
2

Ich habe ein einfaches JEditorPane in einem JScrollPane, das Zeilennummern auf der linken Seite anzeigt. Es funktioniert großartig, außer wenn Sie das Fenster außerhalb des Bildschirms bewegen und ziehen Sie sie wieder zurück, es ist das aussieht, wenn Sie ziehen stoppen:Java Swing JScrollPane Zeilennummer Glitch

enter image description here

irgendwelche Ideen? Sollte ich auf ein Move/Drag Event warten und Repaint/Revalidate aufrufen müssen?

Dachte, es könnte etwas offensichtlich sein, aber hier ist ein Code. Ich benutze das JSyntaxPane.

public EditorPanel() 
     { 
      this.setLayout(new BorderLayout()); 

      PythonSyntaxKit.initKit(); 
      codeEditor = new JEditorPane(); 
      JScrollPane scrPane = new JScrollPane(codeEditor); 
      Dimension d = new Dimension(710,702); 
      codeEditor.setPreferredSize(d); 
      codeEditor.setContentType("text/python"); 
      codeEditor.setText("Welcome to PhysUtil!"); 
      this.add(scrPane, BorderLayout.CENTER); 

      toolbar = new PhysUtilToolbar(); 
      this.add(toolbar, BorderLayout.PAGE_START); 

      this.repaint(); 
      } 
//from MainFrame Class... 
public EditorPanel mainEditor; 
    public MainFrame() 
    { 
     //Someone can figure out how to load the icon...kept throwing an error 
     //ImageIcon icon = new ImageIcon(getClass().getResource("exit.png")); 
     PhysUtilMenuBar menuBar = new PhysUtilMenuBar(); 
     this.mainEditor = new EditorPanel(); 
     menuBar.editorPanel = mainEditor; 

     this.setJMenuBar(menuBar); 
     this.setTitle("PhysUtil"); 
     this.setLocationRelativeTo(null);  
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.add(mainEditor); 
     Image icon = Toolkit.getDefaultToolkit().getImage("icon.jpg"); 
     this.setIconImage(icon); 
     this.setSize(800, 800); 
     this.setLocation(0, 0); 
     this.setVisible(true); 
    } 
+0

Damals habe ich eine TextAreaLineNumberBorder-Klasse, eine Erweiterung von Border, erstellt. Hätten Sie Interesse daran? – ControlAltDel

+1

keine Ahnung, bitte bearbeiten Sie Ihre Frage mit einem [SSCCE] (http://sscce.org/) – mKorbel

+0

Sind Sie auf einem Windows-System mit zwei Monitoren? Macht es das auf beiden Monitoren? –

Antwort

2

eine Window/WindowStateListener/WindowFocusListener ... In und sehen, welche Ereignisse ausgelöst werden immer, wenn Sie Ihre Anwendung ziehen. zum sekundären Bildschirm und/oder zurück. Von dort aus, wenn Sie die ausgelösten Ereignisse wissen, versuchen Sie, auf das letzte Ereignis zu hören (was auch immer es sein wird), und machen Sie Ihren Editorbereich ungültig (machen Sie es schmutzig) und streichen Sie ihn neu. SSCCE würde auch helfen.

+1

Dies war die Lösung, die ich akzeptierte, obwohl es kein WindowListener war. Ich brauchte einen ComponentListener, um nach einem Bewegungsereignis zu suchen. Ich habe Repaint auf meinem MainEditor JPanel angerufen und alles ist gut. – Josh

+0

@Josh ich hüpfte du würdest den kleinen "..." Wildcard nach WindowListener sehen (: Froh dass es trotzdem geholfen hat! – lzdt