import java.awt.Color ;
import java.awt.FlowLayout ;
import java.awt.event.ActionEvent ;
import java.awt.event.ActionListener ;
import java.util.Date ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
import javax.swing.JButton ;
import javax.swing.JFrame ;
import javax.swing.JScrollPane ;
import javax.swing.JTextPane ;
import javax.swing.text.BadLocationException ;
import javax.swing.text.DefaultStyledDocument ;
import javax.swing.text.StyleConstants ;
import javax.swing.text.StyleContext ;
import javax.swing.text.StyledDocument ;
public class FrameTextArea
extends JFrame {
public FrameTextArea( ) {
setSize( 400 , 200 ) ;
setTitle( "Text Pane" ) ;
try {
document.remove ( 0 , document.getLength ( ) ) ;
Logger.getLogger ( FrameTextArea.class .getName ( ) ) .log ( Level.SEVERE , null , ex) ;
}
}
} ) ;
add( jButton) ;
add( TextAreaScroll) ;
try {
document.
insertString ( document.
getLength ( ) ,
"\n " + new Date ( ) + ": " + "Red Text" , style
) ; document.
insertString ( document.
getLength ( ) ,
"\n " + new Date ( ) + ": " + "PINK Text" , style
) ;
document.insertString ( document.getLength ( ) , "\n " + "<a href=\" http://w...content-available-to-author-only...s.com\" >Link</a>" , style) ;
Logger.getLogger ( FrameTextArea.class .getName ( ) ) .log ( Level.SEVERE , null , ex) ;
}
setDefaultCloseOperation
( JFrame .
EXIT_ON_CLOSE ) ; setVisible( true ) ;
}
public static void main
( String [ ] args
) { FrameTextArea frameTextArea= new FrameTextArea( ) ;
}
}
aW1wb3J0IGphdmEuYXd0LkNvbG9yOwppbXBvcnQgamF2YS5hd3QuRmxvd0xheW91dDsKaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OwppbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7CmltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwppbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwppbXBvcnQgamF2YXguc3dpbmcuSkJ1dHRvbjsKaW1wb3J0IGphdmF4LnN3aW5nLkpGcmFtZTsKaW1wb3J0IGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lOwppbXBvcnQgamF2YXguc3dpbmcuSlRleHRQYW5lOwppbXBvcnQgamF2YXguc3dpbmcudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKaW1wb3J0IGphdmF4LnN3aW5nLnRleHQuRGVmYXVsdFN0eWxlZERvY3VtZW50OwppbXBvcnQgamF2YXguc3dpbmcudGV4dC5TdHlsZUNvbnN0YW50czsKaW1wb3J0IGphdmF4LnN3aW5nLnRleHQuU3R5bGVDb250ZXh0OwppbXBvcnQgamF2YXguc3dpbmcudGV4dC5TdHlsZWREb2N1bWVudDsKCnB1YmxpYyBjbGFzcyBGcmFtZVRleHRBcmVhIGV4dGVuZHMgSkZyYW1lIHsKCiAgICBwcml2YXRlIFN0eWxlQ29udGV4dCBjb250ZXh0ID0gbmV3IFN0eWxlQ29udGV4dCgpOwogICAgcHJpdmF0ZSBTdHlsZWREb2N1bWVudCBkb2N1bWVudCA9IG5ldyBEZWZhdWx0U3R5bGVkRG9jdW1lbnQoY29udGV4dCk7CiAgICBwcml2YXRlIGphdmF4LnN3aW5nLnRleHQuU3R5bGUgc3R5bGUgPSBjb250ZXh0LmdldFN0eWxlKFN0eWxlQ29udGV4dC5ERUZBVUxUX1NUWUxFKTsKICAgIHByaXZhdGUgZmluYWwgSlRleHRQYW5lIHRleHRBcmVhID0gbmV3IEpUZXh0UGFuZShkb2N1bWVudCk7CiAgICBwcml2YXRlIGZpbmFsIEpTY3JvbGxQYW5lIFRleHRBcmVhU2Nyb2xsID0gbmV3IEpTY3JvbGxQYW5lKHRleHRBcmVhLCBKU2Nyb2xsUGFuZS5WRVJUSUNBTF9TQ1JPTExCQVJfQUxXQVlTLCBKU2Nyb2xsUGFuZS5IT1JJWk9OVEFMX1NDUk9MTEJBUl9BTFdBWVMpOwogICAgcHJpdmF0ZSBKQnV0dG9uIGpCdXR0b24gPSBuZXcgSkJ1dHRvbigiQ2xlYXIiKTsKCiAgICBwdWJsaWMgRnJhbWVUZXh0QXJlYSgpIHsKCiAgICAgICAgc2V0U2l6ZSg0MDAsIDIwMCk7CiAgICAgICAgc2V0VGl0bGUoIlRleHQgUGFuZSIpOwogICAgICAgIFN0eWxlQ29uc3RhbnRzLnNldEFsaWdubWVudChzdHlsZSwgU3R5bGVDb25zdGFudHMuQUxJR05fTEVGVCk7CiAgICAgICAgU3R5bGVDb25zdGFudHMuc2V0Rm9udFNpemUoc3R5bGUsIDEwKTsKICAgICAgICBTdHlsZUNvbnN0YW50cy5zZXRTcGFjZUFib3ZlKHN0eWxlLCAxKTsKICAgICAgICBTdHlsZUNvbnN0YW50cy5zZXRTcGFjZUJlbG93KHN0eWxlLCAxKTsKICAgICAgICBzZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoKSk7CiAgICAgICAgakJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CgogICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmUoMCwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKEZyYW1lVGV4dEFyZWEuY2xhc3MuZ2V0TmFtZSgpKS5sb2coTGV2ZWwuU0VWRVJFLCBudWxsLCBleCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCgogICAgICAgIGFkZChqQnV0dG9uKTsKICAgICAgICBhZGQoVGV4dEFyZWFTY3JvbGwpOwogICAgICAgIFN0eWxlQ29uc3RhbnRzLnNldEZvcmVncm91bmQoc3R5bGUsIENvbG9yLnJlZCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgU3R5bGVDb25zdGFudHMuc2V0Rm9yZWdyb3VuZChzdHlsZSwgQ29sb3IucmVkKTsKICAgICAgICAgICAgZG9jdW1lbnQuaW5zZXJ0U3RyaW5nKGRvY3VtZW50LmdldExlbmd0aCgpLCAiXG4iICsgbmV3IERhdGUoKSArICI6ICIgKyAiUmVkIFRleHQiLCBzdHlsZSk7CiAgICAgICAgICAgIFN0eWxlQ29uc3RhbnRzLnNldEZvcmVncm91bmQoc3R5bGUsIENvbG9yLlBJTkspOwogICAgICAgICAgICBkb2N1bWVudC5pbnNlcnRTdHJpbmcoZG9jdW1lbnQuZ2V0TGVuZ3RoKCksICJcbiIgKyBuZXcgRGF0ZSgpICsgIjogIiArICJQSU5LIFRleHQiLCBzdHlsZSk7CgogICAgICAgICAgICBTdHlsZUNvbnN0YW50cy5zZXRGb3JlZ3JvdW5kKHN0eWxlLCBDb2xvci5ibGFjayk7CiAgICAgICAgICAgIGRvY3VtZW50Lmluc2VydFN0cmluZyhkb2N1bWVudC5nZXRMZW5ndGgoKSwgIlxuIiArICI8YSBocmVmPVwiaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMuY29tXCIgPkxpbms8L2E+Iiwgc3R5bGUpOwogICAgICAgIH0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoRnJhbWVUZXh0QXJlYS5jbGFzcy5nZXROYW1lKCkpLmxvZyhMZXZlbC5TRVZFUkUsIG51bGwsIGV4KTsKICAgICAgICB9CgoKICAgICAgICBzZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oSkZyYW1lLkVYSVRfT05fQ0xPU0UpOwogICAgICAgIHNldFZpc2libGUodHJ1ZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgRnJhbWVUZXh0QXJlYSBmcmFtZVRleHRBcmVhPSBuZXcgRnJhbWVUZXh0QXJlYSgpOwogICAgfQp9