JFieldText - przzekazaniem stringow

0

Witam
Mam mały problem w mojej aplikacji. Nie wiem w jaki sposób przekazać informacji z Field z pierwszej ramki do drugiej.
a dokładniej :

  • Chciałbym aby tekst wpisany przez użytkownika w txb_Player1(znajduje się w Panel_Start, w Frame_Start) byl przekazywany do lbl_name (znajduje sie w Panel_Player1, w Frame_Game)
    niestety cos takiego nie dziala :
 	//lbl_name.setText(panel_Start.get_name_Player1());
  • a drugim problem z ktorym nie moge sobie poradzic jest to że chciałbym aby po wcisnieciu btn_Check(panel_Word), pierwsza litera z txb_Character (panel_Character) wpisywana była do txb_Letter(panel_Word)

Próbowałem już wielu "kombinacji" ale niestety nadal coś nie tak jest.

Frame_Start

 

import javax.swing.JButton;
import javax.swing.JFrame;



public class Frame_Start extends JFrame{
	Panel_Start panel_Start;
	
	public Frame_Start() {
		initialize_Components();
		prepare_Frame();
		
	}
	
	public void prepare_Frame(){
		setSize(450, 300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(null);
		setVisible(true);
		setResizable(false);
	}
	
	public void initialize_Components(){
		panel_Start = new Panel_Start();
		panel_Start.setBounds(0, 0, 450, 300);
		add(panel_Start);
		
		
	}
	
	

}

Panel_Start

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

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


public class Panel_Start extends JPanel {
	JTextField txb_Player1;
	JTextField txb_Player2;
	JLabel lbl_Player1;
	JLabel lbl_Player2;
	JButton btn_Start;
	String name_Player1;
	String name_Player2;
	Frame_Game frame2;
	
	public Panel_Start() {
		initializeComponents();
		prepare_Panel();
		event_Button();
		
		
	}
	
	public String get_name_Player1(){
		return name_Player1;
	}
	
	public String get_name_Player2(){
		return name_Player2;	
	}
	
	private void prepare_Panel(){
		setLayout(null);	
		setVisible(true);
	}
	
	private void initializeComponents(){
		
		txb_Player1 = new JTextField();
		txb_Player2 = new JTextField();
		name_Player1=txb_Player1.getText();
		name_Player2=txb_Player2.getText();
		
		lbl_Player1 = new JLabel("Gracz nr 1");
		lbl_Player2 = new JLabel("Gracz nr 2");
		btn_Start 	= new JButton("Start");
		
		txb_Player1.setBounds(50, 100, 150, 25);
		txb_Player2.setBounds(250, 100, 150, 25);
		lbl_Player1.setBounds(50, 50, 100, 30);
		lbl_Player2.setBounds(250, 50, 100, 30);
		btn_Start.setBounds(175, 150, 100, 25);
		
		add(txb_Player1);
		add(txb_Player2);
		add(btn_Start);
		add(lbl_Player1);
		add(lbl_Player2);		
		
	}
	
	public void event_Button(){
		btn_Start.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				name_Player1 = txb_Player1.getText();
				name_Player2 = txb_Player2.getText();
				 
				 frame2 = new Frame_Game();
		
				 
			}
		});
		
	}
}

Frame_Game

 
import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;


public class Frame_Game extends JFrame {
	Panel_Character panel_Character; 
	Panel_Player1 panel_Player1;
	Panel_Player2 panel_Player2;
	Panel_Word	  panel_Word;
	BorderLayout borderLayout;
	public Frame_Game() {
		
		initialize_Components();
		prepare_Frame();
		
	}

	private void prepare_Frame() {
		setSize(550, 300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		getContentPane().setLayout(null);
		setVisible(true);
		
		
	}

	private void initialize_Components() {
		Panel_Character panel_Character = new Panel_Character();
		Panel_Player1 panel_Player1 = new Panel_Player1();
		Panel_Player2 panel_Player2 = new Panel_Player2();
		Panel_Word panel_Word = new Panel_Word();
		
		panel_Player1.setBounds(0, 0, 185, 200);
		getContentPane().add(panel_Player1);
		
		panel_Character.setBounds(185, 0, 165, 200);
		getContentPane().add(panel_Character);
		
		panel_Player2.setBounds(350, 0, 185, 200);
		getContentPane().add(panel_Player2);
		
		panel_Word.setBounds(0, 200, 550, 100);
		getContentPane().add(panel_Word);
		
	}
	
}

Panel_Character

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


public class Panel_Character extends JPanel {
	JLabel lbl1;
	JTextField txb_Character;
	String character; 
	
	
	
	public Panel_Character() {
		
		initialize_Components();
		prepare_Panel();
		
		
	}

	private void prepare_Panel() {
		setLayout(null);
		setVisible(true);
	}

	private void initialize_Components() {
		lbl1 = new JLabel("Podaj litere"); 
		lbl1.setBounds(50, 20, 100, 30);
		add(lbl1);
		
		txb_Character = new JTextField();
		txb_Character.setBounds(30, 70, 100, 25);
		character = txb_Character.getText();
		
		add(txb_Character);
		
		
		
		
		
	}

	public String get_Character() {
		character = txb_Character.getText();
		return character;
	}
	
	public void set_Character(String word){
		character = word;
		txb_Character.setText(character);
	}
}

 

Panel_Player1

import java.awt.BorderLayout;

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


public class Panel_Player1 extends JPanel{
	JLabel lbl_name; 
	Panel_Start panel_Start;
	
	public Panel_Player1() {
		
		initialize_Components();
		prepare_Panel();
	}

	private void initialize_Components() {				/// POPRAWIC !!!! nie wczytuje nazwy gracza z Start
		lbl_name = new JLabel();	
		
		lbl_name.setText("Player1");
		//lbl_name.setText(panel_Start.get_name_Player1());
		
		lbl_name.setBounds(50, 50, 100, 30);
		add(lbl_name);
		
		
	}

	private void prepare_Panel() {
		setLayout(null);
		setVisible(true);
		
	}
	
}
 

Panel_Word

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

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


public class Panel_Word extends JPanel {
	JButton btn_Check; 
	String word; 
    String[] temp;
    String delimiter;
    Random randomGenerator;
    int randomInt;
    String rword;
    StringBuffer gword;
    JTextField txb_Letter;
    int error; 
    Panel_Character panel_Character;
    
    
	public Panel_Word() {
		initialize_Components();		
		prepare_Panel();
		event();
	}

	

	private void prepare_Panel() {
		setLayout(null);
		setVisible(true);
		
	}

	private void initialize_Components() {
		btn_Check = new JButton("Sprawdz");
		btn_Check.setBounds(400,25 , 100, 25);
		add(btn_Check);
		
		txb_Letter = new JTextField();
		txb_Letter.setBounds(10, 10, 300, 30);
		add(txb_Letter);
		
		word = "computer|radio|calculator|teacher";
		delimiter = "\\|";
		randomGenerator = new Random();
		temp = word.split(delimiter);
		randomInt = randomGenerator.nextInt(temp.length);
		
		rword = new String(temp[randomInt]);
        char positions[] = new char[rword.length()];
        for (int i=0; i<rword.length(); i++) {
                positions[i] = '.';
        }
        
        String s = new String(positions);
        gword = new StringBuffer(s);
       //txb_Letter.setText("");


	}
	
	private void event() {
		
		btn_Check.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				String s , t;
		        char a;
		        error = 0; 
		        panel_Character = new Panel_Character();
		        
		        s = panel_Character.get_Character(); 
		        a = s.charAt(0);
		        txb_Letter.setText(Character.toString(a));
		        panel_Character.set_Character(" ");
				
			}
		});
		
		
        
        
        /* if (rword.indexOf(s) == -1)	error++;*/
            
            
            
                   
            
            
           
    
		
	}
}
 
0
  1. Moze dlatego ze zakomentowales ta linijke
    2.http://stackoverflow.com/questions/18201191/what-is-the-best-way-to-get-the-first-letter-from-a-string-in-java-returned-as
    Zapewniam Cie ze z takimi klasami i takim nazewnictwem zaraz kod stanie sie nie do ogarniecia. Stworz chociaz klase Player please!
0
  1. Według mnie tak powinno działać ale jeśli odkomentuję tą linijkę to nie nie odpala mi się w ogóle Frame_Game
  2. wyciągnąć pierwszą literę potrafię tylko problem tkwi w tym że on nie odczytuje ciągu znaków z txb_Character :/

przykładowo :

 
  s = "lol";
 txb_Letter.setText(Character.toString(a));

