2015-02-13 6 views
0

Имейте завершенный скомпилированный код, следуя примерам в моей книге, и теперь я потерял попытку изменить настройку JPanel, чтобы показать 2 столбца для ввода текста из четырех тестов и их веса ... Что отображает это испытание и вес сложены друг на друга ....Java GUI полностью потерян

мой код ниже:

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

public class WeightedAverage extends JFrame 
{   // Defines all variables 
    private JLabel Test1, Test2, 
      Test3, Test4, Weight1, Weight2, Weight3, Weight4, ansa; 

    private JTextField testa, testb, testc, testd, weighta, weightb, weightc, weightd, ans; 

    private JButton calculateB, exitB; 

    private CalculateButtonHandler cbHandler; 

    private ExitButtonHandler ebHandler; 
      // Sets programs dimensions 
    private static final int WIDTH = 500; 
    private static final int HEIGHT = 600; 

    public WeightedAverage() 
    { 
      // Create labels of text fields 
    Test1 = new JLabel("First Test Score: ", 
          SwingConstants.RIGHT); 
    Weight1 = new JLabel("And It's Weight: ", 
          SwingConstants.RIGHT); 

    Test2 = new JLabel("Second Test Score: ", 
         SwingConstants.RIGHT); 
    Weight2 = new JLabel("And It's Weight: ", 
         SwingConstants.RIGHT); 

    Test3 = new JLabel("Third Test Score: ", 
         SwingConstants.RIGHT); 
    Weight3 = new JLabel("And It's Weight: ", 
         SwingConstants.RIGHT); 

    Test4 = new JLabel("Fourth Test Score: ", 
         SwingConstants.RIGHT); 
    Weight4 = new JLabel("And It's Weight: ", 
         SwingConstants.RIGHT); 


     ansa = new JLabel("You may not want to see this: ", 
         SwingConstants.RIGHT); 


      //Create input text fields 
    testa = new JTextField(10); 
    weighta = new JTextField(10); 
    testb = new JTextField(10); 
    weightb = new JTextField(10); 
    testc = new JTextField(10); 
    weightc = new JTextField(10); 
    testd = new JTextField(10); 
    weightd = new JTextField(10); 




      //create Calculate Button 
    calculateB = new JButton("Crack that whip!"); 
    cbHandler = new CalculateButtonHandler(); 
    calculateB.addActionListener(cbHandler); 

      //Create Exit Button 
    exitB = new JButton("Begone!"); 
    ebHandler = new ExitButtonHandler(); 
    exitB.addActionListener(ebHandler); 

      //Creat Answer Field 
    ans = new JTextField(10); 

      //Set the title of the window 
    setTitle("Yes master"); 

      //Get the container 
    Container pane = getContentPane(); 

      //Set the layout 
    pane.setLayout(new GridLayout(10,4)); 

      //Place all items created 
    pane.add(Test1); 
    pane.add(testa); 
    pane.add(Weight1); 
    pane.add(weighta); 

    pane.add(Test2); 
    pane.add(testb); 
    pane.add(Weight2); 
    pane.add(weightb); 

    pane.add(Test3); 
    pane.add(testc); 
    pane.add(Weight3); 
    pane.add(weightc); 

    pane.add(Test4); 
    pane.add(testd); 
    pane.add(Weight4); 
    pane.add(weightd); 

    pane.add(calculateB); 
    pane.add(exitB); 
    pane.add(ansa); 
    pane.add(ans); 



      //set the size of the window and display it 
    setSize(WIDTH,HEIGHT); 
    setVisible(true); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    private class CalculateButtonHandler implements ActionListener 
    { 
    public void actionPerformed(ActionEvent e) 
    { 
     double t1, t2, t3, t4, w1, w2, w3, w4, avg1, avg2, avg3, avg4, favg; 

     t1 = Double.parseDouble(testa.getText()); 
     w1 = Double.parseDouble(weighta.getText()); 
     t2 = Double.parseDouble(testb.getText()); 
     w2 = Double.parseDouble(weightb.getText()); 
     t3 = Double.parseDouble(testc.getText()); 
     w3 = Double.parseDouble(weightc.getText()); 
     t4 = Double.parseDouble(testd.getText()); 
     w4 = Double.parseDouble(weightd.getText()); 


     // Calculations Required to output weighted average 
     avg1 = t1 * w1; 
     avg2 = t2 * w2; 
     avg3 = t3 * w3; 
     avg4 = t4 * w4; 
     favg = avg1 + avg2 + avg3 + avg4; 
     // Outputs the weighted Average 
     ans.setText("" + favg); 

    } 
    } 

    private class ExitButtonHandler implements ActionListener 
    { 
     // Exits the program 
    public void actionPerformed(ActionEvent e) 
    { 
     System.exit(0); 
    } 
    } 

    public static void main(String[] args) 
    { 
    WeightedAverage weight = new WeightedAverage(); 
    } 
} 

любая помощь оценили

+0

Вы используете визуальный редактор? Он будет поддерживать drag & drop и немедленную обратную связь. –

ответ

4

Вы хотите 5 строк вместо 10. new GridLayout(5, 4), будет работать, но даже проще использовать 0 для строк - это означает, что n при необходимости:

pane.setLayout(new GridLayout(0, 4)); 

Не имеет отношения к проблеме, но указание размеров окон не рекомендуется. Вместо этого используйте pack() перед показом окна. Это приводит к тому, что размер окна определяется автоматически, приспосабливаясь к предпочтительному размеру панели содержимого.

... 
pack(); 
setVisible(true); 

Наконец, свинг однопоточный, а также доступ и создание свинг компонентов должно быть сделано только в event dispatch thread, так что вы должны создать графический интерфейс, как:

public static void main(String[] args) 
{ 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      WeightedAverage weight = new WeightedAverage(); 
     } 
    }); 
} 
Смежные вопросы