Nie można wywołać innej metody z tej samej klasy

0

Witam mam pewien problem w ramce nie mogę wywołać metody z panelu getPass a metodę getName bez problemu mogę wywołać ktoś wie dlaczego tak się dzieje?
Panel

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class LoginPanel extends JPanel {
	private Frame ramka;
	public String name,pass;
	public char [] password;
	private JTextField nameField;
	private JPasswordField passwordField;
	private JLabel nameLabel;
	private JLabel passwordLabel;
	private JButton loginButton;
	private Dimension wymiary=new Dimension(80,20);
	private Dimension wymiaryLabel=new Dimension(40,20);
	
	public LoginPanel(Frame frame){
		ramka=frame;
		setBackground(Color.lightGray);
		setPreferredSize(new Dimension(150,85));
		addComponents();
	}
	public String getName(){
		name=nameField.getText();
		return name;
	}
	public String getPass(){
		String Password="";
		password=passwordField.getPassword();
		for (int i=0;i<password.length;i++){
			Password+=password[i];
		}
		return Password;
	}
	
	private void addComponents(){
		nameField=new JTextField();
		passwordField=new JPasswordField();
		loginButton=new JButton("Zaloguj");
		nameLabel=new JLabel("Imie:");
		passwordLabel=new JLabel("Hasło:");
		
		nameField.setPreferredSize(wymiary);
		passwordField.setPreferredSize(wymiary);
		nameLabel.setPreferredSize(wymiaryLabel);
		passwordLabel.setPreferredSize(wymiaryLabel);
		
		add(nameLabel);
		add(nameField);
		add(passwordLabel);
		add(passwordField);
		add(loginButton);
		loginButton.addActionListener(ramka);
		
		
	}
	
}
 

Ramka

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Frame extends JFrame implements ActionListener{
	JPanel MainPanel,LoginPanel;
	String name,pass;
	char [] correctPassword= {'s','e','c','u','r','i','t','y'};
	public Frame(){
		super ("Panel logowania");
		setVisible(true);
		MainPanel=new MainPanel();
		LoginPanel=new LoginPanel(this);
		MainPanel.add(LoginPanel);
		add(MainPanel);
		pack();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		name=LoginPanel.getPass(); // błąd The method getPass() is undefined for the type JPanel
	}
}
 

Z góry dziękuję za pomoc

1

JPanel nie ma takiej metody a obiektem tego typu jest LoginPanel. Pewnie chciałeś żeby byłtypu LoginPanel.

1

A jakbbyś tą Ramkę tak zrobił? (male litery w nazwach pól)podpowiedź z góry była dobra

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Frame extends JFrame implements ActionListener{
        MainPanel mainPanel;
	LoginPanel loginPanel;
	String name,pass;
	char [] correctPassword= {'s','e','c','u','r','i','t','y'};
	public Frame(){
		super ("Panel logowania");
		setVisible(true);
		this.mainPanel=new MainPanel();
		this.loginPanel=new LoginPanel(this);
		MainPanel.add(loginPanel);
		add(mainPanel);
		pack();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		name=this.loginPanel.getPass(); // błąd The method getPass() is undefined for the type JPanel
	}
}
 
0

@szweszwe zmienię typ obiekty z JPanel na LoginPanel a czemu w takim razie w tym kodzie działa mi metoda getName()?

2

Bo JPanel dziedziczy z JComponent a ten taką metodę posiada.
https://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#getName()

0

Ale głupi błąd xD dzięki za wytłumaczenie. Działanie było czystym zbiegiem okoliczności

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