Wątek przeniesiony 2015-04-12 08:11 z Java przez bogdans.

Okienko aplikacji w Javie

0

Gdy tworzę konwerter w Javie to mam taki zniekształcony obraz aplikacji. Dlaczego tak ?

0

Wklej kod tej apki.

0
 import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;


public class Sprite extends JFrame implements ActionListener
{
	private JLabel lCelcius, lFahrenheit;
	private JTextField tCelcius, tFahrenheit;
	private JButton bKonwertuj;
	private ButtonGroup bgRozmiar;
	private JRadioButton rbCtoF, rbFtoC;
	private ButtonGroup radioPanel;
	private JCheckBox chWielkie;
	private double tempCelcius, tempFahrenheit;
	
	public Sprite(){
		
		
		setSize(300,200);
		setTitle("Przeliczanie stopni Celsjusza na Fahrenheita");
		setLayout(null);
		
		lCelcius= new JLabel("Stopnie Celcjusza: ");
		lCelcius.setBounds(50,50,150,20);
		add(lCelcius);
		
		tCelcius= new JTextField("");
		tCelcius.setBounds(170,20,150,20);
		add(lCelcius);
		tCelcius.addActionListener(this);
		tCelcius.setToolTipText("Podaj temperaturę w stopniach Celsjusza");
		
		lFahrenheit= new JLabel("");
		lFahrenheit.setBounds(170,20,150,20);
		add(lFahrenheit);
		
		tFahrenheit= new JTextField("");
		tFahrenheit.setBounds(170,20,150,20);
		add(tFahrenheit);
		
		bKonwertuj= new JButton("Konwertuj");
		bKonwertuj.setBounds(20,100,150,20);
		add(bKonwertuj);
		bKonwertuj.addActionListener(this);
		
		radioPanel= new ButtonGroup();
		rbCtoF= new JRadioButton("Celcius to Fahrenheit");
		rbCtoF.setBounds(50,150,150,20);
		rbFtoC= new JRadioButton("Fahrenheit to Celcius");
		rbFtoC.setBounds(200,150,150,20);
		
		radioPanel.add(rbCtoF);
		radioPanel.add(rbFtoC);
	}
	
	
	@Override
	public void actionPerformed(ActionEvent e)
	{
		Object źródło= e.getSource();
		if(źródło==bKonwertuj||źródło==tCelcius){
		tempCelcius= Double.parseDouble(tCelcius.getText());
		tempFahrenheit= 32.0 + (9.0/5) * tempCelcius;
		tFahrenheit.setText(String.valueOf(tempFahrenheit));
	} 
	}


	public static void main(String[] args){
		Sprite aplikacja= new Sprite();
		aplikacja.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		aplikacja.setVisible(true);


}
}

//poprawiłem znacznik - bogdans

0

Wygląd jest zniekształcony prawdopodobnie z kilku powodów (choć u mnie wyświetliło się normalnie) - kilka komponentów dodałeś w tym samym miejscu, nakładają się na siebie i gryzą. Poszczególne komponenty dodawałeś metodą Copy'ego-Paste'a i zamiast dodać tCelcius dwukrotnie dodałeś lCelsius - dlatego leci wyjątek. Zainteresuj się używaniem LayoutManagera do rozmieszczania komponentów, tutorial masz tu:
http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html
oraz uruchamianiem aplikacji z interfejsem graficznym w wątku obsługi zdarzeń, np tak:

public static void main(String[] args) {
	javax.swing.SwingUtilities.invokeLater(new Runnable() {
		@Override
		public void run() {
			createAndShowGUI();
		}
	});
} 
0
  1. Umieszczaj kod w znacznikach odpowiednich dla danego języka. Dla Javy <code class="java"></code>.
  2. Formatuj swój kod.
  3. To zniekształcenie, o którym wspomniałeś tyczy się jak rozumiem "rozmazanego" tekstu, a nie bałaganu w oknie rozumianego ogólnie?

U mnie to wygląda tak:

3.jpg

Z jakiej wersji Javy korzystasz?

Gdzieś na stackoverflow czytałem, że swingowe apki dla wersji Javy poniżej 1.7, a i czasem 1.7, mają ze sobą problemy pod Win8.

PS problem może zostać rozwiązany poprzez skorzystanie z jakiegoś zdefiniowanego layoutu. Za setLayout(null) powinieneś dostać pałę (pałą).

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