Avatar billede lifo Nybegynder
08. maj 2003 - 15:54 Der er 22 kommentarer og
1 løsning

farve tekst i JTextArea ?

hej
jeg har et JTextArea som jeg bruger til log
jeg har lavet en metode i Log classen som hedder addError
og jeg vil gerne farve den linje som jeg indsætter rød
hvordan gør jeg det ?
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 17:16 #1
Evt. med textArea.setText("rød").setForeground(Color.red); eller med setBackground(...);
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 17:18 #2
JTextArea jta = new JTextArea();

jta.setForegroundColor(Color.red);
jta.append("this is red\n");

jta.setForegroundColor(Color.blue);
jta.append("this is blue");

Color clr = new Color(255,255,255);
jta.setForegroundColor(clr);
jta.setText("this will be white");
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 17:19 #3
Eller med JTextPane:

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

public class AttributedTextArea extends JTextPane
{
private DefaultStyledDocument m_defaultStyledDocument=new DefaultStyledDocument();

public AttributedTextArea(){
this.setDocument(m_defaultStyledDocument);
}

public void append(String string,Color color){
try{
SimpleAttributeSet attr=new SimpleAttributeSet();
StyleConstants.setBackground(attr,color);
m_defaultStyledDocument.insertString(m_defaultStyledDocument.getLength(),string,attr);
}
catch(Exception e){
Messages.javaException(e);
}
}

public void append(String string){
append(string,Color.white);
}
}
Avatar billede riversen Nybegynder
08. maj 2003 - 18:11 #4
magoo: synes ikke rigtigt dit 2. svar virker hos mig...ændrer hele tekstens farve.
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 18:18 #5
Nej, det har du ret i, men nr. 1 virker, ik?
Avatar billede riversen Nybegynder
08. maj 2003 - 18:19 #6
det gør den vel..men ikke for en enkelt linie i et textarea
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 18:23 #7
Jeg ser lige på JtextPane - vil mene det er det du skal bruge så!
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 18:45 #8
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 19:10 #9
// Copyright MageLang Institute; Version $Id: //depot/main/src/edu/modules/Swing/magercises/TextPane/Solution/Formatter.java#2 $
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.io.*;
import java.util.*;

public class Formatter extends JFrame {
  final static int WIDTH = 400;
  final static int HEIGHT = 300;
  StyledDocument doc;
  JTextPane pane;
  JLabel statusInfo;

  public Formatter(String lab) {
    super (lab);

    // Get ContentPane
    Container c = getContentPane();

    // Setup Status Message Area
    statusInfo = new JLabel();
    c.add (statusInfo, BorderLayout.SOUTH);

    // Setup Text Pane
    doc = new DefaultStyledDocument();
    pane = new JTextPane (doc);

    // Place in JScrollPane
    JScrollPane sp = new JScrollPane (pane);
    c.add(sp, BorderLayout.CENTER);

    // Setup Menus
    JMenuBar menuBar = new JMenuBar();
    setJMenuBar (menuBar);

    // Setup File Menu
    JMenu file = new JMenu ("File");
    JMenuItem item;
    file.add (item = new JMenuItem ("New"));
    item.addActionListener (new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        doNewCommand();
      }
    });
    file.add (item = new JMenuItem ("Open"));
    item.addActionListener (new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        doOpenCommand();
      }
    });
    file.add (item = new JMenuItem ("Load Text"));
    item.addActionListener (new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        doLoadCommand();
      }
    });
    file.add (item = new JMenuItem ("Save"));
    item.addActionListener (new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        doSaveCommand();
      }
    });
    file.addSeparator();
    file.add (item = new JMenuItem ("Close"));
    item.addActionListener (new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        doCloseCommand();
      }
    });
    menuBar.add (file);

    // Setup Color Menu
    JMenu color = new JMenu("Color");
    color.add (item = new JMenuItem ("Red"));
    item.setIcon (new ColoredBox(Color.red));
    item.addActionListener (new
      StyledEditorKit.ForegroundAction (
        "set-foreground-red", Color.red));
    color.add (item = new JMenuItem ("Orange"));
    item.setIcon (new ColoredBox(Color.orange));
    item.addActionListener (new
      StyledEditorKit.ForegroundAction (
        "set-foreground-orange", Color.orange));
    color.add (item = new JMenuItem ("Yellow"));
    item.setIcon (new ColoredBox(Color.yellow));
    item.addActionListener (new
      StyledEditorKit.ForegroundAction (
        "set-foreground-yellow", Color.yellow));
    color.add (item = new JMenuItem ("Green"));
    item.setIcon (new ColoredBox(Color.green));
    item.addActionListener (new
      StyledEditorKit.ForegroundAction (
        "set-foreground-green", Color.green));
    color.add (item = new JMenuItem ("Blue"));
    item.setIcon (new ColoredBox(Color.blue));
    item.addActionListener (new
      StyledEditorKit.ForegroundAction (
        "set-foreground-blue", Color.blue));
    color.add (item = new JMenuItem ("Magenta"));
    item.setIcon (new ColoredBox(Color.magenta));
    item.addActionListener (new
      StyledEditorKit.ForegroundAction (
        "set-foreground-magenta", Color.magenta));
    color.add (item = new JMenuItem ("Custom Color"));
    item.addActionListener (new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        doColorCommand();
      }
    });

    menuBar.add (color);

    // Setup Font Menu
    JMenu font = new JMenu("Font");
    font.add (item = new JMenuItem ("12"));
    item.addActionListener (new
      StyledEditorKit.FontSizeAction (
        "font-size-12", 12));
    font.add (item = new JMenuItem ("24"));
    item.addActionListener (new
      StyledEditorKit.FontSizeAction (
        "font-size-24", 24));
    font.add (item = new JMenuItem ("36"));
    item.addActionListener (new
      StyledEditorKit.FontSizeAction (
        "font-size-36", 36));
    font.addSeparator();
    font.add (item = new JMenuItem ("Serif"));
    item.setFont (new Font ("Serif", Font.PLAIN, 12));
    item.addActionListener (new
      StyledEditorKit.FontFamilyAction (
        "font-family-Serif", "Serif"));
    font.add (item = new JMenuItem ("SansSerif"));
    item.setFont (new Font ("SansSerif", Font.PLAIN, 12));
    item.addActionListener (new
      StyledEditorKit.FontFamilyAction (
        "font-family-SansSerif", "SansSerif"));
    font.add (item = new JMenuItem ("Monospaced"));
    item.setFont (new Font ("Monospaced", Font.PLAIN, 12));
    item.addActionListener (new
      StyledEditorKit.FontFamilyAction (
        "font-family-Monospaced", "Monospaced"));
    font.addSeparator();
    font.add (item = new JMenuItem ("Bold"));
    item.setFont (new Font ("Serif", Font.BOLD, 12));
    item.addActionListener (
      new StyledEditorKit.BoldAction ());
    font.add (item = new JMenuItem ("Italic"));
    item.setFont (new Font ("Serif", Font.ITALIC, 12));
    item.addActionListener (
      new StyledEditorKit.ItalicAction ());
