JButtons en JPanels verdwijnen...

Status
Niet open voor verdere reacties.

gast0140

Gebruiker
Lid geworden
12 nov 2009
Berichten
83
Gegroet programmeurs,

Ik wilde een simpele applicatie maken voor de speluitbreiding "Specialisten van Catan", maar
mijn JButtons verdwijnen telkens en komen terug als mijn muis eroverheen beweegt EN
mijn JPanel (roze; werkt enkel bij de eerste rij(donkergroen)) verdwijnt ook als er een verschil van meer dan 1 is tussen de speler met de meeste punten en de speler met de eennameeste punten.

Mijn applicatie is een soort tabel waarbij in de bovenste rij de spelers staan en in de eerste colom de te verkrijgen grondstoffen.
Om te zien wat ik bedoel kun je hier tijdelijk de .jar downloaden.

Ik hoor het graag als hier een oplossing voor is, of als het nodig is om de code bij te plaatsen.
gast0140
 
Ik maak volgens mij geen gebruik van repaint of revalidate...

Hier is mijn code, het staat in een default package en is de enige Class:
Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.*;

/* Updates and Questions:
 * ?Waarom blijven niet alle knoppen bovenop liggen?
 * ---
 * UPDATE: Handelshavens erinzetten
 * !!! UPDATE: players en resources toevoegen/verwijderen en van plaats veranderen {aanpassen van "playerAmount"; "resourceAmount"; "playerColors"; "resourceColors"}
 * UPDATE: namen van players en resources toevoegen en kunnen veranderen
 * */

public class Table implements ActionListener, ItemListener{
	
	final static int windowWidth = 450, windowHeight = 600;
	final static Dimension windowSize = new Dimension(windowWidth, windowHeight);
	
	int playerAmount = 4;
	int resourceAmount = 6;
	
	public Color darkGreen = new Color(0, 100, 0);
	public Color brown = new Color(100, 50, 0);
	public Color gold = new Color(255, 140, 12);
	
	int cellWidth = windowWidth/(playerAmount+1);
	int cellHeight = windowHeight/(resourceAmount+1);
	Dimension cellSize = new Dimension(cellWidth, cellHeight);
	
	JPanel[] playerPanels = new JPanel[playerAmount];
	JPanel[] resourcePanels = new JPanel[resourceAmount];
	JPanel[] specialistPanels = new JPanel[resourceAmount];
	
	JLabel[][] scoreLabels = new JLabel[playerAmount][resourceAmount];
	JButton[][] addButtons = new JButton[playerAmount][resourceAmount];
	JButton[][] substractButtons = new JButton[playerAmount][resourceAmount];
	
	/*!!! This isn't compiled with a variety of players !!!
	 *!!! And neither with a variety of resources !!!*/
	int[] scoresPlayer1 = {0, 0, 0, 0, 0, 0};
	int[] scoresPlayer2 = {0, 0, 0, 0, 0, 0};
	int[] scoresPlayer3 = {0, 0, 0, 0, 0, 0};
	int[] scoresPlayer4 = {0, 0, 0, 0, 0, 0};
	int lastWoodHighscore = 0;
	
	Color[] playerColors = {
			Color.blue,
			Color.orange,
			Color.red,
			Color.white,
			Color.pink,
			brown,
			Color.green
	};
	Color[] resourceColors = {
			darkGreen,
			Color.green,
			Color.gray,
			Color.yellow,
			brown,
			gold
	};
	
	JPanel basicPanel;
	
	
    public static void main(String[] args){
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        SwingUtilities.invokeLater(new Runnable(){
        	public void run() {
        		createAndShowGUI();
        	}
        });
    }
    private static void createAndShowGUI(){
    	JFrame frame = new JFrame("Catan Specialisten App");
        frame.setSize(windowSize);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setAlwaysOnTop(true);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        Table table = new Table();
        frame.setContentPane(table.createContentPane());
    }
    
