Avatar billede tripwire Nybegynder
21. juni 2004 - 13:49 Der er 2 kommentarer og
1 løsning

JEditorPane farvning af linie og linienummer..

Hej eksperter..

Til at vise hvilken linie man arbejder på, har Textpad valgt at farve hele linien i en diskret farve, som man kan se her
http://www.thehive.dk/tripwire/colorline.JPG

Hvordan får jeg mit JEditorPane til at gøre det samme?
Jeg har et lille eksempel som svaret meget gerne må kodes ind i.

----------EditTest.java-------------

public class EditTest extends javax.swing.JFrame {

    /** Creates new form EditTest */
    public EditTest() {
        initComponents();
    }

    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        Label_Line = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jEditorPane1 = new javax.swing.JEditorPane();

        getContentPane().setLayout(null);

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jLabel1.setText("Line:");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(10, 10, 41, 16);

        Label_Line.setText("0");
        getContentPane().add(Label_Line);
        Label_Line.setBounds(60, 10, 80, 16);

        jEditorPane1.setText("1\n2\n3\n4\n5\n6\n7\n8\n9");
        jScrollPane1.setViewportView(jEditorPane1);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(10, 30, 380, 260);

        pack();
        setTitle("Editorpane test");
        setSize(405,335);
    }

    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        new EditTest().show();
    }


    // Variables declaration - do not modify
    private javax.swing.JEditorPane jEditorPane1;
    private javax.swing.JLabel Label_Line;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel jLabel1;
    // End of variables declaration

}
---------------------

Og hvis i kan få min JLabel "Label_Line" til at skrive hvilket linienummer man er på, så ville det være super.. men det med farvningen af linien er mest vigtig.
Avatar billede mikkelbm Nybegynder
21. juni 2004 - 16:27 #1
Prøv det her:

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

public class LinePainter extends DefaultHighlighter.DefaultHighlightPainter    implements CaretListener, DocumentListener
{   
    private JTextComponent component;   
    private Element root;   
    private Highlighter highlighter;   
    private Object lastHighlight;   
   
    public LinePainter(JTextComponent component, Color color)   
    {       
        super( color );       
        this.component = component;       
        root = component.getDocument().getDefaultRootElement();       
        highlighter = component.getHighlighter();       
       
        component.addCaretListener( this );       
        component.getDocument().addDocumentListener( this );       
       
        addHighlight( 0 );   
    }   
   
    public Shape paintLayer(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c, View view)   
    {       
        try       
        {           
            // Only use the first offset to get the line to highlight           
            Rectangle r = c.modelToView(offs0);           
            r.x = 0;           
            r.width = c.getSize().width;           
           
            // --- render ---           
            g.setColor( getColor() );           
            g.fillRect(r.x, r.y, r.width, r.height);           
           
            return r;       
        }       
        catch (BadLocationException e)       
        {           
            return null;       
        }   
    }   
   
    //  Implement CaretListener   
    public void caretUpdate(CaretEvent e)   
    {       
        resetHighlight();   
    }   
   
    //  Implement DocumentListener   
    public void removeUpdate(DocumentEvent e)   
    {       
        resetHighlight();   
    }   
   
    public void insertUpdate(DocumentEvent e)
    {}   
   
    public void changedUpdate(DocumentEvent e) 
    {}   
   
    /*   
      **  Remove/add the highlight to make sure it gets repainted   
      **/   
      private void resetHighlight()   
      {       
          highlighter.removeHighlight( lastHighlight );       
          int line = root.getElementIndex( component.getCaretPosition() );       
          Element lineElement = root.getElement( line );       
          int start = lineElement.getStartOffset();         
          addHighlight( start );   
      }   
     
      private void addHighlight(int offset)   
      {       
          try       
          {           
              lastHighlight = highlighter.addHighlight( offset, offset + 1, this );       
          }       
          catch(BadLocationException ble)
          {}   
      }   
     
      public static void main(String[] args)   
      {       
          JFrame frame = new JFrame();       
          frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );       
          JTextPane textPane = new JTextPane();       
          frame.getContentPane().add( textPane );       
          LinePainter painter = new LinePainter(textPane, Color.cyan);       
          frame.setSize(300, 200);       
          frame.setVisible(true);   
      }
}

Kilde: http://forum.java.sun.com/thread.jsp?forum=31&thread=346723
Avatar billede mikkelbm Nybegynder
21. juni 2004 - 16:29 #2
Og i dit tilfæle:

private void initComponents() {
jLabel1 = new javax.swing.JLabel();
Label_Line = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jEditorPane1 = new javax.swing.JEditorPane();
/* ********* HER ********** */
LinePainter painter = new LinePainter(jEditorPane1, java.awt.Color.red);

getContentPane().setLayout(null);

........ osv.......
Avatar billede tripwire Nybegynder
21. juni 2004 - 19:19 #3
mange tak.. det virker fint
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester