Brak kontrolek w ramce

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

public class Main {

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

}
 

Frame_Start


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

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);
		
		
	}
	
}
 
0

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

setLayout(null);

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

panel_Start.setBounds(...);
0

cos nadal nie tak, chyba nie oto chodzilo

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);
		
	}
 
1

Za wcześnie wyświetlasz. Instrukcja

setVisible(true);

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

0

albo dodaj na końcu revalidate()

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

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.

public class Main {

	public static void main(String[] args) {
		Frame_Start frame = new 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(650, 500);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(null);
		setVisible(true);
	}
	
	public void initialize_Components(){
		panel_Start = new Panel_Start();
		add(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;
	
	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);
			}
		});
		
	}
}
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).

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

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