webForumDet fria alternativet

Panels, hur fungerar dessa?

3 svar · 306 visningar · startad av mikael_a

mikael_aMedlem sedan mars 2000475 inlägg
#1

Hej,

jag försöker att skapa fyra stycken JPanels... topPanel som skall innehålla Player.java centerPlane som skall innehålla knappar + textfält. bottonPlane som skall innehålla Dealer.java. 0 main som innehåller alla de andra 3...

Detta vill inte fungera. Kör jag med setGridLayout, så fungerar det, men grafiken som jag skall använda fungerar inte tillsammans med detta, eftersom jag måste kunna sätta en mer korrekt position.

raden som jag anvönder för de olika planen är

topPanel.add( dealer );

	centerPanel.add( bankPanel );
	centerPanel.add( messageBox );
	centerPanel.add( button );

	bottomPanel.add( player );

	main.add( topPanel );
	main.add( centerPanel );
	main.add( bottomPanel );

top och bottom visas på vänster respektive höger sida, typ 2x2 i storlek...

koden ser ut som följer:


/************************************************************

 Class:   Blackjack.java
 Members: Player 	player
 		  Dealer 	dealer
 		  Messages 	messageBox
 		  Buttons 	button
 		  Bank 		bank
 Methods: main()

 Denna klass presenterar gui
*************************************************************/

import java.awt.*;
import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class Blackjack
{
	BlackjackListener bl;
	Player player;
	Dealer dealer;
	Messages messageBox;
	Buttons button;
	Bank bankPanel;
	Deck d;

/* ===============================================
	Blackjack Constructor

	Pre:  inget
	Post: Skapar BlackJack Gui

   =============================================== */
	Blackjack()
	{
		JFrame frame = new JFrame("Blackjack");
    	Container pane = frame.getContentPane();

		// Avslutar BlackJack när fönstret stängs
		frame.addWindowListener(new WindowAdapter() {
		       public void windowClosing(WindowEvent e) { System.exit(0); }
		       });

    	// Skapar menyn
    	JMenuBar menuBar = new JMenuBar();
    	JMenu fileMenu = new JMenu("File");
    	fileMenu.setMnemonic('F');
		JMenu helpMenu = new JMenu("Help");
		helpMenu.setMnemonic('H');
    	menuBar.add(fileMenu);
    	menuBar.add(helpMenu);
		frame.setJMenuBar(menuBar);
		JMenuItem quit = new JMenuItem("Quit",'x');
		JMenuItem newGame = new JMenuItem("New Game", 'x');

		JMenuItem help = new JMenuItem("Display Rules", 'x');
		help.addActionListener(new Help() );
		helpMenu.add(help);

    	quit.addActionListener(new Quit());

	//	JPanel main = new JPanel();
	//	main.setBackground(Color.green.darker());
	//	main.setLayout( new GridLayout( 3, 1 ) );

		JPanel main = new JPanel();
		main.setBackground(Color.pink);
    	main.setBounds(new Rectangle(20, 11, 355, 72));

		// Skapar lyssnaren
		bl = new BlackjackListener();

		// Laddar spelbordet
	//	ImageIcon startBildIcon = new ImageIcon( "images/BlackJackTable.jpg  " ); // Laddar spelbordet
	//	JLabel startBildLabel = new JLabel( startBildIcon );					  // skapar en label av grafiken
	//	startBildLabel.setBounds( 0, 0, 550, 400 );								  // Position

		// BANK GUI
    	JTextField bet = new JTextField("100", 5);
    	JTextField bank = new JTextField("5000", 10);
	    JLabel bankLabel = new JLabel("Bank $");
    	JLabel betLabel = new JLabel("Bet Amount");
	    JButton submit = new JButton("Submit");
	    submit.addActionListener( bl );
	    bank.setEditable(false);

		// KNAPP GUI
	    JButton hit = new JButton("Hit");
    	JButton stand = new JButton("Stand");
	    JButton doubleDown = new JButton("Double Down");
    	JButton split = new JButton("Split");
	    JButton deal = new JButton("Deal");
	    hit.addActionListener( bl );
	    stand.addActionListener( bl );
	    doubleDown.addActionListener( bl );
	    split.addActionListener( bl );
	    deal.addActionListener( bl );

		// Sätter alla knappar inaktiva utom "submit"
		hit.setEnabled(false);
		stand.setEnabled(false);
		doubleDown.setEnabled(false);
		split.setEnabled(false);
		deal.setEnabled(false);

		// MEDDELANDE arean
		JTextArea message = new JTextArea(5,12);
		message.setEditable(false);

		Deck d = new Deck();

		dealer = new Dealer(d);

		JPanel topPanel = new JPanel();
		topPanel.setBounds(new Rectangle(0, 0, 300, 300));

		JPanel centerPanel = new JPanel();

		messageBox = new Messages( message );
		bankPanel = new Bank(bet, bank, bankLabel, betLabel, submit, messageBox);
		button = new Buttons(hit,stand,doubleDown,split,deal);
		player = new Player(d);

		JPanel bottomPanel = new JPanel();
		bottomPanel.setBounds(new Rectangle(0, 100, 300, 300));

	//	main.add( dealer );
		topPanel.add( dealer );

		centerPanel.add( bankPanel );
		centerPanel.add( messageBox );
		centerPanel.add( button );

		bottomPanel.add( player );

		main.add( topPanel );
		main.add( centerPanel );
		main.add( bottomPanel );

	//	main.add( player );

    	newGame.addActionListener(new NewGame(player, dealer, bankPanel, d, messageBox, button));
    	fileMenu.add(newGame);
    	fileMenu.add(quit);

		bl.initBL( player, dealer, bankPanel, messageBox, button, d );

	//	pane.add( startBildLabel ); 		 	// lägger grafiken i spelpanelen

		pane.add( main );

		frame.pack();
		frame.setVisible(true);
	}

/* ===============================================
	main()

	Pre:  inget
	Post: Skapar GUI och startar spelet

   =============================================== */
	public static void main( String[] args )
	{
		JFrame.setDefaultLookAndFeelDecorated(true);
		Blackjack t = new Blackjack();

	}
}
BrimbaMedlem sedan dec. 19995 875 inlägg
#2

Prova med detta då?

topPanel.setPreferredSize(new Dimension(300, 200));
topPanel.setSize(300, 200);
topPanel.add( dealer ); 

centerPanel.add( bankPanel ); 
centerPanel.add( messageBox ); 
centerPanel.add( button ); 

bottomPanel.setPreferredSize(new Dimension(300, 200));
bottomPanel.setSize(300, 200);
bottomPanel.add( player ); 

main.add( topPanel ); 
main.add( centerPanel ); 
main.add( bottomPanel );
mikael_aMedlem sedan mars 2000475 inlägg
#3

naje, de blev större, men placerade sig till vänster och respekive till höger om centerPlane jag vill ha dem över respektive under...

BrimbaMedlem sedan dec. 19995 875 inlägg
#4

Du bör ha en layouthanterare på panelen main exempelvis en BorderLayout där du placerar dina första paneler i, exempelvis:


topPanel.add( dealer ); 

centerPanel.add( bankPanel ); 
centerPanel.add( messageBox ); 
centerPanel.add( button ); 

bottomPanel.add( player ); 

main.setLayout(new BorderLayout());
main.add("North", topPanel ); 
main.add("Center", centerPanel ); 
main.add("South", bottomPanel );

Det bör fungera bra. Men jag vet inte exakt hur du vill ha det, och det kan vara lite lurigt att få till det ibland. Man måste tänka noga hur man vill ha det, innan man sätter igång. Då blir det mycket enklare sedan :)

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)