Gdy tworzę konwerter w Javie to mam taki zniekształcony obraz aplikacji. Dlaczego tak ?
Wklej kod tej apki.
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
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();
}
});
}
- Umieszczaj kod w znacznikach odpowiednich dla danego języka. Dla Javy
<code class="java"></code>
. - Formatuj swój kod.
- 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:
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łą).