Edytor tekstowy

0

Witam.
Piszę w javie Edytor tekstowy na zadanko. i mam kilka pytan. mianowicie :)...
Czy jesli tworze pasek narzędzi jak np w wordzie: nowy, otworz, zapisz, wytnij, kopiuj itp ... to musze tworzyc kazdy "button" osobno i np nakladac na niego obrazek ? (jak tak to skad wziac takie obrazki :) ), czy jest gotowy pasek narzedzi dostepny w javie? np tak jak w vc# .... pytanie 2. CO bedzie lepsze jako pole tekstowe? TextArea? JEditorPAne ? czy jeszcze cos innego ? Szukam czegos podobnego do richtextbox w VC#... w tym mozna bylo uzyc wiele opcji, zmienic czcionke zaznaczonego tekstu itp .... i jak moge zmienic wyglą czcionki ... czy da rade otworzyc cos takiego jak w vc# FontDialog ?..

I jak obsluzyc np skroty klawiszowe ? bo na jeden klawisz znalazlem ale nie wiem jak na dwa, np kopiuj to ctrl+c itd ... :)

Dziekuje za wszelka pomoc :

pozdrawiam

0

Cześć. sam nigdy nie pisałem edytora tekstu, ale mysle, że dobrym wyborem będzie JEditorPane (tu masz dokumentacje: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JEditorPane.html). Jeśli chodzi o menu osobiście robiłbym je na buttonach i JMenuBar.

Pozdrawiam.

PS: Sorry, JToolBar :)

0

A jak obsluzyc skroty klawiszowe na 2 klawisze? ctrl + c np... albo inne.

jak zapisac test sformatowany zeby zachowal swoje sformatowanie ? :)

0

tu sa dwa fajne przyklady z Java 2 podstawy w ktorych znajdziesz skroty klawiszowe i zastosowanie paska narzedzi, chyba o to chodzilo:) pozdrawiam

// przyklad pierwszy odnosnie paska narzedzi
import java.awt.;
import java.awt.event.
;
import java.beans.;
import javax.swing.
;

public class ToolBarTest
{
public static void main(String[] args)
{
ToolBarFrame frame = new ToolBarFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();

}
}

