Brak kontrolek w ramce

Brak kontrolek w ramce
I2
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 2 lata
  • 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);
		
		
	}
	
}
 
edytowany 1x, ostatnio: bogdans
bogdans
!Kod umieszczaj w znacznikach <code=java> </code>
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
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(...);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
I2
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 2 lata
  • 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);
		
	}
 
edytowany 2x, ostatnio: ice25
bogdans
!Kod umieszczaj w znacznikach <code=java> </code> Jak to zrobisz, to napiszę co jest u Ciebie źle.
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
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.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
0

albo dodaj na końcu revalidate()

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

edytowany 1x, ostatnio: wojciechmaciejewski
bogdans
Też uważam, że należy używać menadżerów. Ale ich używanie nie jest lekarstwem na zbyt wczesne setVisible(true);;
Gjorni
Nikt nie tu nie twierdzi, że jest.
I2
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 2 lata
  • 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);
			}
		});
		
	}
}
edytowany 1x, ostatnio: ice25
wojciechmaciejewski
przeczytaj co napisał @bogdans 2 posty wyżej
bogdans
Teraz dla odmiany zgubiłeś setBounds(...).
I2
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 2 lata
  • 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:ponad 12 lat
  • Ostatnio:około 2 lata
  • 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.