Dodanie funkcji "kopiuj" i "wklej" do istniejącego kodu edytora

0
public class Edytor extends JFrame implements ActionListener {
	private static final String Edytor = null;
	private JTextArea edytor = new JTextArea();
	private JScrollPane scroll = new JScrollPane(edytor);
	private JMenuBar menuBar = new JMenuBar();
	private JMenu Plik = new JMenu("Plik");
	private JMenu Edycja = new JMenu("Edycja");
	private JFrame frame = new JFrame("Edytor");
	private JMenuItem Otworz = new JMenuItem("Otworz");
	private JMenuItem ZapiszJako = new JMenuItem("Zapisz jako...");
	private JMenuItem Zakoncz = new JMenuItem("Zakoncz");
	private JMenuItem Wklej = new JMenuItem("Wklej");
	private JMenuItem Kopiuj = new JMenuItem("Kopiuj"); 
	private File plik;

	private void ZapiszJako() {
		String tekst;
		/**
		 * @param args
		 */
		JFileChooser fc = new JFileChooser();
		fc.showSaveDialog(null);
		tekst = edytor.getText();
		plik = fc.getSelectedFile();

		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(plik));
			bw.write(tekst);
			bw.flush();
			bw.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void Otworz() {
		JFileChooser fc = new JFileChooser();
		fc.showOpenDialog(null);
		String tekst = "";
		plik = fc.getSelectedFile();

		try {
			BufferedReader br = new BufferedReader(new FileReader(plik));
			String linia;

			do {
				linia = br.readLine();
				if (linia != null)
					tekst += linia + "\n";
			} while (linia != null);
			br.close();
			edytor.setText(tekst);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void Zakoncz() {
		System.exit(0);
	}

	public Edytor() {
		Container c = this.getContentPane();
		Container d = new Container();
		d.setLayout(new GridLayout());
		c.setLayout(new BorderLayout());
		c.add(d, BorderLayout.SOUTH);
		c.add(scroll, BorderLayout.CENTER);
		Otworz.addActionListener(this);
		ZapiszJako.addActionListener(this);
		Wklej.addActionListener(this);
		Kopiuj.addActionListener(this);
		Zakoncz.addActionListener(this);
		this.setSize(new Dimension(650, 650));
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setJMenuBar(menuBar);
		this.setTitle("Edytor tekstu");

		// tutaj problem zdjęcie programu jest ale po uruchomieniu programu nie
		// widać wtedy menu,trzeba rozszerzyć i zminimalizować okno wtedy działa
		// this.setIconImage(Toolkit.getDefaultToolkit().getImage(
		// getClass().getResource("word.png")));
		scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		menuBar.add(Plik);
		menuBar.add(Edycja);
		menuBar.add(Zakoncz);
		Plik.add(Otworz);
		Plik.add(ZapiszJako);
		Plik.add(Zakoncz);
		Edycja.add(Kopiuj);
		Edycja.add(Wklej);

		Otworz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
				ActionEvent.CTRL_MASK));
		ZapiszJako.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
				ActionEvent.CTRL_MASK));
        Kopiuj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
				ActionEvent.CTRL_MASK));
		Wklej.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
				ActionEvent.CTRL_MASK));
        Zakoncz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
				ActionEvent.CTRL_MASK));

	}

	public static void main(String[] args) {
		new Edytor();
	}

	@Override
	public void actionPerformed(ActionEvent a) {
		// TODO Auto-generated method stub

		if (a.getSource() == ZapiszJako)

			ZapiszJako();

		if (a.getSource() == Otworz)

			Otworz();

		if (a.getSource() == Zakoncz)

			Zakoncz();

	}
}

Pomoże ktoś zrobić,żeby była funkcja kopiuj wklej ?

0

A nie możesz po prostu użyć klasy Clipboard?

0

no właśnie nie bo prowadzący kazał tak zrobić program i nie wiem jak to zrobić ;/

0

ale z czym konkretnie masz problem? najprosciej jak sie da -

  1. dodaj pole typu String do przechowywania tekstu
  2. zapisuj do/odczytuj z pola w metodzie actionPerformed

jak pobrac zaznaczony tekst - http://stackoverflow.com/questions/15859289/how-to-make-selected-text-in-jtextarea-into-a-string dalej powinno byc z gorki :)

0

no a jak dodać pole typu string do przechowywania tekstu?

0

Po prostu tworzysz te pole i je dodajesz. Czego nie rozumiesz?