/**
A frame with a toolbar and menu for color changes.
*/
class ToolBarFrame extends JFrame
{
public ToolBarFrame()
{
setTitle("ToolBarTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

  // add a panel for color change

  Container contentPane = getContentPane();
  panel = new JPanel();
  contentPane.add(panel, BorderLayout.CENTER);

  // set up actions

  Action blueAction = new ColorAction("Blue",
     new ImageIcon("blue-ball.gif"), Color.BLUE);
  Action yellowAction = new ColorAction("Yellow",
     new ImageIcon("yellow-ball.gif"), Color.YELLOW);
  Action redAction = new ColorAction("Red",
     new ImageIcon("red-ball.gif"), Color.RED);

  Action exitAction = new 
     AbstractAction("Exit", new ImageIcon("exit.gif"))
     {  
        public void actionPerformed(ActionEvent event)
        {  
           System.exit(0);
        }
     };
  exitAction.putValue(Action.SHORT_DESCRIPTION, "Exit");

  // populate tool bar

  JToolBar bar = new JToolBar();
  bar.add(blueAction);
  bar.add(yellowAction);
  bar.add(redAction);
  bar.addSeparator();
  bar.add(exitAction);
  contentPane.add(bar, BorderLayout.NORTH);

  // populate menu

  JMenu menu = new JMenu("Color");
  menu.add(yellowAction);
  menu.add(blueAction);
  menu.add(redAction);
  menu.add(exitAction);
  JMenuBar menuBar = new JMenuBar();
  menuBar.add(menu);
  setJMenuBar(menuBar);

}

public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;

private JPanel panel;

/**
The color action sets the background of the frame to a
given color.
*/
class ColorAction extends AbstractAction
{
public ColorAction(String name, Icon icon, Color c)
{
putValue(Action.NAME, name);
putValue(Action.SMALL_ICON, icon);
putValue(Action.SHORT_DESCRIPTION,
name + " background");
putValue("Color", c);
}

  public void actionPerformed(ActionEvent evt)
  {  
     Color c = (Color)getValue("Color");
     panel.setBackground(c);
  }

}
}

//przyklad drugi odnosnie skrotow klawiszowych i menu

/**
@version 1.21 2002-07-10
@Author Cay Horstmann
*/

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

public class MenuTest
{
public static void main(String[] args)
{
MenuFrame frame = new MenuFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}

/**
A frame with a sample menu bar.
*/
class MenuFrame extends JFrame
{
public MenuFrame()
{
setTitle("MenuTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

  JMenu fileMenu = new JMenu("File");
  JMenuItem newItem = fileMenu.add(new TestAction("New"));

  // demonstrate accelerators

  JMenuItem openItem = fileMenu.add(new TestAction("Open"));
  openItem.setAccelerator(KeyStroke.getKeyStroke(
     KeyEvent.VK_O, InputEvent.CTRL_MASK));

  fileMenu.addSeparator();
  
  saveAction = new TestAction("Save");
  JMenuItem saveItem = fileMenu.add(saveAction);
  saveItem.setAccelerator(KeyStroke.getKeyStroke(
     KeyEvent.VK_S, InputEvent.CTRL_MASK));

  saveAsAction = new TestAction("Save As");
  JMenuItem saveAsItem = fileMenu.add(saveAsAction);
  fileMenu.addSeparator();

  fileMenu.add(new 
     AbstractAction("Exit")
     {
        public void actionPerformed(ActionEvent event)
        {
           System.exit(0);
        }
     });

  // demonstrate check box and radio button menus

  readonlyItem = new JCheckBoxMenuItem("Read-only");
  readonlyItem.addActionListener(new
     ActionListener()
     {
        public void actionPerformed(ActionEvent event)
        {
           boolean saveOk = !readonlyItem.isSelected();
           saveAction.setEnabled(saveOk);
           saveAsAction.setEnabled(saveOk);               
        }
     });

  ButtonGroup group = new ButtonGroup();

  JRadioButtonMenuItem insertItem
     = new JRadioButtonMenuItem("Insert");
  insertItem.setSelected(true);
  JRadioButtonMenuItem overtypeItem
     = new JRadioButtonMenuItem("Overtype");

  group.add(insertItem);
  group.add(overtypeItem);

  // demonstrate icons

  Action cutAction = new TestAction("Cut"); 
  cutAction.putValue(Action.SMALL_ICON, 
     new ImageIcon("cut.gif"));
  Action copyAction = new TestAction("Copy");
  copyAction.putValue(Action.SMALL_ICON, 
     new ImageIcon("copy.gif"));
  Action pasteAction = new TestAction("Paste");
  pasteAction.putValue(Action.SMALL_ICON, 
     new ImageIcon("paste.gif"));

  JMenu editMenu = new JMenu("Edit");
  editMenu.add(cutAction);
  editMenu.add(copyAction);
  editMenu.add(pasteAction);

  // demonstrate nested menus

  JMenu optionMenu = new JMenu("Options");

  optionMenu.add(readonlyItem);
  optionMenu.addSeparator();
  optionMenu.add(insertItem);
  optionMenu.add(overtypeItem);

  editMenu.addSeparator();
  editMenu.add(optionMenu);

  // demonstrate mnemonics

  JMenu helpMenu = new JMenu("Help");
  helpMenu.setMnemonic('H');

  JMenuItem indexItem = new JMenuItem("Index");
  indexItem.setMnemonic('I');
  helpMenu.add(indexItem);

  // you can also add the mnemonic key to an action
  Action aboutAction = new TestAction("About");
  aboutAction.putValue(Action.MNEMONIC_KEY, 
     new Integer('A'));
  helpMenu.add(aboutAction);

  // add all top-level menus to menu bar

  JMenuBar menuBar = new JMenuBar();
  setJMenuBar(menuBar);

  menuBar.add(fileMenu);
  menuBar.add(editMenu);
  menuBar.add(helpMenu);

  // demonstrate pop-ups

  popup = new JPopupMenu();
  popup.add(cutAction);
  popup.add(copyAction);
  popup.add(pasteAction);

  getContentPane().addMouseListener(new 
     MouseAdapter()
     {  
        public void mousePressed(MouseEvent event)
        {  
           if (event.isPopupTrigger())
              popup.show(event.getComponent(),
                 event.getX(), event.getY());
        }

        public void mouseReleased(MouseEvent event)
        {  
           if (event.isPopupTrigger())
              popup.show(event.getComponent(),
                 event.getX(), event.getY());
        }
     });

}

public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;

private Action saveAction;
private Action saveAsAction;
private JCheckBoxMenuItem readonlyItem;
private JPopupMenu popup;
}

/**
A sample action that prints the action name to System.out
*/
class TestAction extends AbstractAction
{
public TestAction(String name) { super(name); }

public void actionPerformed(ActionEvent event)
{
System.out.println(getValue(Action.NAME)
+ " selected.");
}
}

0

ja rowniez kombinuje, zeby zrobic jakis edytor tekstowy i mam pytanie, co zmienic w ponizszym kodzie, aby zmieniala sie czcionka tylko zaznaczonego tekstu. bo na razie zmienia sie caly tekst jaki jest w w polu tekstowym. kombinowolem troche ale niewychodzi. z gory dzikei za pomoc

label = new JTextArea(
"Tralalala.");
label.setFont(new Font("Serif", Font.PLAIN,
DEFAULT_SIZE));
contentPane.add(label, BorderLayout.CENTER);

