2013-01-01 29 views
8

可能重複:
What components should I use for building a Java WYSIWYG HTML editor的Java Swing文本編輯器

我在Java編程總新手。我必須在Swing/AWT中進行文本編輯,並且我有一個關於它的問題。如何編輯一個選定的單詞,例如更改其顏色?我應該使用哪個組件和哪些功能?

+2

看看這個教程:http://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html – aly

+0

參見[*所見即所得文本在Java編輯器*](http://stackoverflow.com/q/853071/230513)。 – trashgod

+0

AWT不提供任何支持格式化文本的組件,所以這可能被認爲是「Swing」。 –

回答

10

對於一個初學者的Java Swing,儘量保持這個項目的簡單。要在同一文檔中顯示多種顏色和多種尺寸,需要大量複雜的編碼和呈現html。

嘗試只是提供基本的複製,剪切,粘貼功能,因爲它們更容易實現。

爲了提供這些功能,一個JTextArea是足夠的。

試試這個。這是一個非常簡單的文本編輯器

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

public class Document extends JFrame implements ActionListener 
{ 
private JTextArea ta; 
private int count; 
private JMenuBar menuBar; 
private JMenu fileM,editM,viewM; 
private JScrollPane scpane; 
private JMenuItem exitI,cutI,copyI,pasteI,selectI,saveI,loadI,statusI; 
private String pad; 
private JToolBar toolBar; 
public Document() 
{ 
    super("Document"); 
    setSize(600, 600); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    Container pane = getContentPane(); 
    pane.setLayout(new BorderLayout()); 

    count = 0; 
    pad = " "; 
    ta = new JTextArea(); //textarea 
    menuBar = new JMenuBar(); //menubar 
    fileM = new JMenu("File"); //file menu 
    editM = new JMenu("Edit"); //edit menu 
    viewM = new JMenu("View"); //edit menu 
    scpane = new JScrollPane(ta); //scrollpane and add textarea to scrollpane 
    exitI = new JMenuItem("Exit"); 
    cutI = new JMenuItem("Cut"); 
    copyI = new JMenuItem("Copy"); 
    pasteI = new JMenuItem("Paste"); 
    selectI = new JMenuItem("Select All"); //menuitems 
    saveI = new JMenuItem("Save"); //menuitems 
    loadI = new JMenuItem("Load"); //menuitems 
    statusI = new JMenuItem("Status"); //menuitems 
    toolBar = new JToolBar(); 

    ta.setLineWrap(true); 
    ta.setWrapStyleWord(true); 

    setJMenuBar(menuBar); 
    menuBar.add(fileM); 
    menuBar.add(editM); 
    menuBar.add(viewM); 

    fileM.add(saveI); 
    fileM.add(loadI); 
    fileM.add(exitI); 

    editM.add(cutI); 
    editM.add(copyI); 
    editM.add(pasteI);   
    editM.add(selectI); 

    viewM.add(statusI); 

    saveI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)); 
    loadI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, ActionEvent.CTRL_MASK)); 
    cutI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK)); 
    copyI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); 
    pasteI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK)); 
    selectI.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK)); 

    pane.add(scpane,BorderLayout.CENTER); 
    pane.add(toolBar,BorderLayout.SOUTH); 

    saveI.addActionListener(this); 
    loadI.addActionListener(this); 
    exitI.addActionListener(this); 
    cutI.addActionListener(this); 
    copyI.addActionListener(this); 
    pasteI.addActionListener(this); 
    selectI.addActionListener(this); 
    statusI.addActionListener(this); 

    setVisible(true); 
} 
public void actionPerformed(ActionEvent e) 
{ 
    JMenuItem choice = (JMenuItem) e.getSource(); 
    if (choice == saveI) 
    { 
     //not yet implmented 
    } 
    else if (choice == exitI) 
     System.exit(0); 
    else if (choice == cutI) 
    { 
     pad = ta.getSelectedText(); 
     ta.replaceRange("", ta.getSelectionStart(), ta.getSelectionEnd()); 
    } 
    else if (choice == copyI) 
     pad = ta.getSelectedText(); 
    else if (choice == pasteI) 
     ta.insert(pad, ta.getCaretPosition()); 
    else if (choice == selectI) 
     ta.selectAll(); 
    else if (e.getSource() == statusI) 
    { 
     //not yet implmented 
    } 
} 
public static void main(String[] args) 
{ 
    new Document(); 
}