Problem z programem - aplikacja okienkowa

0

Cześć
mam problem z dokończeniem aplikacji okienkowej. Na początku stworzyłam sobie całe okienko (JFrame, JLabel, JText, JButton, JtextArea) a później stworzyłam akcję do buttona i tam chciałam wkleić mój program właściwy, ale niestety wyskakuje mi błąd "textAliczby cannot be resolved".

Ogólnie program ma pobierać od użytkownika ilu cyfrowe chce liczby do zmiennej N. Następnie ma wypisywać wszystkie liczby, które spełniają warunek, że jeśli skreślimy ostatnią cyfrę z liczby to tak nowo utworzona liczba dzieli pierwotną liczbę bez reszty np. dla liczb dwucyfrowych (N=2) na pewno będzie to liczba 48, bo skreślamy 8 i zostaje nam 4 co daje nam 48/4=12 (czyli bez reszty).

import java.awt.BorderLayout;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.awt.Font;
import java.awt.Window.Type;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Dimension;
import javax.swing.JTextField;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.AbstractAction;
import java.awt.event.ActionEvent;
import javax.swing.Action;
import java.awt.event.ActionListener;


public class test3 extends JFrame 
{

	private JPanel contentPane;
	private JTextField textFcyfr;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) 
	{
		EventQueue.invokeLater(new Runnable() 
		{
			public void run() 
			{
				try 
				{
					test3 frame = new test3();
					frame.setVisible(true);
				} 
				catch (Exception e) 
				{
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public test3() 
	{
		setTitle("Witamy w programie!");
		setFont(new Font("Arial", Font.PLAIN, 12));
		setBackground(Color.WHITE);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBackground(Color.LIGHT_GRAY);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		
		JLabel lblcyfr = new JLabel("Wpisz ilu cyfrowe maja byc liczby:");
		lblcyfr.setMaximumSize(new Dimension(50, 14));
		lblcyfr.setMinimumSize(new Dimension(50, 14));
		lblcyfr.setPreferredSize(new Dimension(50, 14));
		lblcyfr.setSize(new Dimension(5, 15));
		lblcyfr.setVerticalAlignment(SwingConstants.TOP);
		
		textFcyfr = new JTextField();
		textFcyfr.setColumns(10);
		
		JButton btnWypisz = new JButton("Wypisz liczby");
		
-->		btnWypisz.addActionListener(new ActionListener() 
Tu się 		{
zaczyna		public void actionPerformed(ActionEvent e) 
			{
				int N = (int)((Double.parseDouble(textFcyfr.getText())));
				
				int poczatek;
			   	int ilosc=0;
			
			   	String napis="";
			   	
			   	for (int k=potega(10,N-1);k<potega(10,N);k++)
			   	{
			   		poczatek=k/10;
			   	  if( k%poczatek==0) 
			   	  {
			   		  ilosc++;
			   		  napis+=Integer.toString(k);
			   		  napis+="\n";
			   		  
			   	  }	
			   	}
			   	textAliczby.setText(napis);
			}
		});
		
		
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_contentPane.createSequentialGroup()
							.addGap(109)
							.addComponent(textFcyfr, GroupLayout.PREFERRED_SIZE, 51, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_contentPane.createSequentialGroup()
							.addContainerGap()
							.addComponent(btnWypisz))
						.addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
							.addContainerGap()
							.addComponent(textAliczby, GroupLayout.DEFAULT_SIZE, 404, Short.MAX_VALUE))
						.addGroup(gl_contentPane.createSequentialGroup()
							.addContainerGap()
							.addComponent(lblcyfr, GroupLayout.PREFERRED_SIZE, 192, GroupLayout.PREFERRED_SIZE)))
					.addContainerGap())
		);
		gl_contentPane.setVerticalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addComponent(lblcyfr, GroupLayout.PREFERRED_SIZE, 14, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(textFcyfr, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(btnWypisz)
					.addPreferredGap(ComponentPlacement.UNRELATED)
					.addComponent(textAliczby, GroupLayout.DEFAULT_SIZE, 161, Short.MAX_VALUE)
					.addContainerGap())
		);
		contentPane.setLayout(gl_contentPane);
	}
	
	public static int potega(int a, int b)
	   {
	   	int wynik=1;
	   	for(int i=b; i>0; i--){
	   		wynik*=a;
	   	}
	   	return wynik;
	   }
}

 
0

Ale ja tam też nie widzę pola/zmiennej textAliczby, jedyna jaką widzę to jakieś textFCyfr.

0

Sorki, zgubiłam linijkę podczas kopiowania.
Zaraz po nawiasie kończącym akcję przycisku i przed: GroupLayout gl_contentPane = new GroupLayout(contentPane);
mam: textAliczby=new JtextArea();

Nie zmienia to jednak faktu, że nie działa.

0

A widzisz kolejność deklaracji? W miejscu gdzie dodajesz actionListenera tej zmiennej JESZCZE NIE MA. Nie dziwota że kompilator nie wie co ma z tym zrobić. On nie jest jasnowidzem...

0

Rzeczywiście nie zauważyłam kolejności deklaracji, ale po zmianie nadal pojawia mi się ten komunikat :(

0

Bo jeśli chcesz odwołać się do takiej zmiennej z poziomu klasy anonimowej to ta zmienna musi być zadeklarowana jako final. W czym ty to piszesz? Bo każde normalne IDE podpowiada od razu że należy dodać taki czy inne modyfikator...

0

Dzięki, po dodaniu final wszystko działa jak należy.

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