  // make a combo box and add face names

  faceCombo = new JComboBox();
  faceCombo.setEditable(true);
  faceCombo.addItem("Serif");
  faceCombo.addItem("SansSerif");
  faceCombo.addItem("Monospaced");
  faceCombo.addItem("Dialog");
  faceCombo.addItem("DialogInput");

  // the combo box listener changes the label font to the
  // selected face name

  faceCombo.addActionListener(new
     ActionListener()
     {
        public void actionPerformed(ActionEvent event)
        {
           label.setFont(new Font(
              (String)faceCombo.getSelectedItem(), 
              Font.PLAIN, 
              DEFAULT_SIZE));         
        }
     });
0

Czemu nie moge dodac do swojego programu tego :

import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.rtf.RtfWriter2;

w ogóle eclipse ani jcreator nie widzi mi tych bibliotek. co musze zrobic ?

chcialem obsluzyc zapis do RTF zeby zachowac formatowanie. jest jakis sposob zeby to uzyc albo uzyc cos innego co dziala ? :) i zapisuje sformatowany tekst....</quote>

0
kolanko napisał(a)

w ogóle eclipse ani jcreator nie widzi mi tych bibliotek. co musze zrobic ?

Posiadasz te pakiety?

0

Znalazlem juz inna metode zapisu ale bez dialogu. moze mi ktos dac namiar na zapis z okienkiem dialogowym ? bo nigdzie nie moge tego wyszukac:) szukalem na java sun i java2 .. moze cos zle wpisuje :) W ksiazce tez tego nie moge znaleźć ... nie wiem pod jakim haslem szukac... zapis z dialogiem + filtry :)

0

Kiepsko szukałeś

//definicja pola w klasie
private JFileChooser fc=new JFileChooser(".");
//ustawienie filtru
        fc.setFileFilter(new javax.swing.filechooser.FileFilter()
        {
            public boolean accept(File f)
            {
                String name=f.getName().toLowerCase();
                return name.endsWith(".gif") || name.endsWith(".jpg") || name.endsWith(".jpeg")
                       || name.endsWith(".png") || f.isDirectory();
            }
            public String getDescription()
            {
                return "Pliki graficzne";
            }
        });
        fc.setMultiSelectionEnabled(false);
//dialog
            if(fc.showSaveDialog(this)==JFileChooser.APPROVE_OPTION)
            {
                //zapis
            }
0

No i kolejna niespodzianka ....
Nie moge zrobic zapisu :/

import java.awt.BorderLayout;
import java.awt.Color;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.rtf.RTFEditorKit;

public class RTFView extends JFrame {
  public RTFView() {
    setTitle("RTF Text Application");
    setSize(400, 240);
    setBackground(Color.gray);
    getContentPane().setLayout(new BorderLayout());

    JPanel topPanel = new JPanel();
    topPanel.setLayout(new BorderLayout());
    getContentPane().add(topPanel, BorderLayout.CENTER);

    // Create an RTF editor window
    RTFEditorKit rtf = new RTFEditorKit();
    JEditorPane editor = new JEditorPane();
    editor.setEditorKit(rtf);
    editor.setBackground(Color.white);

    // This text could be big so add a scroll pane
    JScrollPane scroller = new JScrollPane();
    scroller.getViewport().add(editor);
    topPanel.add(scroller, BorderLayout.CENTER);

    // Load an RTF file into the editor
    try {
      FileInputStream fi = new FileInputStream("test.rtf");
      rtf.read(fi, editor.getDocument(), 0);
    } catch (FileNotFoundException e) {
      System.out.println("File not found");
    } catch (IOException e) {
      System.out.println("I/O error");
    } catch (BadLocationException e) {
    }
  }

  public static void main(String args[]) {
    // Create an instance of the test application
    RTFView mainFrame = new RTFView();
    mainFrame.setVisible(true);
  }
}

tutaj mam odczyt. zapis robie analogicznie i mi nie chodzi :/

Zmieniam to :
FileInputStream fi = new FileInputStream("test.rtf");
rtf.read(fi, editor.getDocument(), 0);

NA

FileOutputStream fo=new FileOutputStream("test1.rtf");
rtf.write(fo, editor.getDocument(), 0);

Moze mi ktos powiedziec czego mi tu brakuje ? :) bo sie nie moge doszukac nigdzie zapisu RTF ;/

1 użytkowników online, w tym zalogowanych: 0, gości: 1