JFieldText - przzekazaniem stringow

JFieldText - przzekazaniem stringow
I2
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:229
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 :
Kopiuj
 	//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

Kopiuj
 

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

Kopiuj
 
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

Kopiuj
 
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

Kopiuj
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

Kopiuj
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

Kopiuj
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++;*/
            
            
            
                   
            
            
           
    
		
	}
}
 
miej95
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 8 lat
  • Postów:78
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!
I2
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:229
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 :

Kopiuj
 
  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(" ");

edytowany 1x, ostatnio: ice25
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

I2
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:229
0

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

Kopiuj
 
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);
		
	}
	
	
}
edytowany 1x, ostatnio: ice25
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 :)

I2
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:229
0

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

Kopiuj
 
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ć ?

Kopiuj
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:
Kopiuj
 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

I2
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:229
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 :)

I2
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:229
0

Zrobiłem to tak :

w Panel_Start

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

w Frame_Start zapisalem :

Kopiuj
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

edytowany 1x, ostatnio: ice25
0

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

I2
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:229
0

Frame_Start

Kopiuj
 
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

Kopiuj
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

Kopiuj
 
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)
I2
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:229
0

Czyli muszę jeszcze zmienić konstruktor Frame_Start tak ?

Kopiuj
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

Kopiuj
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 :

Kopiuj
 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:

Kopiuj
 
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

I2
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:229
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 ?

Kopiuj
 
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

Kopiuj
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);
		
	}
	
}
 
edytowany 1x, ostatnio: ice25
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...

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)