Avatar billede thums Praktikant
05. august 2003 - 20:47 Der er 8 kommentarer og
1 løsning

Hævet og Sænket tekst

Jeg har et JTextArea.
Jeg har en Menu der giver mig mulighed for at sætte tekst i JTextArea'et kursiv, fed og understreget, men er der nogen der kan hjælpe mig med at finde ud af hvordan man hæver og sænker teksten?? hævet ligesom i matematiske potenser, og sænket som i kemiske formler....

Mange point fordi at det er vigtigt for mig... Alle foreslag bliver prøvet og accepteret/afvist indenfor 24 timer...

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

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);
    }
   
    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",
                                };
       
        SimpleAttributeSet[] atts = new SimpleAttributeSet[4];
       
        atts[0] = new SimpleAttributeSet();
        StyleConstants.setFontFamily(atts[0], "SansSerif");
        StyleConstants.setFontSize(atts[0], 16);
       
        atts[1] = new SimpleAttributeSet();
        StyleConstants.setBold(atts[1], true);
       
        atts[2] = new SimpleAttributeSet();
        StyleConstants.setItalic(atts[2], true);
       
        atts[3] = new SimpleAttributeSet();
        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"));
       
        Action action = new StyledEditorKit.BoldAction();
      action.putValue(Action.NAME, "Fed");
      editMenu.add(action);

        action = new StyledEditorKit.ItalicAction();
        action.putValue(Action.NAME, "Kursiv");
        editMenu.add(action);
       
        action = new StyledEditorKit.UnderlineAction();
        action.putValue(Action.NAME, "Understregning");
        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));
       
        return menu;
    }
   
    public static void main(String[] args) {
      new TestFrame().show();
  }
}
Avatar billede riversen Nybegynder
05. august 2003 - 20:55 #1
du har en JTextPane...;-)
Avatar billede Slettet bruger
06. august 2003 - 03:01 #2
Se på nedenstående tilføjelser. Du kan lave din egen superscript/subscript styles.

import javax.swing.*;
import javax.swing.text.*;
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;

    private Hashtable attributes;
   
    public TestFrame() {
       
        super("Test");
        setSize(400,400);
       
        getContentPane().add(new JScrollPane(createTextPane()), BorderLayout.CENTER);
        setJMenuBar(createMenu());   
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
   
    private JTextPane createTextPane() {
        pane = new JTextPane(document = createDocument()); 
        return pane;
    }
   
    private DefaultStyledDocument createDocument() {
    StyleContext sc = new StyleContext();
        document = new DefaultStyledDocument(sc);
    createStyle(sc);
       
        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",
    };
       
        SimpleAttributeSet[] atts = new SimpleAttributeSet[4];
       
        atts[0] = new SimpleAttributeSet();
        StyleConstants.setFontFamily(atts[0], "SansSerif");
        StyleConstants.setFontSize(atts[0], 16);
       
        atts[1] = new SimpleAttributeSet();
        StyleConstants.setBold(atts[1], true);
       
        atts[2] = new SimpleAttributeSet();
        StyleConstants.setItalic(atts[2], true);
       
        atts[3] = new SimpleAttributeSet();
        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"));
       
        Action action = new StyledEditorKit.BoldAction();
      action.putValue(Action.NAME, "Fed");
      editMenu.add(action);

        action = new StyledEditorKit.ItalicAction();
        action.putValue(Action.NAME, "Kursiv");
        editMenu.add(action);
       
        action = new StyledEditorKit.UnderlineAction();
        action.putValue(Action.NAME, "Understregning");
        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));
   
    editMenu.addSeparator();
    for (Enumeration e = attributes.keys(); e.hasMoreElements(); ) {
        editMenu.add(new AbstractAction(e.nextElement().toString()) {
            public void actionPerformed(ActionEvent event) {
            try {
                Style s = (Style) attributes.get(event.getActionCommand());
                document.insertString(pane.getCaret().getDot(), " ", s);
                pane.grabFocus();
            } catch (Exception e) {
                e.printStackTrace();
            }
            }
        });
    }
       
        return menu;
    }       

    public void createStyle(StyleContext sc) {
    Style tmp;
    attributes = new Hashtable();
   
    //superscript
    tmp = sc.addStyle(null, null);
    StyleConstants.setSuperscript(tmp, true);
    attributes.put("superscript", tmp);
   
    //subscript
    tmp = sc.addStyle(null, null);
    StyleConstants.setSubscript(tmp, true);
    attributes.put("subscript", tmp);

    //normal
    tmp = sc.addStyle(null, null);   
    attributes.put("normal", tmp);
    }
 

    public static void main(String[] args) {
      new TestFrame().show();
  }
}
Avatar billede thums Praktikant
06. august 2003 - 07:15 #3
Sorry riversen.... sådan går det når man er træt og har for meget Copy/paste kode i sit rode arkiv... :)

jjust: Jeg tjekker det lige ud når jeg kommer hjem... så her klokken 16:00... hvis det virker.. er pointene dine...
Avatar billede thums Praktikant
06. august 2003 - 20:44 #4
Det ser rigtigt ud.. desværre har jeg ikke fået det testet da det ikke var færdig kode du sendte til mig...

Håber dog at du er villig til at hjælpe lidt mere hvis nødvendigt....

Som lovet.. her er dine point.. :)
Avatar billede Slettet bruger
06. august 2003 - 21:17 #5
Det skulle da gerne compile og køre?

Men bare sprøg hvis der er noget!
Avatar billede thums Praktikant
07. august 2003 - 07:56 #6
Det compiler også og køre ja. men hvor er forbindelsen fra gui'en til den metode du har lavet?? Jeg skal lige have den tilføjet til menu'en såådan at jeg kan teste at metoderne gør det de skal.. :) men skal lige have læst op på hvad sttylecontext så kræver at der skal være med.... opm det bare er en New.. eller hvad det er.. :)
Avatar billede Slettet bruger
07. august 2003 - 11:40 #7
Den er da tilføjet til menuen? De 3 nederste indgange i rediger hedder superscript, subscript og normal. Dem kan du vælge til at se at det har den ønskede effekt. Indrømmet det er ikke pænt, men jeg lavede også bare noget der "virkede".
Avatar billede thums Praktikant
07. august 2003 - 12:59 #8
Okay... kan godt ske jeg ikke så ordentligt efter... kigger lige når jeg kommer hjem.. behøver heller ikke være smukt.. bare noget jeg sidder og pusler med... kan sku altid strammme det lidt op når at det bliver alvorligt. .:)
Avatar billede thums Praktikant
08. august 2003 - 08:18 #9
Hmm.... det virker ikke så fedt igen.... den indsætter mellemrum hver gang man skifter imellem hver slags.... man kan ikke markere et stykke tekst og få det hævet eller sænket i forhold til resten i linien..:/
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