2013-08-16 1 views
0

Это простое приложение JFrame. Он в основном создает новый Frame по выбору пользователя. Первый кадр начинается, но новый не появляется! Показаны ошибки: ie1 cannot be resolved & ie2 cannot be resolved. Я хочу увидеть новый Frame.Второй JFrame не показан с первого JFrame

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 
      } 
     }); 

    } 
} 
+0

Пожалуйста, разместите строки, на которые ссылаются ошибки. – zebediah49

+0

@ zebediah49 Ошибка относится ко всем строкам, в которых есть ie1 или ie2, кроме строк itemEvent –

+3

Вы должны попытаться отформатировать код в своем сообщении. В вашем блочном коде отсутствует '' ', а отступы не идеальны. Кстати, быть 14 ничего здесь не меняет! Отправьте хороший вопрос, и у вас будет хороший ответ! –

ответ

3

Вы не инстанцирование, ни инициализации ie1 и ie2 переменных в любом месте. Я вижу, что они представляют ItemEvent ссылки, но их область действия ограничена ItemListener «измененным» методом.

Если вы используете Eclipse, он должен предоставить вам быстрое исправление. Но если бы я был вами, я сначала начал читать по Java for Beginners, а после этого перейду на материал AWT/Swing и SWT/JFace.

Попробуйте начать с более простых вещей. Мне приходит в голову, что приведенный выше код немного подавляющий для вас. Удачный программист.

+0

, но я объявил их окончательными. если это неправильный путь, скажите мне правильный. Благодаря! –

+0

@Chinmay Dabke Нет, нет. Вы объявили их окончательными слушателями событий INSIDE. Они выходят за рамки, когда вы пытаетесь использовать их вне слушателей. Ваш код испорчен. – GGrec

+0

Так как я объявляю их так, чтобы их можно было использовать где угодно? Спасибо! –

2

Несколько вещей: Вам не нужно 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.

С другой стороны, не следует вводить точки с запятой после операторов if.

Справа:

if(ie1.equals("100 x 100")) 
{ 
    ... 
} 

Неправильно:

if(ie1.equals("100 x 100")); 
{      //^ 
    ... 
} 

Так удалите точку с запятой, что у вас есть после того, как те, если заявления.

Со всем этим я бы посоветовал посоветоваться с советом GGrec и начать читать Java tutorials.