Nieprawidłowo wyświetlana grafika

0

Witam wszystkich programistów :)

Mam problem z wyświetlaniem aplikacji w okienkach typu JFrame.

Na zdjęciu "poprawie"prawidlowe.png jest pokazana jak powinna wyglądać aplikacja w podglądzie w Eclipse.
Ale jak ją uruchomię przez compliator to wyglądazłe.png ona już nie tak jak trzeba (sprawdzałem również u kolegi na kompie i ma podobnie).
Chodzi mi przede wszystkim o JSlider który jest ukryty (dopiero po najechaniu myszką uwidoczni się w oknie) i również o JLabel który w ogóle się nie pojawił. Nie mam pojęcia jaki jest tego problem.
Proszę o w miarę szybką pomoc.

Ten problem pojawia się nie tylko w tej aplikacji dlatego myślę, że to nie może być spowodowane przez źle napisany kod

Z góry dziękuje za każdą pomocą odpowiedź.

W załączniku wstawiłem zdjęcia jak to wygląda.

0

Byly juz podobne tematy na forum i wówczas przyczyna bylo o ile pamiętam bledne kodowanie znakow w windowsie. Pokaz moze kod dla pewności

0
 import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.SwingConstants;



class OknoGlowne extends JFrame implements Runnable{
	private static final long serialVersionUID = 1L;
	
	int dots=5;	// ilosc kropek
	int aX, aY;		// x i y jabłbka
	boolean apple=false;	
	boolean czysc = false;
	boolean ramka=false;
	Random r;
	
	JButton zacznij;
	JSlider slider;
	JTextField koniec;
	
	ArrayList<Integer> x,y;
	Thread t;
	
	boolean left=false,right=true,up=false,down=false;
	
	public OknoGlowne(String title){
		super(title);
		
		Dimension location = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());	// 
		setSize(600, 500);																	// 
		setResizable(false);  																//
		setLayout(null);																	// ustawienia okna 
		setLocation((location.width-600)/2,(location.height-500)/2);						// 
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);										// 
		this.setBackground(Color.BLACK);                                        	        // 
		
		x = new ArrayList<Integer>();            // 
		y = new ArrayList<Integer>();            // 
		
		zacznij = new JButton("NEW");
		zacznij.addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent me) {
				if(!t.isAlive()){
					t.start();
				}
				zacznij.setEnabled(false);
				slider.setEnabled(false);
				odnowa();
			}
		});
		zacznij.setAlignmentX(Component.CENTER_ALIGNMENT);
		zacznij.setBounds(510, 10, 80, 50);
		add(zacznij);
		
		
		slider = new JSlider();
		slider.setMinorTickSpacing(1);
		slider.setPaintTicks(true);
		slider.setPaintLabels(true);
		slider.setValue(100);
		slider.setMinimum(1);
		slider.setMaximum(10);
		slider.setMajorTickSpacing(2);
		slider.setBounds(510, 130, 90, 120);
		slider.setOrientation(SwingConstants.VERTICAL);
		slider.setEnabled(true);
		add(slider);
		
		koniec = new JTextField("KONIEC GRY");
		koniec.setFont(new Font("Tekton Pro", Font.BOLD | Font.ITALIC, 60));
		koniec.setForeground(Color.blue);
		koniec.setBackground(getBackground());
		koniec.setBounds(126, 185, 310, 109);
		koniec.setEnabled(false);
		koniec.setEditable(false);
		add(koniec);
		
		for(int i =0;i<(dots)*10;i+=10){
			x.add(100-i);
			y.add(250);
		}
		
		t = new Thread(this);
		
		r = new Random();

	}
	public void paint(Graphics g){
		if(ramka==false){
			for(int i = 0;i<500;i+=10){
				g.setColor(Color.white);
				g.fillRect(i, 20, 10, 10);
				g.fillRect(0, i, 10, 10);				// rysowanie granic
				g.fillRect(500, i, 10, 10);
				g.fillRect(i, 490, 10, 10);
			}
		}
		
		g.setColor(Color.GREEN);
		g.fillOval(x.get(0), y.get(0), 10, 10);
		
		for(int i=1;i<dots-1;i++){
			g.setColor(new Color(i*2,255-i*2,i*2));
			g.fillRect(x.get(i), y.get(i), 10, 10);
			
			g.setColor(new Color(0,0,0));                            			
			g.fillOval(x.get(i), y.get(i), 10, 10);
		}

		g.setColor(getBackground());
		g.fillRect(x.get(x.size()-1), y.get(y.size()-1), 10, 10);
		
		if(apple == true){
			g.setColor(Color.RED);
			g.fillOval(aX, aY, 10, 10);
		}
		
		if(czysc==true){
			for(int i=0;i<dots-1;i++){
				g.setColor(getBackground());                            			
				g.fillRect(x.get(i), y.get(i), 10, 10);
				g.fillRect(aX, aY, 10, 10);
				g.drawRect(126, 185, 310, 109);
			}
			koniec.setForeground(getBackground());
			czysc=false;
		}
		
	}
	public void run() {
		setFocusable(true);
		sterowanie sterowanie = new sterowanie(this);
		addKeyListener(sterowanie);
		
		synchronized (this) {
			while(true){
				for (int i = dots-1;i>0;i--){     //
					x.set(i, x.get(i-1));         //
					y.set(i, y.get(i-1));         //
				}								  //
				                                  //
				if(sterowanie.gora==true){        //
					y.set(0, y.get(0)-10);        //
				}                                 //
				if(sterowanie.dol==true){         // ustawianie współrzędnych
					y.set(0, y.get(0)+10);        //
				}                                 //
				if(sterowanie.lewo==true){        //
					x.set(0, x.get(0)-10);        //
				}                                 //
				if(sterowanie.prawo==true){       //
					x.set(0, x.get(0)+10);        //
				}                                 //
				
				if(apple == false){
					apple=true;
					aX = r.nextInt(48)*10+10;
					aY = r.nextInt(45)*10+30;
				}
				if(aX==x.get(0) && aY==y.get(0)){
					apple=false;
					x.add(-50);
					y.add(-50);
					dots++;
				}
				
				repaint();
				try {
					Thread.sleep(250/slider.getValue());
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				
				if ( (x.get(0) == 0 || x.get(0) == 500 || y.get(0) == 20 || y.get(0) == 490) || najechanie()){
					ramka=false;
					zacznij.setEnabled(true);
					try {
						czysc = true;
						koniec.setEnabled(true);
						slider.setEnabled(true);
						wait();
						koniec.setEnabled(false);
						repaint();
						koniec.setForeground(Color.BLUE);
						Thread.sleep(10);
						x.clear(); y.clear();
						dots=5;
						for(int i =0;i<(dots)*10;i+=10){
							x.add(100-i);
							y.add(250);
							
							dots=5;
							apple=false;	
							sterowanie.lewo=false;sterowanie.prawo=true;sterowanie.dol=false;sterowanie.gora=false;
						}	
					} catch (InterruptedException e) {
						e.printStackTrace();
					}			
				}
			}
		}
	}
	synchronized void odnowa(){
		notify();
	}
	boolean najechanie(){
		for (int i = 1;i<dots;i++){
			if( (x.get(0).equals(x.get(i))) && y.get(0).equals(y.get(i)) )
				return true;
		}
		return false;
	}
}