public class A extends JButton {
    private String stringField;
    public A() {
        super();
        this.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                stringField = "?";
            }
        });
    }
}
0
public class Edytor extends JFrame implements ActionListener {
	private static final String Edytor = null;
	private JTextArea edytor = new JTextArea();
	private JScrollPane scroll = new JScrollPane(edytor);
	private JMenuBar menuBar = new JMenuBar();
	private JMenu Plik = new JMenu("Plik");
	private JMenu Edycja = new JMenu("Edycja");
	private JFrame frame = new JFrame("Edytor");
	private JMenuItem Otworz = new JMenuItem("Otworz");
	private JMenuItem ZapiszJako = new JMenuItem("Zapisz jako...");
	private JMenuItem Zakoncz = new JMenuItem("Zakoncz");
	private JMenuItem Kopiuj = new JMenuItem("Kopiuj");
	private JMenuItem Wklej = new JMenuItem("Wklej");
	private String stringField;
	private String selectedtekst;
	private File plik;

	private void ZapiszJako() {
		String tekst;
		/**
		 * @param args
		 */
		JFileChooser fc = new JFileChooser();
		fc.showSaveDialog(null);
		tekst = edytor.getText();
		plik = fc.getSelectedFile();

		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(plik));
			bw.write(tekst);
			bw.flush();
			bw.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void Otworz() {
		JFileChooser fc = new JFileChooser();
		fc.showOpenDialog(null);
		String tekst = "";
		plik = fc.getSelectedFile();

		try {
			BufferedReader br = new BufferedReader(new FileReader(plik));
			String linia;

			do {
				linia = br.readLine();
				if (linia != null)
					tekst += linia + "\n";
			} while (linia != null);
			br.close();
			edytor.setText(tekst);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void Zakoncz() {
		System.exit(0);
	}

	private void Kopiuj() {
		 
	    stringField = "";  
		
	}

	private void Wklej() {
	
		 selectedtekst = a.getSelected();
		       
	}

	public Edytor() {
		Container c = this.getContentPane();
		Container d = new Container();
		d.setLayout(new GridLayout());
		c.setLayout(new BorderLayout());
		c.add(d, BorderLayout.SOUTH);
		c.add(scroll, BorderLayout.CENTER);
		Otworz.addActionListener(this);
		ZapiszJako.addActionListener(this);
		Wklej.addActionListener(this);
		Kopiuj.addActionListener(this);
		Zakoncz.addActionListener(this);
		this.setSize(new Dimension(650, 650));
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setJMenuBar(menuBar);
		this.setTitle("Edytor tekstu");

		// tutaj problem zdjęcie programu jest ale po uruchomieniu programu nie
		// widać wtedy menu,trzeba rozszerzyć i zminimalizować okno wtedy działa
		// this.setIconImage(Toolkit.getDefaultToolkit().getImage(
		// getClass().getResource("word1.png")));
		scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		menuBar.add(Plik);
		menuBar.add(Edycja);
		menuBar.add(Zakoncz);
		Plik.add(Otworz);
		Plik.add(ZapiszJako);
		Plik.add(Zakoncz);
		Edycja.add(Kopiuj);
		Edycja.add(Wklej);

		// skroty klawiszowe
		Otworz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
				ActionEvent.CTRL_MASK));
		ZapiszJako.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
				ActionEvent.CTRL_MASK));
		Kopiuj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
				ActionEvent.CTRL_MASK));
		Wklej.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
				ActionEvent.CTRL_MASK));
		Zakoncz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
				ActionEvent.CTRL_MASK));

	}

	public static void main(String[] args) {
		new Edytor();
	}

	@Override
	public void actionPerformed(ActionEvent a) {
		// TODO Auto-generated method stub

		if (a.getSource() == ZapiszJako)

			ZapiszJako();

		if (a.getSource() == Otworz)

			Otworz();

		if (a.getSource() == Zakoncz)

			Zakoncz();

		if (a.getSource() == Kopiuj)

			Kopiuj();

		if (a.getSource() == Wklej)

			Wklej();

	}
}

Teraz tak o zrobiłem i mi błąd wywala w funkcji wklej

0

?

0

Jeżeli funkcja Wklej ma zapamiętać zaznaczony tekst, to powinna wyglądać tak:

    private void Wklej() {
 
         selectedtekst = edytor.getSelectedText();
 
    }

(Nazwa funkcji sugeruje, że ma ona robić coś zupełnie innego.)