	public JPanel createContentPane() {
		basicPanel = new JPanel();
		basicPanel.setOpaque(true);
    	basicPanel.setLayout(null);
    	basicPanel.setBackground(Color.black);
    	
    	createPlayerPanels();
    	createResourcePanels();
    	createScorePanels();
    	createSpecialistIcons();
    	
    	return basicPanel;
	}
	public void createPlayerPanels(){
		for(int p=1; p<playerAmount+1; p++){
    		JPanel player = new JPanel();
    		player.setLocation(p*cellWidth, 0);
    		player.setSize(cellSize);
    		player.setBackground(playerColors[p-1]);
    		basicPanel.add(player);
    	}
    	System.out.println(playerAmount+" Players added");
	}
	public void createResourcePanels(){
		for(int r=1; r<resourceAmount+1; r++){
    		JPanel resource = new JPanel();
    		resource.setLocation(0, r*cellHeight);
    		resource.setSize(cellSize);
    		resource.setBackground(resourceColors[r-1]);
    		basicPanel.add(resource);
    	}
    	System.out.println(resourceAmount+" Resources added");
	}
	public void createScorePanels(){
		for(int p=1; p<playerAmount+1; p++){
    		for(int r=1; r<resourceAmount+1; r++){
    			JLabel scoreLabel = new JLabel("0");
    			scoreLabel.setOpaque(true);
    			scoreLabel.setHorizontalAlignment(JLabel.CENTER);
    			scoreLabel.setLocation(p*cellWidth, r*cellHeight);
    			scoreLabel.setSize(cellSize);
    			scoreLabel.setBackground(Color.gray);
    			basicPanel.add(scoreLabel);
    			scoreLabels[p-1][r-1] = scoreLabel;
    			
    			JButton add = new JButton();
    			add.setLocation(p*cellWidth+40+10, r*cellHeight+40);
    			add.setSize(10, 10);
    			add.setBackground(Color.green);
    			add.addActionListener(this);
    			basicPanel.add(add);
    			basicPanel.setComponentZOrder(add, 0);
    			addButtons[p-1][r-1] = add;
    			
    			JButton substract = new JButton();
    			substract.setLocation(p*cellWidth+40-20, r*cellHeight+40);
    			substract.setSize(10, 10);
    			substract.setBackground(Color.red);
    			substract.addActionListener(this);
    			basicPanel.add(substract);
    			basicPanel.setComponentZOrder(substract, 0);
    			substractButtons[p-1][r-1] = substract;
    		}
    	}
	}
	public void createSpecialistIcons(){
		for(int r=1; r<resourceAmount+1; r++){
    		JPanel specialist = new JPanel();
    		specialist.setLocation(cellWidth-(cellWidth/4), (r+1)*(cellHeight)-(cellWidth/4));
    		specialist.setSize(cellWidth/4, cellHeight/4);
    		specialist.setBackground(Color.pink);
    		basicPanel.add(specialist);
    		basicPanel.setComponentZOrder(specialist, 0);
    		specialistPanels[r-1] = specialist;
    	}
    	System.out.println(resourceAmount+" Specialists added");
	}
	