działa poprawnie ale gdy wstawie :
s = panel_Character.get_Character();

to jużnie działa. tak samo brak reakcji gdy wywołuje metodę
panel_Character.set_Character(" ");

0

lbl_name.setText(panel_Start.get_name_Player1());
panel_Start jest nie zainicjalizowany więc pewnie leci null i w konsekwencji nie ładuje się frame.
Przekaż panel w konstruktorze lub w setterze

0

słuszna uwaga zapomniałem zainicjować, ale niestety to też nie pomogło :P

 
import java.awt.BorderLayout;
import java.awt.Graphics;

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


public class Panel_Player1 extends JPanel{
	JLabel lbl_name; 
	Panel_Start panel_Start;
	
	public Panel_Player1() {
		
		initialize_Components();
		prepare_Panel();
	}

	private void initialize_Components() {				/// POPRAWIC !!!! nie wczytuje nazwy gracza z Start
		lbl_name = new JLabel();	
		panel_Start = new Panel_Start();
		
		lbl_name.setText(panel_Start.get_name_Player1());
		
		//lbl_name.setText("Player1");
		lbl_name.setBounds(50, 50, 100, 30);
		add(lbl_name);
		
		
	}

	private void prepare_Panel() {
		setLayout(null);
		setVisible(true);
		
	}
	
	
}
0

Brakuje u Ciebie "glue code". Tworzysz sobie nowe instancje paneli ale nigdzie ich nie przekazujesz. Traktuj panel jak zwykły obiekt.
Nawiasem mówiąc w Javie raczej stosuje się konwencję camelCase :)

0

Czyli jak powołuje Frame_Game to w jego konstruktorze muszę mieć obiekt .... Panel Start tak ?

 
public class Frame_Game extends JFrame {
	Panel_Character panel_Character; 
	Panel_Player1 panel_Player1;
	Panel_Player2 panel_Player2;
	Panel_Word	  panel_Word;
	BorderLayout borderLayout;
	String name_Player1;
	
	public Frame_Game(Panel_Start pStart) {
		
		initialize_Components();
		prepare_Frame();
		this.name_Player1 = pStart.name_Player1;
		
	}

tylko w Panel_Start muszę podać obiekt... typu Panel_Start ? xd bo taki obiekt mam ale w Frame_Start. Czyli musiałbym coś takiego zrobić ?

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

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


public class Panel_Start extends JPanel {
	JTextField txb_Player1;
	JTextField txb_Player2;
	JLabel lbl_Player1;
	JLabel lbl_Player2;
	JButton btn_Start;
	String name_Player1;
	String name_Player2;
	Frame_Game frame2;
	Frame_Start frame; 			///// siegam do Frame_start 
	
	public Panel_Start() {
		initializeComponents();
		prepare_Panel();
		event_Button();
		
		
	}
	
	public String get_name_Player1(){
		return name_Player1;
	}
	
	public String get_name_Player2(){
		return name_Player2;	
	}
	
	private void prepare_Panel(){
		setLayout(null);	
		setVisible(true);
	}
	
	private void initializeComponents(){
		
		txb_Player1 = new JTextField();
		txb_Player2 = new JTextField();
		name_Player1=txb_Player1.getText();
		name_Player2=txb_Player2.getText();
		
		lbl_Player1 = new JLabel("Gracz nr 1");
		lbl_Player2 = new JLabel("Gracz nr 2");
		btn_Start 	= new JButton("Start");
		
		txb_Player1.setBounds(50, 100, 150, 25);
		txb_Player2.setBounds(250, 100, 150, 25);
		lbl_Player1.setBounds(50, 50, 100, 30);
		lbl_Player2.setBounds(250, 50, 100, 30);
		btn_Start.setBounds(175, 150, 100, 25);
		
		add(txb_Player1);
		add(txb_Player2);
		add(btn_Start);
		add(lbl_Player1);
		add(lbl_Player2);		
		
	}
	
	public void event_Button(){
		btn_Start.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				name_Player1 = txb_Player1.getText();
				name_Player2 = txb_Player2.getText();
				frame = new Frame_Start();			////// tak ??
				
				 frame2 = new Frame_Game(frame.panel_Start);  ///// tak ??
		
				 
			}
		});
		
	}
}
 

Bo to trochę zawiłe się strasznie robi.

0

W skrócie:

  1. Musisz zacząć od początku. Czyli w pierwszym framie tworzysz panel_start.
  2. Następnie tworząc drugi frame przekazujesz mu np. w konstruktorze panel_start w ten sposób:
 private PanelStart panelStart;
public Frame2(PanelStart panelStart){
this.panelStart = panelStart; //teraz możesz z niego korzystać
} 

a tworzenie Frame2 w panelu_start robisz w następujący sposób:
Frame2 frame2 = new Frame2(this); //odwołanie do bieżącego obiektu
Napotkasz problem bo tworzysz frame2 w klasie anonimowej więc proponuję stworzyć go wcześniej a na zdarzenie wywołać po prostu
frame2.setVisible(true); lub przekazać panel poprzez settera

0

A tak namarginesie koncepcje tej aplikacji mam dobra ?znaczy sie gdybym mial ja budowac od nowa to co moglbym poprawic ( oprocz layout ;-) )

0

to co rzuca się w oczy:

  1. zmienne powinny być prywatne, dostęp poprzez gettery i settery (enkapsulacja)
  2. layout to podstawa podstaw, za chwilę zmienisz wielkość frame i wszystko Ci się rozjedzie
  3. camelCase
  4. tworząc gui myślę, że warto skorzystać z MVC.

To co mi się podoba to to, że każdy panel to osobna klasa. Niestety często spotyka się frame gdzie wszystko jest wrzucone bezpośrednio do niego a wtedy trzeba się nieźle nascrollować :)
Pokazałeś tylko kilka klas(paneli), więc ciężko coś powiedzieć. Może to, że jesteś świeżak :)

0

Zrobiłem to tak :

w Panel_Start

frame2 = new Frame_Game(frame2.getPanelStart());
 

w Frame_Start zapisalem :

public Panel_Start getPanelStart(){
		
		return panel_Start;
	} 

ale niestety problem się kompiluje, otwiera się pierwsza Ramka ale gdy klikam na przycisk druga Ramka nie chce sie pokazac

0

Tylko wróżbita Maciej może Ci pomóc... Daj kod(tylko te klasy w których coś zmieniałeś)

0

Frame_Start

 
import javax.swing.JButton;
import javax.swing.JFrame;



public class Frame_Start extends JFrame{
	Panel_Start panel_Start;
	
	public Panel_Start getPanelStart(){
		
		return panel_Start;
	}
	public Frame_Start() {
		initialize_Components();
		prepare_Frame();
		
	}
	
	public void prepare_Frame(){
		setSize(450, 300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(null);
		setVisible(true);
		setResizable(false);
	}
	
	public void initialize_Components(){
		panel_Start = new Panel_Start();
		panel_Start.setBounds(0, 0, 450, 300);
		add(panel_Start);
		
		
	}
	
	

}

Panel_Start

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

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


public class Panel_Start extends JPanel {
	JTextField txb_Player1;
	JTextField txb_Player2;
	JLabel lbl_Player1;
	JLabel lbl_Player2;
	JButton btn_Start;
	String name_Player1;
	String name_Player2;
	Frame_Game frame2;
	Frame_Start frame; 			
	
	public Panel_Start() {
		initializeComponents();
		prepare_Panel();
		event_Button();
		
		
	}
	
	public String get_name_Player1(){
		return name_Player1;
	}
	
	public String get_name_Player2(){
		return name_Player2;	
	}
	
	private void prepare_Panel(){
		setLayout(null);	
		setVisible(true);
		
	}
	
	private void initializeComponents(){
		
		//frame2.setVisible(false);
		
		txb_Player1 = new JTextField();
		txb_Player2 = new JTextField();
		name_Player1=txb_Player1.getText();
		name_Player2=txb_Player2.getText();
		
		lbl_Player1 = new JLabel("Gracz nr 1");
		lbl_Player2 = new JLabel("Gracz nr 2");
		btn_Start 	= new JButton("Start");
		
		txb_Player1.setBounds(50, 100, 150, 25);
		txb_Player2.setBounds(250, 100, 150, 25);
		lbl_Player1.setBounds(50, 50, 100, 30);
		lbl_Player2.setBounds(250, 50, 100, 30);
		btn_Start.setBounds(175, 150, 100, 25);
		
		add(txb_Player1);
		add(txb_Player2);
		add(btn_Start);
		add(lbl_Player1);
		add(lbl_Player2);		
		
	}
	
