Brak kontrolek w ramce

Brak kontrolek w ramce
I2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 229
0

Witam
Program który stworzyłem kompiluje się itd niestety w ramce nie wyświetlają się elementy które dodałem do Panel. Gdzie popełniłem błąd ?

Main

Kopiuj
public class Main {

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

}
 

Frame_Start

Kopiuj

import javax.swing.JFrame;



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

}

 

Panel_Start

Kopiuj
import javax.swing.JButton;
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;
	
	public Panel_Start() {
		prepare_Panel();
		initializeComponents();
		
	}
	
	public void prepare_Panel(){
		setLayout(null);	
	}
	
	public void initializeComponents(){
		
		txb_Player1 = new JTextField();
		txb_Player2 = new JTextField();
		lbl_Player1 = new JLabel("Gracz nr.1");
		lbl_Player2 = new JLabel("Gracz nr.2");
		btn_Start 	= new JButton();
		
		txb_Player1.setBounds(50, 100, 150, 30);
		txb_Player2.setBounds(250, 100, 150, 30);
		lbl_Player1.setBounds(50, 50, 100, 30);
		lbl_Player2.setBounds(250, 50, 100, 30);
		btn_Start.setBounds(175, 150, 100, 50);
		
		add(txb_Player1);
		add(txb_Player2);
		add(btn_Start);
		add(lbl_Player1);
		add(lbl_Player2);
		
		
	}
	
}
 
bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

W ramce wyłączyłeś menadżera rozkładu

Kopiuj
setLayout(null);

Musisz zatem na rzecz dodawanego panelu wywołać metodę

Kopiuj
panel_Start.setBounds(...);
I2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 229
0

cos nadal nie tak, chyba nie oto chodzilo

Kopiuj
public void prepare_Frame(){
		setSize(650, 500);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
		setLayout(null);
	}
	
	public void initialize_Components(){
		panel_Start = new Panel_Start();
		panel_Start.setBounds(0, 0, 650, 500);
		add(panel_Start);
		
	}
 
bogdans
  • Rejestracja: dni
  • Ostatnio: dni
1

Za wcześnie wyświetlasz. Instrukcja

Kopiuj
setVisible(true);

powinna być po dodaniu wszystkich komponentów.
Spróbuj w swoim dotychczasowym programie zmienić rozmiar okna.

wojciechmaciejewski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 560
0

albo dodaj na końcu revalidate()

aha, i dobra praktyka używać jednak menadżerów rozkładu.

I2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 229
0

to jest czesc troche wiekszego projektu i wlasnie w jednej ramce mam zastosować bezpośrednie "ustawianie" dlatego nie stosuje menadzera.

najpierw wywołuje InitializeComponents a pozniej dopiero prepare gdzie jest "visible".
więc teoretycznie powinno dzialac.

Kopiuj
public class Main {

	public static void main(String[] args) {
		Frame_Start frame = new 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(650, 500);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(null);
		setVisible(true);
	}
	
	public void initialize_Components(){
		panel_Start = new Panel_Start();
		add(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;
	
	public Panel_Start() {
		initializeComponents();
		prepare_Panel();
		
		
	}
	
	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();
		lbl_Player1 = new JLabel("Gracz nr.1");
		lbl_Player2 = new JLabel("Gracz nr.2");
		btn_Start 	= new JButton();
		
		txb_Player1.setBounds(50, 100, 150, 30);
		txb_Player2.setBounds(250, 100, 150, 30);
		lbl_Player1.setBounds(50, 50, 100, 30);
		lbl_Player2.setBounds(250, 50, 100, 30);
		btn_Start.setBounds(175, 150, 100, 50);
		
		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();
				JFrame frame_2 = new JFrame();
				frame_2.setSize(450,300);
				frame_2.setLocationRelativeTo(frame_2);
				frame_2.setResizable(false);				
				frame_2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame_2.setVisible(true);
			}
		});
		
	}
}
I2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 229
0

Można jakoś określać wielkość kontrolek przy użyciu BorderLayout ? mianowicie chodzi mi by Buttony WEST, CENTER, EAST. były równej szerokości (zał. przyklad) . bo obecnie to wyglada tak jak w zalaczniku(widok2).

wojciechmaciejewski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 560
0

da się. Do centralnego dodaj panel na którym będziesz miał nie borderlayout ale jakiś inny. GridBagLayout, tableLayout. Flow Layout ewentualnie ale tu nie masz gwarancji że będą tej samej wielkości. Będziesz się musiał pobawić z ustawieniami prefferedSize i minSize

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.