	//Not yet programmed the shipyards!!!
	public void itemStateChanged(ItemEvent event){
		
	}
	public void actionPerformed(ActionEvent event){
		for(int p=1; p<playerAmount+1; p++){
    		for(int r=1; r<resourceAmount+1; r++){
    			if(event.getSource() == addButtons[p-1][r-1]){
    				System.out.println("You hit the \"ADD\" button of player "+p+" at the resource "+r);
					/*!!! This ain't compatible with changing number of players !!!*/
    				switch(p){
    				case 1:
    					scoresPlayer1[r-1] += 1;
    					scoreLabels[p-1][r-1].setText(""+scoresPlayer1[r-1]);
    					break;
    				case 2:
    					scoresPlayer2[r-1] += 1;
    					scoreLabels[p-1][r-1].setText(""+scoresPlayer2[r-1]);
    					break;
    				case 3:
    					scoresPlayer3[r-1] += 1;
    					scoreLabels[p-1][r-1].setText(""+scoresPlayer3[r-1]);
    					break;
    				case 4:
    					scoresPlayer4[r-1] += 1;
    					scoreLabels[p-1][r-1].setText(""+scoresPlayer4[r-1]);
    					break;
    				default:
    					System.out.println("It seems you hit a button without player");
    				}
				}
				if(event.getSource() == substractButtons[p-1][r-1]){
					System.out.println("You hit the \"SUBSTRACT\" button of player "+p+" at the resource"+r);
					switch(p){
    				case 1:
    					if(scoresPlayer1[r-1] != 0){
    						scoresPlayer1[r-1] -= 1;
    					}
    					scoreLabels[p-1][r-1].setText(""+scoresPlayer1[r-1]);
    					break;
    				case 2:
    					if(scoresPlayer2[r-1] != 0){
    						scoresPlayer2[r-1] -= 1;
    					}
    					scoreLabels[p-1][r-1].setText(""+scoresPlayer2[r-1]);
    					break;
    				case 3:
    					if(scoresPlayer3[r-1] != 0){
    						scoresPlayer3[r-1] -= 1;
    					}
    					scoreLabels[p-1][r-1].setText(""+scoresPlayer3[r-1]);
    					break;
    				case 4:
    					if(scoresPlayer4[r-1] != 0){
    						scoresPlayer4[r-1] -= 1;
    					}
    					scoreLabels[p-1][r-1].setText(""+scoresPlayer4[r-1]);
    					break;
    				default:
    					System.out.println("It seems you hit a button without player");
    				}
				}
    		}
		}
		System.out.println("Checking who gains each specialist!");
		checkHighestResourceScore();
	}
	public void checkHighestResourceScore(){
		/* Even here isn't compiled with an variety in playerAmount */
		int r=0;
		if(scoresPlayer1[r] > scoresPlayer2[r] && scoresPlayer1[r] > scoresPlayer3[r] && scoresPlayer1[r] > scoresPlayer4[r]){
			System.out.println(" Player 1 has the best wood score!");
			if(lastWoodHighscore != 1){
				specialistPanels[r].setLocation(((r+2)*cellWidth)-(cellWidth/4), (r+2)*(cellHeight)-(cellWidth/4));
				System.out.println("  Location changed of the wood specialist");
			}
			lastWoodHighscore = 1;
		}else if(scoresPlayer2[r] > scoresPlayer1[r] && scoresPlayer2[r] > scoresPlayer3[r] && scoresPlayer2[r] > scoresPlayer4[r]){
			System.out.println(" Player 2 has the best wood score!");
			specialistPanels[r].setLocation(((r+3)*cellWidth)-(cellWidth/4), (r+2)*(cellHeight)-(cellWidth/4));
		}else if(scoresPlayer3[r] > scoresPlayer1[r] && scoresPlayer3[r] > scoresPlayer2[r] && scoresPlayer3[r] > scoresPlayer4[r]){
			System.out.println(" Player 3 has the best wood score!");
			specialistPanels[r].setLocation(((r+4)*cellWidth)-(cellWidth/4), (r+2)*(cellHeight)-(cellWidth/4));
		}else if(scoresPlayer4[r] > scoresPlayer1[r] && scoresPlayer4[r] > scoresPlayer2[r] && scoresPlayer4[r] > scoresPlayer3[r]){
			System.out.println(" Player 4 has the best wood score!");
			specialistPanels[r].setLocation(((r+5)*cellWidth)-(cellWidth/4), (r+2)*(cellHeight)-(cellWidth/4));
		}else{
			System.out.println(" NO-ONE has the best wood score!");
			specialistPanels[r].setLocation(cellWidth-(cellWidth/4), (r+2)*(cellHeight)-(cellWidth/4));
		}
		basicPanel.setComponentZOrder(specialistPanels[r], 0);
	}
	
}

Ik hoop dat je er wijs uit kunt worden en mij een specifiek antwoord kan geven,
gast0140
 
Gegroet programmeurs,

Ik wilde een simpele applicatie maken voor de speluitbreiding "Specialisten van Catan", maar
mijn JButtons verdwijnen telkens en komen terug als mijn muis eroverheen beweegt EN
mijn JPanel (roze; werkt enkel bij de eerste rij(donkergroen)) verdwijnt ook als er een verschil van meer dan 1 is tussen de speler met de meeste punten en de speler met de eennameeste punten.

Mijn applicatie is een soort tabel waarbij in de bovenste rij de spelers staan en in de eerste colom de te verkrijgen grondstoffen.
Om te zien wat ik bedoel kun je hier tijdelijk de .jar downloaden.

Ik hoor het graag als hier een oplossing voor is, of als het nodig is om de code bij te plaatsen.
gast0140
Ja deze verdwijnen en het is dus ook niet verstandig deze nog te gebruiken
best gebruik je nu de fx lib je kan er dan ook css aan koppelen en stylen naar eigen style
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan