setVisible(true) メソッドを使用して JFrame とそれに含まれるウィジェットを表示する前に、特定のコンソール入力を待機する JFrame サブクラスがあります。ウィジェット (JPanels のサブクラス) は、イテレーターを使用して LinkedList から親 JFrame に追加され、クラス内の別のメソッドを介して LinkedList に追加されます。
プログラムを実行すると、this.setVisible(true) を含むメソッドが繰り返され、何も表示されません。どんな助けでも大歓迎です。以下にコードを貼り付けました。
public class GUI extends JFrame{
class KPanel extends JPanel{ //virtual class for Panels that displayed variable name in titled border
public KPanel(String varName){
TitledBorder varTitle = new TitledBorder(varName +":");
this.setBorder(varTitle);
}
}
private LinkedList<KPanel> buffer; //list containing components to be added to GUI
public GUI(String title){
setTitle(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,300);
buffer = new LinkedList<KPanel>(); //initializes linkedlist buffer
}
public void addBox(String var, String val){
//creates a panel containing a string, adds it to the buffer
KPanel temp = new KPanel(var);
JLabel valLabel = new JLabel(val);
temp.add(valLabel);
buffer.add(temp);
}
public void show(){
int i=0;
int wid_height;
int x = 0;
if ((x = buffer.size()) != 0)
wid_height = this.getHeight()/x; //calculates widget heights for even distribution along frame
else{
System.out.println("No variables set!");
return;
}
System.out.println("buffer: " + buffer.size() + "\nheights: " + wid_height);
Iterator<KPanel> iter = buffer.iterator();
KPanel temp = new KPanel("");
while(iter.hasNext()){
temp = iter.next();
temp.setSize(this.getWidth(), wid_height);
temp.setLocation(0, wid_height*i);
this.add(temp);
i++;
}
this.setVisible(true);
return;
}
}