有一个函数 return 一个 JLabel 并将它添加到一个 JFrame
Have a function return a JLabel and add it to a JFrame
我写了一个 returns JLabel 的函数,另一个函数将它添加到 JFrame,但是,似乎没有将 JLabel 添加到它。我在 JLabel 上测试了不同的东西,例如颜色和文本,但它没有显示出来。我只是正常地向 JFrame 添加了一个 JLabel,并且成功了。我真的很想能够将我的函数添加到 JFrame 中。
我有一个创建新框架的 JButton,下面是代码:
inputButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFrame realSim = new JFrame();
JPanel realSim2 = new JPanel();
newFrame(realSim, realSim2);
realSim2.add(Planet.createPlanet(1));
Planet.createPlanet(1).setBounds(100, 100, 20, 20);
Planet.createPlanet(1).setText("Ello, just testing!");
}
}
);
Planet.createPlanet() 是 returns 一个 JLabel 的函数。
这是该函数的代码:
public static JLabel createPlanet(int planetNum)
{
JLabel planetRep = new JLabel();
switch (planetNum)
{
case 1: planetColor = Color.WHITE;
break;
case 2: planetColor = Color.RED;
break;
case 3: planetColor = Color.ORANGE;
break;
case 4: planetColor = Color.YELLOW;
break;
case 5: planetColor = Color.GREEN;
break;
case 6: planetColor = Color.CYAN;
break;
case 7: planetColor = Color.BLUE;
break;
case 8: planetColor = Color.MAGENTA;
break;
case 9: planetColor = Color.PINK;
break;
default: planetColor = Color.BLACK;
break;
}
planetRep.setBackground(planetColor);
planetRep.setOpaque(true);
return planetRep;
}
我想不出我可能做错了什么。任何帮助将不胜感激。
您正在设置新创建的 JLabel
的边界和文本,而不是您第一个创建的。所以,应该是:
JLabel planet = Planet.createPlanet(1)
planet.setBounds(100, 100, 20, 20);
planet.setText("Ello, just testing!");
realSim2.add(planet);
realSim2.add(Planet.createPlanet(1));
//above line you have added label to frame
//after that, lines below will not have any effect on the one that
// is already added.
Planet.createPlanet(1).setBounds(100, 100, 20, 20);
Planet.createPlanet(1).setText("Ello, just testing!");
所以最后两行代码只会创建新的 Jlabel 对象,并且会是垃圾,因为您在代码中没有引用这些对象。
1) realSim2.add(Planet.createPlanet(1));
2) Planet.createPlanet(1).setBounds(100, 100, 20, 20);
3) Planet.createPlanet(1).setText("Ello, just testing!");
在第一行。您向 JPanel 添加了一个新标签。但是那个标签没有任何文字。因为它只是由函数创建的,所以它也没有任何大小。
在第二行,您创建了一个新的 JLabel 并设置了一个大小,仅此而已。您没有将其添加到面板。
第三行你做的和第二行一样。创建一个新的 JLabel 但您没有添加它。
试试这个代码:
JLabel label = Planet.createPlanet(1);
label.setBounds(100, 100, 20, 20);
label.setText("Ello, just testing!");
realSim2.add(label); //rememebr to add the object to the panel
我写了一个 returns JLabel 的函数,另一个函数将它添加到 JFrame,但是,似乎没有将 JLabel 添加到它。我在 JLabel 上测试了不同的东西,例如颜色和文本,但它没有显示出来。我只是正常地向 JFrame 添加了一个 JLabel,并且成功了。我真的很想能够将我的函数添加到 JFrame 中。
我有一个创建新框架的 JButton,下面是代码:
inputButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFrame realSim = new JFrame();
JPanel realSim2 = new JPanel();
newFrame(realSim, realSim2);
realSim2.add(Planet.createPlanet(1));
Planet.createPlanet(1).setBounds(100, 100, 20, 20);
Planet.createPlanet(1).setText("Ello, just testing!");
}
}
);
Planet.createPlanet() 是 returns 一个 JLabel 的函数。 这是该函数的代码:
public static JLabel createPlanet(int planetNum)
{
JLabel planetRep = new JLabel();
switch (planetNum)
{
case 1: planetColor = Color.WHITE;
break;
case 2: planetColor = Color.RED;
break;
case 3: planetColor = Color.ORANGE;
break;
case 4: planetColor = Color.YELLOW;
break;
case 5: planetColor = Color.GREEN;
break;
case 6: planetColor = Color.CYAN;
break;
case 7: planetColor = Color.BLUE;
break;
case 8: planetColor = Color.MAGENTA;
break;
case 9: planetColor = Color.PINK;
break;
default: planetColor = Color.BLACK;
break;
}
planetRep.setBackground(planetColor);
planetRep.setOpaque(true);
return planetRep;
}
我想不出我可能做错了什么。任何帮助将不胜感激。
您正在设置新创建的 JLabel
的边界和文本,而不是您第一个创建的。所以,应该是:
JLabel planet = Planet.createPlanet(1)
planet.setBounds(100, 100, 20, 20);
planet.setText("Ello, just testing!");
realSim2.add(planet);
realSim2.add(Planet.createPlanet(1));
//above line you have added label to frame
//after that, lines below will not have any effect on the one that
// is already added.
Planet.createPlanet(1).setBounds(100, 100, 20, 20);
Planet.createPlanet(1).setText("Ello, just testing!");
所以最后两行代码只会创建新的 Jlabel 对象,并且会是垃圾,因为您在代码中没有引用这些对象。
1) realSim2.add(Planet.createPlanet(1));
2) Planet.createPlanet(1).setBounds(100, 100, 20, 20);
3) Planet.createPlanet(1).setText("Ello, just testing!");
在第一行。您向 JPanel 添加了一个新标签。但是那个标签没有任何文字。因为它只是由函数创建的,所以它也没有任何大小。
在第二行,您创建了一个新的 JLabel 并设置了一个大小,仅此而已。您没有将其添加到面板。
第三行你做的和第二行一样。创建一个新的 JLabel 但您没有添加它。
试试这个代码:
JLabel label = Planet.createPlanet(1);
label.setBounds(100, 100, 20, 20);
label.setText("Ello, just testing!");
realSim2.add(label); //rememebr to add the object to the panel