Java 在构造函数外部添加的组件不会出现
我有一个选项卡,在程序运行时需要使用它的类中的两个方法之一进行更新,因此我在方法中添加组件,但无法显示其中任何一个。据我所知,这是因为它们在构造函数之外,我过去常常在方法内部声明它们,但为了解决这个问题,我将其移动了。任何帮助都将不胜感激 很抱歉,这有点混乱,我一直在试图解决这个问题,有点盲目 此外,代码编译良好,并且println输出在代码中按预期显示Java 在构造函数外部添加的组件不会出现,java,swing,layout-manager,Java,Swing,Layout Manager,我有一个选项卡,在程序运行时需要使用它的类中的两个方法之一进行更新,因此我在方法中添加组件,但无法显示其中任何一个。据我所知,这是因为它们在构造函数之外,我过去常常在方法内部声明它们,但为了解决这个问题,我将其移动了。任何帮助都将不胜感激 很抱歉,这有点混乱,我一直在试图解决这个问题,有点盲目 此外,代码编译良好,并且println输出在代码中按预期显示 /* * To change this template, choose Tools | Templates * and open the
/*
* 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);
}
}
创建此JPanel的主方法(或任何方法)是否也调用activityPaint(…)和foodPaint(…)方法?如果不调用这些方法,那么它们似乎永远不会被添加到面板中。如果希望在创建JPanel时添加所有内容,则必须让构造函数调用activityPaint()和foodPaint()
如果在发生其他情况(如用户输入)之前无法设置JLables的值,则可以在创建JPanel时添加组件,然后稍后调用setText(…)方法。只是要确保,如果你这样做,也设置大小,因为改变文本将影响。我更喜欢使用nameofjpanel.setSize(nameofjpanel.getPreferredSize())
希望这对你和我都有帮助。创建此JPanel的主要方法(或任何方法)是否也称为activityPaint(…)和foodPaint(…)方法?如果不调用这些方法,那么它们似乎永远不会被添加到面板中。如果希望在创建JPanel时添加所有内容,则必须让构造函数调用activityPaint()和foodPaint()
如果在发生其他情况(如用户输入)之前无法设置JLables的值,则可以在创建JPanel时添加组件,然后稍后调用setText(…)方法。只是要确保,如果你这样做,也设置大小,因为改变文本将影响。我更喜欢使用nameofjpanel.setSize(nameofjpanel.getPreferredSize())
希望这对您和我都有帮助。我没有完全错过您的目的。使用一个
JTextArea
而不是一堆标签。结果将得到更好的格式和更可靠的结果。是我没有抓住ResultPanel
类的构造函数在哪里,还是你没有指定它?所以问题来了,您在问题标题中谈论的构造函数具体在哪里?
?作为旁白,行ResultPanel a=newresultpanel()代码>是错误的。它创建了一个从未添加到任何内容且从未显示的新面板。出于好奇,为什么这个空字符串附加了JLabel
文本作为JLabel sel3=new JLabel(“-kj”)
,为什么要使用这个邪恶的空格,还有更多的空格?我希望你记住这一点,@AndrewThompson和@HughBurger OP,你可以使用对齐,而不是空格,比如JLabel.LEFT/RIGHT/CENTER
,你可以像JLabel label=new JLabel(“我是一个JLabel”,JLabel.CENTER)
。我希望您没有忘记调用两个方法,它们负责向JPanel
添加组件,即foodPaint(…)和activityPaint(…)
使用单个JTextArea
,而不是大量标签。结果将得到更好的格式和更可靠的结果。是我没有抓住ResultPanel
类的构造函数在哪里,还是你没有指定它?所以问题来了,您在问题标题中谈论的构造函数具体在哪里?
?作为旁白,行ResultPanel a=newresultpanel()代码>是错误的。它创建了一个从未添加到任何内容且从未显示的新面板。出于好奇,为什么这个空字符串附加了JLabel
文本作为JLabel sel3=new JLabel(“-kj”)
,为什么要使用这个邪恶的空格,还有更多的空格?我希望你记住这一点,@AndrewThompson和@HughBurger OP,你可以使用对齐,而不是空格,比如JLabel.LEFT/RIGHT/CENTER
,你可以像JLabel label=new JLabel(“我是一个JLabel”,JLabel.CENTER)
。我希望您没有忘记调用两个方法,它们负责将组件添加到JPanel
中,即foodPaint(…)和activityPaint(…)
我最终将addTab参数移动到我想要激活它们的按钮的ActionListener中,这是一个过于复杂和欠调制的方式来做,但它至少工作。感谢大家的帮助。我最终将addTab参数移动到了我想要激活它们的按钮的ActionListener,这是一种过于复杂和欠调制的方式,但至少可以工作。谢谢大家的帮助。