class sterowanie implements KeyListener {                                   //
	OknoGlowne og;                                                          //
	boolean lewo=false,prawo=true,dol=false,gora=false;                     //
	sterowanie(OknoGlowne og){                                              //
		this.og=og;                                                         //
	}                                                                       //
	public void keyPressed(KeyEvent e) {                                    //
		int key = e.getKeyCode();                                           //
		if(key == KeyEvent.VK_UP && gora==false && dol==false){             //
				lewo=false;                                                 //
				prawo=false;                                                //
				dol=false;                                                  //
				gora=true;	                                                //
		}                                                                   //
		if(key == KeyEvent.VK_DOWN && gora==false && dol==false){           // sterowanie
				lewo=false;                                                 //
				prawo=false;                                                //
				dol=true;                                                   //
				gora=false;	                                                //
		}                                                                   //
		if(key == KeyEvent.VK_LEFT && lewo==false && prawo==false){         //
				lewo=true;                                                  //
				prawo=false;                                                //
				dol=false;                                                  //
				gora=false;	                                                //
		}                                                                   //
		if(key == KeyEvent.VK_RIGHT && lewo==false && prawo==false){        //
				lewo=false;                                                 //
				prawo=true;                                                 //
				dol=false;                                                  //
				gora=false;	                                                //
		}                                                                   //
	}                                                                       //
	public void keyReleased(KeyEvent e) {                                   //
	}                                                                       //
	public void keyTyped(KeyEvent e) {                                      //
	}                                                                       //
}                                                                           //
                                                               
public class Poczatek {                                        
	public static void main (String args[]){                   
		JFrame j = new OknoGlowne("Snake");                     // inicjacja okna (poczatek)
		
		JLabel lblNewLabel = new JLabel("Punkty:");
		lblNewLabel.setForeground(Color.LIGHT_GRAY);
		lblNewLabel.setFont(new Font("Tekton Pro Cond", Font.BOLD, 20));
		lblNewLabel.setBounds(514, 63, 70, 44);
		j.getContentPane().add(lblNewLabel);
		
		JLabel lblNewLabel_1 = new JLabel("540");
		lblNewLabel_1.setForeground(Color.GREEN);
		lblNewLabel_1.setFont(new Font("Sylfaen", Font.BOLD | Font.ITALIC, 20));
		lblNewLabel_1.setBounds(514, 94, 70, 33);
		j.getContentPane().add(lblNewLabel_1);
		
		j.setVisible(true);                                
                                                           
	}                                                      
}                                                           
0

Kod jest zły. W oknie (JFrame) albo malujesz metodą paint, albo rozmieszczasz komponenty metodą add. A nie jedno i drugie jednocześnie. Spróbuj podzielić okno na dwa panele - lewy czarny do grania, z metodą rysującą paintComponent i prawy z przyciskami i sliderem i metodą add.
Kod jest mało uniwersalny - źle, na sztywno ustawiane są rozmiary komponentów. Na moim komputerze teksty "Punkty" i "Koniec Gry" są obcięte.

0

Nie wiedziałem, że tak nie można robić.
Dzięki za pomoc. Pomogło.

Ale problem nie jest całkowicie rozwiązany bo nadal ta grafika nie wygląda tak jak powinna.
Nie wyglądają one tak kształtnie.
Przykłady w załącznikach.

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