2015-05-15 178 views
3

運行下面的代碼Java 6和Java 8,並查看結果。換行符在java 6的visibleEditorRect範圍內工作,但在java 8上,字符串溢出了界限。有沒有解決這個問題的方法。JTextpane不尊重與java的visibleEditorRect 8

import java.awt.Rectangle; 

import javax.swing.JFrame; 
import javax.swing.JTextPane; 
import javax.swing.plaf.basic.BasicTextPaneUI; 

public class TextPaneBug { 

public static void main(String[] args) { 
    JFrame f = new JFrame() ; 
    JTextPane text = new BugTextPane() ; 
    f.add(text); 
    text.setText("mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"); 
    f.setExtendedState(JFrame.MAXIMIZED_BOTH); 
    f.setVisible(true); 
} 

static class BugTextPane extends JTextPane 
{ 
    public BugTextPane() {  
     setUI(new BasicTextPaneUI(){ 
      @Override 
      protected Rectangle getVisibleEditorRect() { 
       Rectangle r = super.getVisibleEditorRect() ; 
       Rectangle newr = new Rectangle(r.width/2 - 300 , r.height/2 - 300 , 600 ,600) ; 
       return newr; 
      } 
      protected void paintSafely(java.awt.Graphics g) { 
       super.paintSafely(g); 
       Rectangle r = getVisibleEditorRect() ; 
       g.drawRect(r.x,r.y,r.width,r.height); 
      }; 
     } 

      ); 
    } 
} 
} 
+0

爲什麼覆蓋可見矩形非常重要?我想你使用一些技巧來實現一些行爲。 – StanislavL

+0

我們有一個帶有分頁和基於visibleEditorRect的分頁邏輯的文本編輯器。所以我們的編輯器不像預期的那樣使用java 8。 – mfidan

+0

因爲我可以看到問題是改變換行。它可以是http://stackoverflow.com/questions/8666727/wrap-long-words-in-jtextpane-java-7這裏。 – StanislavL

回答

1

我解決了將斷開行爲恢復爲Java 6功能的問題。 覆蓋getBreakWeightgetBreakSpot方法通過從java 6中複製LabelView的擴展就足夠了。