	public void event_Button(){
		btn_Start.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				name_Player1 = txb_Player1.getText();
				name_Player2 = txb_Player2.getText();
				
				frame2 = new Frame_Game(frame.getPanelStart()));
				frame2.setVisible(true);
		
				 
			}
		});
		
	}
}
 

Frame_Game

 
import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;


public class Frame_Game extends JFrame {
	Panel_Character panel_Character; 
	Panel_Player1 panel_Player1;
	Panel_Player2 panel_Player2;
	Panel_Word	  panel_Word;
	BorderLayout borderLayout;
	String name_Player1;
	private Panel_Start panelStart;
	
	public Frame_Game(Panel_Start pStart) {
		
		initialize_Components();
		prepare_Frame();
		this.panelStart = pStart;
		
	}
	

	private void prepare_Frame() {
		setSize(550, 300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		getContentPane().setLayout(null);
		setVisible(true);
		
		
	}

	private void initialize_Components() {
		Panel_Character panel_Character = new Panel_Character();
		Panel_Player1 panel_Player1 = new Panel_Player1();
		Panel_Player2 panel_Player2 = new Panel_Player2();
		Panel_Word panel_Word = new Panel_Word();
		
		
	
		panel_Player1.setBounds(0, 0, 185, 200);
		getContentPane().add(panel_Player1);
		
		panel_Character.setBounds(185, 0, 165, 200);
		getContentPane().add(panel_Character);
		
		panel_Player2.setBounds(350, 0, 185, 200);
		getContentPane().add(panel_Player2);
		
		panel_Word.setBounds(0, 200, 550, 100);
		getContentPane().add(panel_Word);
		
	}
	
}

cały projekt znajduje sie w zalaczniku

0

frame.getPanelStart() w tej linijce frame jest nullem
Tworząc ten frame zrób jak Ci już napisałem wcześniej

  1. new Frame(PanelStart.this);
  2. albo przekaż obiekt frame dla paneluStart(nie twórz nowego)
0

Czyli muszę jeszcze zmienić konstruktor Frame_Start tak ?

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

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


public class Panel_Start extends JPanel {
	JTextField txb_Player1;
	JTextField txb_Player2;
	JLabel lbl_Player1;
	JLabel lbl_Player2;
	JButton btn_Start;
	String name_Player1;
	String name_Player2;
	Frame_Game frame2;
	Frame_Start frame; 			
	
	public Panel_Start() {
		initializeComponents();
		prepare_Panel();
		event_Button();
		
		
	}
	
	public String get_name_Player1(){
		return name_Player1;
	}
	
	public String get_name_Player2(){
		return name_Player2;	
	}
	
	private void prepare_Panel(){
		setLayout(null);	
		setVisible(true);
		
	}
	
	private void initializeComponents(){
		frame =new Frame_Start(Panel_Start.this);
		//frame2.setVisible(false);
		
		txb_Player1 = new JTextField();
		txb_Player2 = new JTextField();
		name_Player1=txb_Player1.getText();
		name_Player2=txb_Player2.getText();
		
		lbl_Player1 = new JLabel("Gracz nr 1");
		lbl_Player2 = new JLabel("Gracz nr 2");
		btn_Start 	= new JButton("Start");
		
		txb_Player1.setBounds(50, 100, 150, 25);
		txb_Player2.setBounds(250, 100, 150, 25);
		lbl_Player1.setBounds(50, 50, 100, 30);
		lbl_Player2.setBounds(250, 50, 100, 30);
		btn_Start.setBounds(175, 150, 100, 25);
		
		add(txb_Player1);
		add(txb_Player2);
		add(btn_Start);
		add(lbl_Player1);
		add(lbl_Player2);		
		
	}
	
	public void event_Button(){
		btn_Start.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				name_Player1 = txb_Player1.getText();
				name_Player2 = txb_Player2.getText();
				
				frame2 = new Frame_Game(frame.getPanelStart());
				frame2.setVisible(true);
		
				 
			}
		});
		
	}
}
 

no i zmieniony konstruktor Frame_Start

public Frame_Start(Panel_Start pStart) {
		initialize_Components();
		prepare_Frame();
		this.panel_Start = pStart;
		
	} 

tylko że wtedy jest problem bo musze podać podać argument konstruktorowi w klasie Main :

 public class Main {

	public static void main(String[] args) {
		Frame_Start frame = new Frame_Start();
		
	}

}
0