0
public class Edytor extends JFrame implements ActionListener {
	private static final String Edytor = null;
	private static final String e = null;
	private JTextArea edytor = new JTextArea();
	private JScrollPane scroll = new JScrollPane(edytor);
	private JMenuBar menuBar = new JMenuBar();
	private JMenu Plik = new JMenu("Plik");
	private JMenu Edycja = new JMenu("Edycja");
	private JFrame frame = new JFrame("Edytor");
	private JMenuItem Otworz = new JMenuItem("Otworz");
	private JMenuItem ZapiszJako = new JMenuItem("Zapisz jako...");
	private JMenuItem Zapisz = new JMenuItem("Zapisz");
	private JMenuItem Zakoncz = new JMenuItem("Zakoncz");
	private JMenuItem Kopiuj = new JMenuItem("Kopiuj");
	private JMenuItem Wklej = new JMenuItem("Wklej");
	private String stringField;
	private String selectedtekst;
	private File plik;

	private void ZapiszJako() {
		String tekst;
		/**
		 * @param args
		 */
		JFileChooser fc = new JFileChooser();
		fc.showSaveDialog(null);
		tekst = edytor.getText();
		plik = fc.getSelectedFile();

		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(plik));
			bw.write(tekst);
			bw.flush();
			bw.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private void Zapisz(){
	
	}
	
		
		  
	

	private void Otworz() {
		JFileChooser fc = new JFileChooser();
		fc.showOpenDialog(null);
		String tekst = "";
		plik = fc.getSelectedFile();

		try {
			BufferedReader br = new BufferedReader(new FileReader(plik));
			String linia;

			do {
				linia = br.readLine();
				if (linia != null)
					tekst += linia + "\n";
			} while (linia != null);
			br.close();
			edytor.setText(tekst);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void Zakoncz() {
		System.exit(0);
	}

	private void Kopiuj() {
		 
		 stringField = "";
	}

	private void Wklej() {
	
		  selectedtekst = edytor.getSelectedText();
		  
	}	
	
	


	public Edytor() {
		Container c = this.getContentPane();
		Container d = new Container();
		d.setLayout(new GridLayout());
		c.setLayout(new BorderLayout());
		c.add(d, BorderLayout.SOUTH);
		c.add(scroll, BorderLayout.CENTER);
		Otworz.addActionListener(this);
		Zapisz.addActionListener(this);
		ZapiszJako.addActionListener(this);
		Wklej.addActionListener(this);
		Kopiuj.addActionListener(this);
		Zakoncz.addActionListener(this);
		this.setSize(new Dimension(650, 650));
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setJMenuBar(menuBar);
		this.setTitle("Edytor tekstu");

		// tutaj problem zdjęcie programu jest ale po uruchomieniu programu nie
		// widać wtedy menu,trzeba rozszerzyć i zminimalizować okno wtedy działa
		// this.setIconImage(Toolkit.getDefaultToolkit().getImage(
		// getClass().getResource("word1.png")));
		scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		menuBar.add(Plik);
		menuBar.add(Edycja);
		menuBar.add(Zakoncz);
		Plik.add(Otworz);
		Plik.add(Zapisz);
		Plik.add(ZapiszJako);
		Plik.add(Zakoncz);
		Edycja.add(Kopiuj);
		Edycja.add(Wklej);

		// skroty klawiszowe
		Otworz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
				ActionEvent.CTRL_MASK));
		ZapiszJako.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
				ActionEvent.CTRL_MASK));
		Kopiuj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
				ActionEvent.CTRL_MASK));
		Wklej.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
				ActionEvent.CTRL_MASK));
		Zakoncz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
				ActionEvent.CTRL_MASK));

	}

	public static void main(String[] args) {
		new Edytor();
	}

	@Override
	public void actionPerformed(ActionEvent a) {
		// TODO Auto-generated method stub

		if (a.getSource() == ZapiszJako)

			ZapiszJako();
		
		if (a.getSource()==Zapisz)
			
			Zapisz();

		if (a.getSource() == Otworz)

			Otworz();

		if (a.getSource() == Zakoncz)

			Zakoncz();

		if (a.getSource() == Kopiuj)

			Kopiuj();

		if (a.getSource() == Wklej)

			Wklej();
 

Zrobiłem to i nadal nie działa błędów już nie ma ale nic się nie robi ;/

0

A nie możesz tak:

    private void Kopiuj() {
 
         edytor.copy();
    }
 
    private void Wklej() {
 
          edytor.paste();
 
    }
0

no działa działa tak :) tylko ja potrzebuję z użyciem "schowka" ;/

0

A co to jest "schowek"? Coś innego niż schowek? Bo mój kod używa schowka (bez cudzysłowu).
Możesz się umartwiać i pisać taki kod

    private void Kopiuj() {
         selectedtekst = edytor.getSelectedText();
    }
 
    private void Wklej() {
       	 int index = edytor.getCaretPosition();
       	 edytor.insert(selectedtekst,index);
       	 edytor.setCaretPosition(index);
    }

Ale wtedy wybranie Wklej z menu może wkleić coś innego niż Ctrl+V.

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