Jak wykonać konwersję z char na String? Program szyfrujący.

0

Witam wszystkich serdecznie,

na wstępie zaznaczę, że jest to mój pierwszy post na tym forum. Oraz są to moje początki z językiem Java. Na zaliczenie laborek dostałem do napisania program szyfrujący dany tekst, tak więc aby nie utrudniać sobie życia zdecydowałem się na metodę "przestawieniową". Po wykonaniu okienka i wszystkich prostych elementów zaczęły się schody. Mianowicie, moim największym problemem jest w tej chwili wyświetlenie zakodowanego tekstu w JTextField. Wykonując to metodą setText(); otrzymuję jedynie ostatnią literę z ciągu znaków. Przy czym wyświetlając zakodowany tekst poprzez System.out.print(yWynik); w konsoli pojawia mi się całość. Brakuje mi już pomysłów i doświadczenia jak rozwiązać ten problem, niestety wujek google również nie potrafi mi pomóc.

Będę wdzięczny za podpowiedzi i skromną krytykę za mój kod :) tak jak pisałem to początki.
Aby nie szukać fragment z ActionEvent a poniżej pełny kod.

	public void actionPerformed(ActionEvent e) {
		
		
		
		xKoduj = jtKoduj.getText();								//pobieranie tekstu do kodowania
		xOdkoduj = jtKoduj.getText();							//pobieranie tekstu do odkodowania
		
		Object zrodlo = e.getSource();							//PRZYCISK kodowanie 
		if (zrodlo==bKoduj)
		{	

		for(int i=0;i<xKoduj.length();i++){
			yWynik=(char)(xKoduj.charAt(i)+ 1);		
//			System.out.print(yWynik);
			tWyswietl.setText(String.valueOf(yWynik));
			}
		}
		else if (zrodlo==bOdkoduj)								//PRZYCISK odkodowanie	
		{
		for(int i=0;i<xOdkoduj.length();i++)
			{
			yWynik=(char)(xKoduj.charAt(i)- 1);			
//			System.out.print(yWynik);
			tWyswietl.setText(String.valueOf(yWynik));
			}
		}



Pełny kod.


import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.management.monitor.StringMonitorMBean;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextField;


public class Kodowanie extends JFrame implements ActionListener {

	
	JButton bKoduj, bOdkoduj, bUstawienia, bExit;
	JLabel tOpis;
	JLabel tOpis2;
	JTextField jtKoduj, tWyswietl;
	JMenuBar menuBar;
	JMenu menuPlik, menuAbout;
	JMenuItem mUstawienia, mZamknij, mOProgramie;
	
	String xKoduj;
	String xOdkoduj;
	char temp;
	char yWynik;
	int local_wartosc;
	
	Kodowanie_Ustawienia wartosc = new Kodowanie_Ustawienia ();
	
	
		

	public Kodowanie (){
		
		setSize(415,500);
		setTitle("Kodowanie");
		setLayout(null);
		
		menuBar = new JMenuBar();
		menuPlik = new JMenu("Plik");
		
		mUstawienia = new JMenuItem("Ustawienia");
		mZamknij = new JMenuItem("Zamknij");
		menuPlik.add(mUstawienia);
		menuPlik.addSeparator();
		menuPlik.add(mZamknij);
		
		mZamknij.addActionListener(this);
		mUstawienia.addActionListener(this);
		
		
		menuAbout = new JMenu("About");
		mOProgramie = new JMenuItem("O Programie");
		menuAbout.add(mOProgramie);
		
		mOProgramie.addActionListener(this); 
		
		setJMenuBar(menuBar);
		menuBar.add(menuPlik);
		menuBar.add(menuAbout);
		
		
		
		bKoduj = new JButton("Zakoduj");
		bKoduj.setBounds(50, 150, 100, 25);
		add(bKoduj);
		bKoduj.addActionListener(this);
		
		bOdkoduj = new JButton("Odkoduj");
		bOdkoduj.setBounds(250, 150, 100, 25);
		add(bOdkoduj);
		bOdkoduj.addActionListener(this);
		
		bUstawienia = new JButton("Ustawienia");
		bUstawienia.setBounds(50, 390, 100, 25);
		add(bUstawienia);
		bUstawienia.addActionListener(this);
		
		bExit = new JButton("Exit");
		bExit.setBounds(250, 390, 100, 25);
		add(bExit);
		bExit.addActionListener(this);
		
		tOpis = new JLabel("Po Zakodowaniu: "+"\n");
		tOpis.setBounds(50, 265, 100, 25);
		add(tOpis);
		
		tOpis2 = new JLabel("Wprowadz tekst do zakodowania: "+"\n");
		tOpis2.setBounds(50, 60, 250, 25);
		add(tOpis2);
				
		tWyswietl = new JTextField();
		tWyswietl.setBounds(50, 300, 300, 25);
		tWyswietl.setForeground(Color.BLUE);
		add(tWyswietl);
		tWyswietl.addActionListener(this);
		
		jtKoduj = new JTextField();
		jtKoduj.setBounds(50, 100, 300, 25);
		add(jtKoduj);
		jtKoduj.addActionListener(this);

		
	}
		
	
	public static void main (String[] args)
	{
		Kodowanie kod = new Kodowanie();
		kod.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		kod.setVisible(true);		
		
	}



	@Override
	public void actionPerformed(ActionEvent e) {
		
		
		
		xKoduj = jtKoduj.getText();								//pobieranie tekstu do kodowania
		xOdkoduj = jtKoduj.getText();							//pobieranie tekstu do odkodowania
		
		Object zrodlo = e.getSource();							//PRZYCISK kodowanie 
		if (zrodlo==bKoduj)
		{	

		for(int i=0;i<xKoduj.length();i++){
			yWynik=(char)(xKoduj.charAt(i)+ 1);		
//			System.out.print(yWynik);
			tWyswietl.setText(String.valueOf(yWynik));
			}
		}
		else if (zrodlo==bOdkoduj)								//PRZYCISK odkodowanie	
		{
		for(int i=0;i<xOdkoduj.length();i++)
			{
			yWynik=(char)(xKoduj.charAt(i)- 1);			
//			System.out.print(yWynik);
			tWyswietl.setText(String.valueOf(yWynik));
			}
		}			
		tWyswietl.setText(String.valueOf(yWynik));
		Object zrodlo2 = e.getSource();
		if (zrodlo2 == bExit)
		{
			dispose();	
		}
		else if (zrodlo2 == bUstawienia)						//PRZYCISK otwieranie okna ustawien
		{
	        Kodowanie_Ustawienia Kodowanie_Ustawienia = new Kodowanie_Ustawienia();
	        Kodowanie_Ustawienia.setVisible(true);   
		}
		Object zrodlo3 = e.getSource();
		if (zrodlo3 == jtKoduj)									//POLE TEKSTOWE tekst do zakodowania/odkodowania
		{
		}
		else if (zrodlo3 == tWyswietl)
		{	
		}
		Object zrodlo4 = e.getSource();
		if (zrodlo4 == mZamknij)								//Menu -> Zamknij
		{
		dispose();	
		}
		else if (zrodlo4 == mUstawienia)						//Menu -> Ustawienia
		{
	    Kodowanie_Ustawienia Kodowanie_Ustawienia = new Kodowanie_Ustawienia();
	    Kodowanie_Ustawienia.setVisible(true);
		}		
		Object zrodlo5 = e.getSource();
		if (zrodlo5 == mOProgramie)								//Menu -> O Programie
		{
		About About = new About();
		About.setVisible(true);
		}
				
	}

}
0

Na konsoli używasz metody print, która dopisuje znak. W polu tekstowym używasz metody setText, która zastępuje dotychczasowy tekst.

        for(int i=0;i<xKoduj.length();i++){
            yWynik=(char)(xKoduj.charAt(i)+ 1);     
//          System.out.print(yWynik);
            tWyswietl.setText(tWyswietl.getText() + String.valueOf(yWynik));
            }
0

To bardzo dużo wyjaśnia, w jaki sposób mogę zgromadzić wszystkie znaki i później je wyświetlić w JTextField? Istnieje na to jakaś metoda?

1
        String wynik = "";  
        for(int i=0;i<xKoduj.length();i++){
            yWynik=(char)(xKoduj.charAt(i)+ 1);     
            wynik+=yWynik;             
            }
        tWyswietl.setText(wynik);
0

Dziękuję za pomoc,po zastosowaniu Twoich podpowiedzi jest taki sam efekt. Czy nie ma znaczenia to, że yWynik jest Charem a setText wyświetlam String ?

0

Efekt na pewno nie jest taki sam. Źle przepisałeś kod.

0

Spójrz proszę bo nie widzę różnicy, jedynie kiedy wyświetlę System.out.print(wynik); to wyświetla mi tekst ze zmiennej wynik tak jakby każdy znak x 2.

	public void actionPerformed(ActionEvent e) {
		
		
		
		xKoduj = jtKoduj.getText();								//pobieranie tekstu do kodowania
		xOdkoduj = jtKoduj.getText();							//pobieranie tekstu do odkodowania
 

		
		Object zrodlo = e.getSource();							//PRZYCISK kodowanie 
		if (zrodlo==bKoduj)
		{	
	        String wynik = "";  
	        for(int i=0;i<xKoduj.length();i++){
	            yWynik=(char)(xKoduj.charAt(i)+ 1);     
	            wynik+=yWynik; 
	            }
	        tWyswietl.setText(wynik);
		}
0

Co Ty opowiadasz? http://ideone.com/gSwx9I

0

Jutro sprawdzę jeszcze mój kod. Dam znać jak postępy. Dzięki.

0

Zadeklarowałem zmienną char yWynik przed pętlą for i działa. Mam jeszcze jedno pytanie, odnośnie przekazywania zmiennych między klasami (plikami). Potrzebuję pobrać wartość zmiennej z java public class Kodowanie_Ustawienia extends JFrame implements ActionListener { } do klasy Kodowanie i wykorzystać ją w pętli for przy której potrzebowałem wcześniej pomocy. Jak najprościej i najszybciej to zrobić?

0

najlepiej w klasie java public class Kodowanie_Ustawienia extends JFrame implements ActionListener { } napisać metodę getYWynik która będzie zwracać wartość pola yWynik a w klasie Kodowanie stworzyć obiekt klasy Kodowanie_Ustawienia

0

Muszę przekazać zmienną int wartosc z Kodowanie_Ustawienia do Kodowanie. Zobaczy czy ma szanse to w ogóle zadziałać i co jeszcze muszę z tym zrobić.

W Kodowanie_ustawienia:

public int wartosc()
{
	 return(wartosc);
}

a w Kodowaniu:

	public void wartosc(int wartosc){
		this.Wartosc_ust = wartosc;
    }

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