Myślę, że powinieneś wrócić do podstaw obiektowości zamiast klepać gui bezmyślnie.
W main tworzysz pierwszą ramkę w ten sposób:
new Frame_Start();
potem w Panel_Start tworzysz na event nową ramkę w ten sposób:
new FrameGame(Panel_Start.this);
Szczątki kodu FrameGame:

 
private Panel_Start panelStart;
public FrameGame(Panel_Start panelStart){
this.panelStart = panelStart;
}

W ten sposób masz referencję do paneluStart(gdzie masz text field) w nowym framie. Możesz dalej ten panel przekazać w sposób analogiczny.
Sory, nie umiem już prościej

0

Ok zrozumiałem już twój tok myślenia :)
Sprawdzałem sobie wersją "łopatologiczna" Wyświetlac napis w messageBox.

Gdy tworzę nową ramkę, faktycznie jest przekazywany ten tekst. :) tylko niestety program ma problem gdy robię to w Panelu.

Panel_Start przekazuje do konstruktora Frame_Game.
Frame_Game zapisuje obiekt do swojego atrybutu panelStart, a nastepnie przekazuje go w konstruktorze do Panel_Player.
I teoretycznie działa, kompiluje sie itd. Niestety gdy próbuje w wywołać fukcje z tego obiektu to program sie kompiluje ale nie chce już otworzyć drugiego okna dlaczego ?

 
import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class Frame_Game extends JFrame {
	Panel_Character panel_Character; 
	Panel_Player1 panel_Player1;
	Panel_Player2 panel_Player2;
	Panel_Word	  panel_Word;
	BorderLayout borderLayout;
	String name_Player1;
	 Panel_Start panelStart;
	
	public Frame_Game(Panel_Start panelStart2) {
		
		initialize_Components();
		prepare_Frame();
		this.panelStart = panelStart2;
		//JOptionPane.showMessageDialog(null, panelStart.get_name_Player1());  //// DZIAŁA !!!! 
	}
	
	Panel_Start getPanelStart(){
		return  panelStart;
	}



	private void prepare_Frame() {
		setSize(550, 300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		getContentPane().setLayout(null);
		setVisible(true);
		
		
	}

	private void initialize_Components() {
		Panel_Character panel_Character = new Panel_Character();
		Panel_Player1 panel_Player1 = new Panel_Player1(panelStart); /// przekazuje obiekt do Panel_Player1
		Panel_Player2 panel_Player2 = new Panel_Player2();
		Panel_Word panel_Word = new Panel_Word();
		
		
	
		panel_Player1.setBounds(0, 0, 185, 200);
		getContentPane().add(panel_Player1);
		
		panel_Character.setBounds(185, 0, 165, 200);
		getContentPane().add(panel_Character);
		
		panel_Player2.setBounds(350, 0, 185, 200);
		getContentPane().add(panel_Player2);
		
		panel_Word.setBounds(0, 200, 550, 100);
		getContentPane().add(panel_Word);
		
	}
	
}


Panel_Player1

import java.awt.BorderLayout;
import java.awt.Graphics;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;


public class Panel_Player1 extends JPanel{
	JLabel lbl_name; 

	Panel_Start panel_Start;
	//Frame_Game frame_game;
	
	public Panel_Player1(Panel_Start pStart){
		initialize_Components();
		prepare_Panel();
		
		this.panel_Start = pStart;
		//JOptionPane.showMessageDialog(null, panel_Start.get_name_Player1()); //// Gdy odkomentuje nie odpala 
																			//// sie w ogole Frame_Game
	}

	private void initialize_Components() {				/// POPRAWIC !!!! nie wczytuje nazwy gracza z Start
		lbl_name = new JLabel();	
		
	
		
		
		//lbl_name.setText("Player1");
		//lbl_name.setText(panel_Start.get_name_Player1());
		lbl_name.setBounds(50, 50, 100, 30);
		add(lbl_name);
		
		
	}

	private void prepare_Panel() {
		setLayout(null);
		setVisible(true);
		
	}
	
}
 
0

Dla mnie łopatlogicznie znaczy System.out.print.
W konstruktorze frame_game najpierw zrób przypisanie panelu start a dopiero następne metody, to rozwiąże Twój problem.
Poza tym czytaj komunikaty z IDE, ułatwią Ci życie...

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