1

我有一个选项卡需要在程序运行时使用其类中的两种方法之一进行更新,因此我在方法中添加了组件,但我无法显示其中的任何一个。据我所知,这是因为它们在构造函数之外,我过去常常在方法中声明它们,但移动它以尝试解决问题。任何帮助将不胜感激。

抱歉,这有点混乱,我一直在尝试解决问题,有点盲目。

代码也可以正常编译,并且代码中的 println 输出按预期显示。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package assgui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.io.*;
/**
 *
 * @author Hugh
 */
public class ResultPanel extends JPanel {

    static String[][] activityString = new String[31][2];
    static String[][] foodString = new String[36][2];

        String weighstr, foodstr, servstr, kjstr, actstr, hourstr, minstr, metstr;

        JLabel uw = new JLabel ("User Weight:  ");
        JLabel weigh = new JLabel (weighstr);
        JLabel kg = new JLabel("  kg");
        JLabel sel1 = new JLabel("Food:  ");
        JLabel sel2 = new JLabel(foodstr);
        JLabel sel3 = new JLabel("  -  kj  ");
        JLabel sel4 = new JLabel(kjstr);
        JLabel sel5 = new JLabel("  ,  Servings:  ");
        JLabel sel6 = new JLabel(servstr);
        JLabel sel7 = new JLabel("Activity for comparison:  ");
        JLabel sel8 = new JLabel(actstr);
        JLabel sel9 = new JLabel("  Time required to balance:  ");
        JLabel sel10 = new JLabel(hourstr);
        JLabel sel11 = new JLabel("  hours");
        JLabel sel12 = new JLabel(minstr);
        JLabel sel13 = new JLabel("  minutes");
        JLabel smlspace = new JLabel("          ");
        JLabel medspace = new JLabel("               ");
        JLabel lrgspace = new JLabel("                         ");

        JLabel auw = new JLabel("User Weight:  ");
        JLabel aweigh = new JLabel(weighstr);
        JLabel akg = new JLabel("  kg");
        JLabel asel1 = new JLabel("Activity:  ");
        JLabel asel2 = new JLabel(actstr);
        JLabel asel3 = new JLabel("  -  MET  ");
        JLabel asel4 = new JLabel(metstr);
        JLabel asel5 = new JLabel("  ,  Duration:  ");
        JLabel asel6 = new JLabel(hourstr);
        JLabel asel7 = new JLabel("  hour  ");
        JLabel asel8 = new JLabel(minstr);
        JLabel asel9 = new JLabel("  minutes  ");
        JLabel asel10 = new JLabel("Food for comparison:  ");
        JLabel asel11 = new JLabel(foodstr);
        JLabel asel12 = new JLabel("  Servings to balance:  ");
        JLabel asel13 = new JLabel(servstr);
        JLabel asmlspace = new JLabel("          ");
        JLabel amedspace = new JLabel("               ");
        JLabel alrgspace = new JLabel("                         ");

        Public ResultPanel() {
        setBackground(Color.GREEN);
        setPreferredSize(new Dimension(650, 600));
        {

    public void activityPaint (String[][] actstring, String[][] foodstring, double        weight, int activity, int hour, int min, int food, double servings) {

        System.out.println("act1");
        weighstr = Double.toString(weight);
        actstr = activityString[activity][0];
        hourstr = Integer.toString(hour);
        minstr = Integer.toString(min);
        metstr = activityString[activity][1];
        foodstr = foodString[food][0];
        servstr = Double.toString(servings);

        add(lrgspace);
        add(uw);
        add(weigh);
        add(kg);
        add(medspace);
        add(sel1);
        add(sel2);
        add(sel3);
        add(sel4);
        add(sel5);
        add(sel6);
        add(sel7);
        add(sel8);
        add(sel9);
        add(sel10);
        add(sel11);
        add(sel12);
        add(sel13);

    }

    public void foodPaint(String[][] foodstring, String[][] actstring, double weight, int food, int servings, int activity, int hour, int min) {

        System.out.println("food1");
        weighstr = Double.toString(weight);
        foodstr = foodString[food][0];
        servstr = Integer.toString(servings);
        kjstr = foodString[food][1];
        actstr = activityString[activity][0];
        hourstr = Integer.toString(hour);
        minstr = Integer.toString(min);


        add(lrgspace);
        add(uw);
        add(weigh);
        add(kg);
        add(medspace);
        add(sel1);
        add(sel2);
        add(sel3);
        add(sel4);
        add(sel5);
        add(sel6);
        add(sel7);
        add(sel8);
        add(sel9);
        add(sel10);
        add(sel11);
        add(sel12);
        add(sel13);

    }

}
4

1 回答 1

1

您创建此 JPanel 的主要方法(或任何方法)是否也调用了 activityPaint(...) 和 foodPaint(...) 方法?如果没有调用这些方法,那么它们将永远不会被添加到面板中。如果您希望在创建 JPanel 时添加所有内容,那么您必须让构造函数调用 activityPaint() 和 foodPaint()。

如果在发生其他事情(如用户输入)之前无法设置 JLables 的值,那么您可以在创建 JPanel 时添加组件,然后稍后调用 setText(...) 方法。只要确保您这样做也可以设置大小,因为更改文本会产生影响。我更喜欢使用nameofjpanel .setSize( nameofjpanel .getPreferredSize())。

希望这对您有所帮助,我并没有完全错过您在这里的目的。

于 2012-06-01T14:47:57.910 回答