/* Add once FontChooser is available
    font.addSeparator();
    font.add (item = new JMenuItem ("Custom Font"));
    item.addActionListener (new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        doFontCommand();
      }
    });
*/
    menuBar.add (font);

    // Setup Insert Menu
    JMenu insert = new JMenu("Insert");
    insert.add (item = new JMenuItem ("Image File"));
    item.addActionListener (new ActionListener() {
      public void actionPerformed (ActionEvent e) {
        doInsertImageCommand();
      }
    });
    menuBar.add (insert);
  }

  public static void main (String args[]) {
    Formatter frame = new Formatter("Mini Text Editor");
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {System.exit(0);}
    });
    frame.setSize(WIDTH, HEIGHT);
    frame.setVisible(true);
  }

  public void doNewCommand() {
    pane.setStyledDocument (doc = new DefaultStyledDocument());
  }

  public void doCloseCommand() {
    System.exit (0);
  }

  public void doOpenCommand() {
    try {
      FileInputStream fis = new FileInputStream ("doc.ser");
      ObjectInputStream ois = new ObjectInputStream (fis);
      doc = (StyledDocument)ois.readObject();
      ois.close();
      pane.setStyledDocument (doc);
      validate();
      statusInfo.setText ("Reloaded from disk");
    } catch (Exception e) {
      statusInfo.setText ("Unable to reload");
      e.printStackTrace();
    }
  }

  public void doSaveCommand() {
    try {
      FileOutputStream fos = new FileOutputStream ("doc.ser");
      ObjectOutputStream oos = new ObjectOutputStream (fos);
      oos.writeObject (doc);
      oos.flush();
      oos.close();
      statusInfo.setText ("Saved to disk");
    } catch (IOException e) {
      statusInfo.setText ("Unable to save");
      e.printStackTrace();
    }
  }

  public void doLoadCommand() {
    String msg;
    JFileChooser chooser = new JFileChooser();
    int status = chooser.showOpenDialog(this);
    if (status == JFileChooser.APPROVE_OPTION) {
      char data[];
      final Runnable doWaitCursor = new Runnable() {
        public void run() {
          setCursor (Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
        }
      };
      Thread appThread = new Thread() {
        public void run() {
          try {
            SwingUtilities.invokeAndWait(doWaitCursor);
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      };
      appThread.start();
      File f = chooser.getSelectedFile();
      try {
        // Clear out current document
        pane.setStyledDocument (doc = new DefaultStyledDocument());
        // Read in text file
        FileReader fin = new FileReader (f);
        BufferedReader br = new BufferedReader (fin);
        char buffer[] = new char[4096];
        int len;
        while ((len = br.read (buffer, 0, buffer.length)) != -1) {
          // Insert into pane
          doc.insertString(doc.getLength(),
            new String (buffer, 0, len), null);
        }
        statusInfo.setText ("Loaded: " + f.getName());
      } catch (BadLocationException exc) {
        statusInfo.setText ("Error loading: " + f.getName());
      } catch (FileNotFoundException exc) {
        statusInfo.setText ("File Not Found: " + f.getName());
      } catch (IOException exc) {
        statusInfo.setText ("IOException: " + f.getName());
      }
      final Runnable undoWaitCursor = new Runnable() {
        public void run() {
        setCursor (Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        }
      };
      appThread = new Thread() {
        public void run() {
          try {
            SwingUtilities.invokeAndWait(undoWaitCursor);
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      };
      appThread.start();
    }
  }

/*
  public void doFontCommand() {
    Font font = FontChooser.ask (
      this, "Change font", getFont(), null);
    if (font != null) {
      MutableAttributeSet attr = new SimpleAttributeSet();
      StyleConstants.setFontFamily (attr, font.getFamily());
      StyleConstants.setFontSize (attr, font.getSize());
      StyleConstants.setBold (attr, font.isBold());
      StyleConstants.setItalic (attr, font.isItalic());
      pane.setCharacterAttributes(attr, false);
    }
  }
*/

  public void doColorCommand() {
    Color color = JColorChooser.showDialog(
      this, "Color Chooser", Color.cyan);
    if (color != null) {
      MutableAttributeSet attr = new SimpleAttributeSet();
      StyleConstants.setForeground(attr, color);
      pane.setCharacterAttributes(attr, false);
    }
  }

  public void doInsertImageCommand() {
    JFileChooser chooser = new JFileChooser();
    int status = chooser.showOpenDialog(this);
    if (status == JFileChooser.APPROVE_OPTION) {
      File file = chooser.getSelectedFile();
      Icon icon = new ImageIcon (file.getAbsolutePath());
      pane.insertIcon (icon);
    }
  }

  class ColoredBox implements Icon {
    Color color;
    public ColoredBox (Color c) {
      color = c;
    }
    public void paintIcon (Component c, Graphics g, int x, int y) {
      g.setColor(color);
      g.fillRect (x, y, getIconWidth(), getIconHeight());
    }
    public int getIconWidth() {
      return 10;
    }
    public int getIconHeight() {
      return 10;
    }
  }
}

Løser problemet, men vi skal lige have hevet det relevante kode ud!
Avatar billede viht Nybegynder
08. maj 2003 - 19:24 #10
Det kan nu gøres noget nemmere vil jeg sige.

//TestFrame.java:
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

import java.util.*;

public class TestFrame extends JFrame {

    private JMenuBar menu;
    private JMenu editMenu;
    private JMenu fileMenu;

    private JTextPane pane;
    private DefaultStyledDocument document;

    public TestFrame() {

        super("Test");
        setSize(400,400);

        getContentPane().add(new JScrollPane(createTextPane()), BorderLayout.CENTER);
        setJMenuBar(createMenu());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        countStyles();
    }

    private void countStyles() {
        Element sectionElem = pane.getDocument().getDefaultRootElement();

        int paraCount = sectionElem.getElementCount();

        for (int i=0; i<paraCount; i++) {
            Element paraElem = sectionElem.getElement(i);
            AttributeSet attr = paraElem.getAttributes();

        String sn = (String)attr.getAttribute(StyleConstants.NameAttribute);
            Style style = pane.getStyle(sn);
        if (style.getName().equals(sn)) {
            int rangeStart = paraElem.getStartOffset();
            int rangeEnd = paraElem.getEndOffset();
            pane.getStyledDocument().setParagraphAttributes(
            rangeStart, rangeEnd-rangeStart, style, true);
            }

        for (int j=0; j<paraElem.getElementCount(); j++) {
            Element contentElem = paraElem.getElement(j);
            attr = contentElem.getAttributes();

            sn = (String)attr.getAttribute(StyleConstants.NameAttribute);

            if (style.getName().equals(sn)) {
              int rangeStart = contentElem.getStartOffset();
              int rangeEnd = contentElem.getEndOffset();
              pane.getStyledDocument().setCharacterAttributes(
              rangeStart, rangeEnd-rangeStart, style, true);
            }
        }
      }
    }

    private JTextPane createTextPane() {
        pane = new JTextPane(document = createDocument());
        return pane;
    }

    private DefaultStyledDocument createDocument() {
        document = new DefaultStyledDocument();

        String init[] =    {
                                    "Quick brown fox jumps over lazy dog",
                                "Quick brown fox jumps over lazy dog",
                                "Quick brown fox jumps over lazy dog",
                                "Quick brown fox jumps over lazy dog",
                                };

        Style[] atts = new Style[4];

        atts[0] = document.addStyle("sansserif", null);
        StyleConstants.setFontFamily(atts[0], "SansSerif");
        StyleConstants.setFontSize(atts[0], 16);

        atts[1] = document.addStyle("bold",null);
        StyleConstants.setBold(atts[1], true);

        atts[2] = document.addStyle("italic", null);
        StyleConstants.setItalic(atts[2], true);

        atts[3] = document.addStyle("red", null);
        StyleConstants.setForeground(atts[3], Color.red);

        try {
          for (int i = 0; i < init.length; i ++) {
              document.insertString(document.getLength(), init[i] + "\n", atts[i]);
          }
        }
        catch (BadLocationException ble) {
            ble.printStackTrace();
        }
        return document;
    }

    private JMenuBar createMenu() {
        menu = new JMenuBar();

        menu.add(fileMenu = new JMenu("Filer"));
        JMenuItem exitItem = new JMenuItem("Afslut");
        exitItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                System.exit(0);
            }
        });
        fileMenu.add(exitItem);

        menu.add(editMenu = new JMenu("Rediger"));
        Keymap keymap = pane.addKeymap("bindings", pane.getKeymap());

        Action action = new StyledEditorKit.BoldAction();
      action.putValue(Action.NAME, "Fed");
      keymap.addActionForKeyStroke(KeyStroke.getKeyStroke('f'), action);
      editMenu.add(action);

        action = new StyledEditorKit.ItalicAction();
        action.putValue(Action.NAME, "Kursiv");
        keymap.addActionForKeyStroke(KeyStroke.getKeyStroke('k'), action);
        editMenu.add(action);

        action = new StyledEditorKit.UnderlineAction();
        action.putValue(Action.NAME, "Understregning");
        keymap.addActionForKeyStroke(KeyStroke.getKeyStroke('u'), action);
        editMenu.add(action);

        editMenu.addSeparator();

        editMenu.add(new StyledEditorKit.FontSizeAction("12", 12));
        editMenu.add(new StyledEditorKit.FontSizeAction("14", 14));
        editMenu.add(new StyledEditorKit.FontSizeAction("18", 18));

        editMenu.addSeparator();

        editMenu.add(new StyledEditorKit.FontFamilyAction("Serif", "Serif"));
        editMenu.add(new StyledEditorKit.FontFamilyAction("SansSerif", "SansSerif"));
        editMenu.addSeparator();

        editMenu.add(new StyledEditorKit.ForegroundAction("Rød", Color.red));
        editMenu.add(new StyledEditorKit.ForegroundAction("Grøn", Color.green));
        editMenu.add(new StyledEditorKit.ForegroundAction("Blå", Color.blue));
        editMenu.add(new StyledEditorKit.ForegroundAction("Sort", Color.black));

        pane.setKeymap(keymap);
        return menu;
    }

    public static void main(String[] args) {
      new TestFrame().show();
  }
}
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 19:24 #11
En barberet udgave

// Copyright MageLang Institute; Version $Id: //depot/main/src/edu/modules/Swing/magercises/TextPane/Solution/Formatter.java#2 $

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

public class Formatter extends JFrame {
    final static int WIDTH = 400;
    final static int HEIGHT = 300;
    StyledDocument doc;
    JTextPane pane;
    JLabel statusInfo;

    public Formatter( String lab ) {
        super( lab );

        // Get ContentPane
        Container c = getContentPane();

        // Setup Status Message Area
        statusInfo = new JLabel();
        c.add( statusInfo, BorderLayout.SOUTH );

        // Setup Text Pane
        doc = new DefaultStyledDocument();
        pane = new JTextPane( doc );

        // Place in JScrollPane
        JScrollPane sp = new JScrollPane( pane );
        c.add( sp, BorderLayout.CENTER );

        // Setup Menus
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar( menuBar );
        doColorCommand();
    }

    public static void main( String args[] ) {
        Formatter frame = new Formatter( "Mini Text Editor" );

        frame.addWindowListener( new WindowAdapter() {
            public void windowClosing( WindowEvent e ) {
                System.exit( 0 );
            }
        } );
        frame.setSize( WIDTH, HEIGHT );
        frame.setVisible( true );
    }


    public void doColorCommand() {
        Color color = JColorChooser.showDialog(
                this, "Color Chooser", Color.cyan );
        if ( color != null ) {
            MutableAttributeSet attr = new SimpleAttributeSet();
            StyleConstants.setForeground( attr, color );
            pane.setCharacterAttributes( attr, false );
        }
    }
}
Avatar billede riversen Nybegynder
08. maj 2003 - 20:29 #12
virker ikke her
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 20:30 #13
riversen >> Hvad er det, der ikke virker?
Avatar billede riversen Nybegynder
08. maj 2003 - 20:32 #14
jeg har nok misforstået spørgsmålet
Avatar billede riversen Nybegynder
08. maj 2003 - 20:32 #15
som jeg har forstået det skal tekst skrevet fra logError være rød...anden tekst kan fx være sort
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 20:35 #16
Ved en enkelt omskrivning gør min kode da også dette.
Avatar billede riversen Nybegynder
08. maj 2003 - 20:36 #17
ok, jeg kunne bare ikke få den til det
Avatar billede riversen Nybegynder
08. maj 2003 - 20:37 #18
jeg kaldte doColorCommand 2 gange
Avatar billede magoo20000 Nybegynder
08. maj 2003 - 20:55 #19
// Copyright MageLang Institute; Version $Id: //depot/main/src/edu/modules/Swing/magercises/TextPane/Solution/Formatter.java#2 $

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


public class Formatter extends JFrame {
    final static int WIDTH = 400;
    final static int HEIGHT = 300;
    StyledDocument doc;
    JTextPane pane;
    JLabel statusInfo;

    public Formatter( String lab ) {
        super( lab );

        // Get ContentPane
        Container c = getContentPane();

        // Setup Status Message Area
        statusInfo = new JLabel();
        c.add( statusInfo, BorderLayout.SOUTH );

        // Setup Text Pane
        doc = new DefaultStyledDocument();
        pane = new JTextPane( doc );

        // Place in JScrollPane
        JScrollPane sp = new JScrollPane( pane );
        c.add( sp, BorderLayout.CENTER );

        // Setup Menus
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar( menuBar );
        doColorCommand(new Color(150,150,150)); //indsæt nye farver her
    }

    public static void main( String args[] ) {
        Formatter frame = new Formatter( "Mini Text Editor" );

        frame.addWindowListener( new WindowAdapter() {
            public void windowClosing( WindowEvent e ) {
                System.exit( 0 );
            }
        } );
        frame.setSize( WIDTH, HEIGHT );
        frame.setVisible( true );
    }

    public void doColorCommand(Color color) {
            MutableAttributeSet attr = new SimpleAttributeSet();
            StyleConstants.setForeground( attr, color );
            pane.setCharacterAttributes( attr, false );
    }
}
Avatar billede lifo Nybegynder
08. maj 2003 - 21:05 #20
tak for jeres kommmentare 
jeg er ikke i stand til at tage en beslutinig i aften fordi jeg er pisse fuld lige nu  så i må vente i morgen men ellers tak
Avatar billede riversen Nybegynder
08. maj 2003 - 21:07 #21
magoo: har du icq ?
Avatar billede riversen Nybegynder
08. maj 2003 - 21:19 #22
nevermind
Avatar billede magoo20000 Nybegynder
09. maj 2003 - 09:16 #23
Ja: 106651381 - Rootcore
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