2016-03-30 26 views
-3

Programımda, düzeltemediğim birkaç küçük sorun yaşıyorum. İlk problemim, ne olursa olsun, JTextFields'ımın (giriş & çıkışı) yüksekliğini değiştiremem. SetPreferredSize yöntemini kullanmayı deneyin ama işe yaramıyor. İkincisi, JLabels'i "Giriş" ve "Çıkış" ı gösteren JTextFields'ımın üstüne nasıl eklerim. Sadece BorderLayout'u nasıl kullanacağımı biliyorum, bu konuyla ilgili, bu yüzden oldukça sınırlıyım. Herhangi bir fikir?Celsius - Fahrenheit GUI Programı [Java]

//Fix size of JTextField temperatureCelsius 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Swing_3 { 
    public static double celsius; 
    public static double farh; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JFrame mainFrame = new JFrame("Temperature Converter"); 

       // Cosmetics 
       mainFrame.setSize(500, 300); 
       mainFrame.setLayout(new BorderLayout()); 
       mainFrame.setLocationRelativeTo(null); 
       mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       // Creating the button, text field, and label 
       JButton convertButton = new JButton("Convert"); 
       final JTextField input = new JTextField(); 
       final JTextField output = new JTextField(); 
       JLabel instructions = new JLabel("This is a temporary line"); 

       // Adding the text field and label along with cosmetics 
       input.setPreferredSize(new Dimension(100, 2)); 
       output.setPreferredSize(new Dimension(100, 2)); 
       input.setHorizontalAlignment(JTextField.CENTER); 
       output.setHorizontalAlignment(JTextField.CENTER); 

       mainFrame.add(convertButton, BorderLayout.SOUTH); 
       mainFrame.add(input, BorderLayout.EAST); 
       mainFrame.add(output, BorderLayout.WEST); 
       mainFrame.add(instructions, BorderLayout.NORTH); 

       convertButton.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
         String tempVar = input.getText(); 
         celsius = Double.valueOf(tempVar); 

         farh = celsius * 1.8 + 32; 

         String tempVar2 = String.valueOf(farh); 
         output.setText(tempVar2); 
        } 
       }); 

       mainFrame.setVisible(true); 
      } 
     }); 
    } 
} 
+2

Neden alanların 2 piksel yüksek olmasını istersiniz? – MadProgrammer

+2

* "Herhangi bir fikir mi?" * - Diğer düzenleri kullanmayı öğrenin – MadProgrammer

+0

Youtube'un iyi eğiticileri vardır. – qazimusab

cevap

-1

Her şeyden önce, GridLayout öğelerini öğrenmek için daha fazla zaman harcamalısınız. BorderLayout, orta kısmına koyduğunuz her şeyi gerecek! Ayrıca, JPanel kullanmayı da unutmayın. GUI uygulamasında çok kullanışlıdırlar.

Size sınırlı bir ilham vermek için kodunuzun bir bölümünü kabaca düzenlerim. Gerisini kendiniz yapmalısınız!

  JPanel panel01 = new JPanel(new GridLayout(2, 1)); 
      final JLabel inputLbl = new JLabel("Input Field:"); 
      final JTextField input = new JTextField(); 
      JPanel panel02 = new JPanel(new GridLayout(2, 1)); 
      final JLabel outputLbl = new JLabel("Output Field:"); 
      final JTextField output = new JTextField(); 
      panel01.add(inputLbl, BorderLayout.NORTH); 
      panel02.add(outputLbl, BorderLayout.NORTH); 
      panel01.add(input,BorderLayout.CENTER); 
      panel02.add(output,BorderLayout.CENTER); 

      JLabel instructions = new JLabel("This is a temporary line"); 

      // Adding the text field and label along with cosmetics 
      panel01.setSize(new Dimension(100, 200)); 
      panel02.setSize(new Dimension(100, 200)); 
      input.setHorizontalAlignment(JTextField.CENTER); 
      output.setHorizontalAlignment(JTextField.CENTER); 
+1

* ".. JPanel'i kullanmayı unutma." * OP'nin verilmiş olması bana göre bir anlam ifade etmiyor, muhtemelen bir JPanel'deki sınır düzenini kullanıyor. OTOH bir şey gibi * "bir sınır düzeninin herhangi bir alanında (veya başka bir düzen) başka bir JPanel (başka bir düzen ile) koyabilirsiniz unutmayın. Bu GUI her parçası için bir düzen kullanmanıza yardımcı olabilir bu bileşenler için en uygun olanıdır. "*' panel01.setSize (yeni Boyut (100, 200)); 'Bir panelin boyutunun ekran boyutlarını tercih edilen boyuttan daha az etkilemesi olasıdır, ancak bkz. .. –

+1

... [Java Swing'de set (Preferred | Maximum | Minimum) Boyut yöntemlerini kullanmamalı mıyım?] (Http://stackoverflow.com/q/7229226/418556) (Evet.) –

+1

'setSize'? Bunu bir şeyler yapmak için mi bekliyorsun? – MadProgrammer