[英]Second JFrame doesn't show from first JFrame
这是一个简单的JFrame
应用程序。 它基本上是根据用户选择创建一个新的Frame
。 第一帧开始,但是新的帧不显示! 它显示ie2 cannot be resolved
ie1 cannot be resolved
& ie2 cannot be resolved
。 我想看一下新的Frame
。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Test2 {
public static void main(String[] args) {
JFrame jf = new JFrame("Java test");
Container c = jf.getContentPane();
jf.setBounds(450, 180, 450, 450);
jf.setVisible(true);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
JPanel jp = new JPanel();
c.add(jp);
JLabel jl = new JLabel("This is a text in a label",SwingConstants.CENTER);
jp.add(jl);
JComboBox jcb1 = new JComboBox();
jp.add(jcb1);
jcb1.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent ie1) {
ie1.getItem();
}
});
jcb1.addItem(" Select the Size ");
jcb1.addItem("100 x 100");
jcb1.addItem("200 x 200");
jcb1.addItem("300 x 300");
jcb1.addItem("400 x 400");
jcb1.addItem("500 x 500");
jcb1.addItem("600 x 600");
JComboBox jcb2 = new JComboBox();
jp.add(jcb2);
jcb2.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent ie2) {
ie2.getItem();
}
});
jcb2.addItem(" Select the Colour ");
jcb2.addItem("Blue");
jcb2.addItem("Red");
jcb2.addItem("Black");
jcb2.addItem("White");
jcb2.addItem("Yellow");
jcb2.addItem("Green");
JButton jb = new JButton("Create a new Frame");
jp.add(jb);
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
final JFrame jf1 = new JFrame("New Frame");
Container c = jf1.getContentPane();
jf1.setVisible(true);
jf1.setDefaultCloseOperation(jf1.EXIT_ON_CLOSE);
// The Size of the frame
if (ie1.getItem().equals(" Select the Size ")) {
JOptionPane.showMessageDialog(null, "Please select the size of the Frame");
}
if (ie1.getItem().equals("100 x 100"))
;
{
jf1.setBounds(450, 180, 100, 100);
}
if (ie1.getItem().equals("200 x 200"))
;
{
jf1.setBounds(450, 180, 200, 200);
}
if (ie1.getItem().equals("300 x 300"))
;
{
jf1.setBounds(450, 180, 300, 300);
}
if (ie1.getItem().equals("400 x 400"))
;
{
jf1.setBounds(450, 180, 400, 400);
}
if (ie1.getItem().equals("500 x 500"))
;
{
jf1.setBounds(450, 180, 500, 500);
}
if (ie1.getItem().equals("600 x 600"))
;
{
jf1.setBounds(450, 180, 600, 600);
}
// The size of the Frame ends
// The colour of the frame
if (ie2.getItem().equals(" Select the Colour ")) {
JOptionPane.showMessageDialog(null, "Please select the colour of the Frame");
}
final JPanel jp1 = new JPanel();
c.add(jp1);
if (ie2.getItem().equals("Blue")) {
jp1.setBackground(Color.blue);
}
if (ie2.getItem().equals("Red")) {
jp1.setBackground(Color.red);
}
if (ie2.getItem().equals("Black")) {
jp1.setBackground(Color.black);
}
if (ie2.getItem().equals("White")) {
jp1.setBackground(Color.white);
}
if (ie2.getItem().equals("Yellow")) {
jp1.setBackground(Color.yellow);
}
if (ie2.getItem().equals("Green")) {
jp1.setBackground(Color.green);
}
// the colour of the frame ends
}
});
}
}
您既没有实例化,也没有在任何地方初始化ie1
和ie2
变量。 我可以看到它们代表ItemEvent
引用,但是它们的范围仅限于ItemListener
'方法。
如果您使用的是Eclipse,它将为您提供快速修复。 但是,如果您是我,那么我将首先开始Java for Beginners
阅读Java for Beginners
,然后再转向AWT / Swing和SWT / JFace。
尝试从更基本的内容开始。 在我看来,上面的代码对您来说有点不知所措。 祝你好运,小小程序员。
几件事:您不需要ItemListeners即可获得组合框的选定值,而只需
Object ie1 = jcb1.getSelectedItem();
Object ie2 = jcb2.getSelectedItem();
正上方
if(ie1.equals(" Select the Size "))
{
JOptionPane.showMessageDialog(null,"Please select the size of the Frame");
}
并且由于您使用的是匿名内部类,因此需要确保将jcb1
和jcb2
声明为final
,如下所示:
final JComboBox jcb1 = new JComboBox();
同样,将ie1.getItem().equals(...)
更改为ie1.equals(...)
,并对ie2
进行相同的ie2
。
另一方面,请勿在if语句后加上分号。
对:
if(ie1.equals("100 x 100"))
{
...
}
错误:
if(ie1.equals("100 x 100"));
{ //^
...
}
因此,删除那些if语句之后的分号。
综上所述,我绝对建议您遵循GGrec的建议,并开始阅读一些Java教程 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.