2013-05-03 3 views
0

поэтому мой код запрашивает у пользователя ввод. затем преобразует temp. должен быть простым, но мой код не работает. Он не выводит мою таблицу 3, она просто ничего не делает. это единственная проблема, я имею с моим кодом, я просто не знаю, как это исправитьJLabel не отображает текст в GUI

import javax.swing.*; 


    public class FahrenheitPanel extends JPanel 

    { 

private JLabel lable1; 
private JLabel lable2; 
private JLabel lable3; 
private JTextField fahrenheit; 
    public FahrenheitPanel() 

    { 

    lable1 = new JLabel ("Enter Fahrenheit temperature:"); 

    lable2 = new JLabel ("Temperature in Celsius: "); 

    fahrenheit = new JTextField (5); 

    fahrenheit.addActionListener (new TempListener()); 
    add (lable1); 
    add (fahrenheit); 
    add (lable2);  


    setPreferredSize (new Dimension(300, 75)); 

} 

private class TempListener implements ActionListener 

{ 
    public void actionPerformed (ActionEvent event) 

    { 

    int fahrenheitTemp, celsiusTemp; 

    String text = fahrenheit.getText(); 
    fahrenheitTemp = Integer.parseInt (text); 

    celsiusTemp = (fahrenheitTemp-32) * 5/9; 
    lable3.setText(Integer.toString (celsiusTemp)); 
     add (lable3);       
    } 
} 


    public static void main (String[] args) 
    { 
    JFrame frame = new JFrame ("Fahrenheit to Celsius Converter"); 

    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    FahrenheitPanel panel = new FahrenheitPanel(); 
    frame.getContentPane().add(panel); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
    } 
+2

Используйте последовательный и логический отступ для кодовых блоков. Отступ кода предназначен для того, чтобы помочь людям понять поток программы! –

ответ

2

Не добавляйте labl3 JLabel в свой GUI в методе actionPerformed(...) как делать это означает, что вы будете пытаться добавьте JLabel столько раз, сколько вызывается метод слушателя, и вам нужно будет повторно переустановить и перерисовать без необходимости. Вместо этого добавьте этот JLabel в свой графический интерфейс с самого начала в конструкторе класса.

+1

@ ser2264202 использовать JFormattedTextField с форматированием чисел вместо простого JTextField – mKorbel

2

Третья метка должна быть добавлена ​​в рамку с самого начала с некоторым текстом по умолчанию.

Если вы добавляете ярлык динамически, то контейнер должен быть подтвержден (путем вызова validate() на панели).

Кроме того, вы не должны устанавливать предпочтительный размер панели. Менеджер компоновки вычисляет предпочтительный размер на основе компонентов, которые он содержит.

2

Прежде всего, я преобразовал значение Integer в Double, потому что у него могут быть двойные номера, Во-вторых, вы не добавляете свою метку в свой класс, это проблема ... запустите свою программу, если есть какие-либо проблемы , не стесняйтесь спрашивать меня

import java.awt.Dimension; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 

    import javax.swing.*; 


    public class FahrenheitPanel extends JPanel 

     { 

      private JLabel lable1; 
      private JLabel lable2; 
      private JLabel lable3; 
      private JTextField fahrenheit; 

    public FahrenheitPanel() 

     { 

      lable1 = new JLabel ("Enter Fahrenheit temperature:"); 

     lable2 = new JLabel ("Temperature in Celsius: "); 

     lable3 = new JLabel(""); 
     fahrenheit = new JTextField (5); 

     fahrenheit.addActionListener ((ActionListener) new TempListener()); 
     add (lable1); 
     add (fahrenheit); 
     add (lable2);  
     add(lable3); 

     setPreferredSize (new Dimension(250, 75)); 

     } 

    private class TempListener implements ActionListener 

     { 
      public void actionPerformed (ActionEvent event) 

       { 

        double fahrenheitTemp, celsiusTemp; 

        String text = fahrenheit.getText(); 
        fahrenheitTemp = Double.parseDouble (text); 

        celsiusTemp = ((fahrenheitTemp-32) * 5/9); 
        lable3.setText(Double.toString (celsiusTemp)); 

       } 
     } 


public static void main (String[] args) 
{ 
     JFrame frame = new JFrame ("Fahrenheit to Celsius Converter"); 

     frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     FahrenheitPanel panel = new FahrenheitPanel(); 
     frame.getContentPane().add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
} 
} 
Смежные вопросы