2015-05-07 6 views
1

Это задание, в котором есть меню, включая типы аттракционов, которые пользователь может выбрать, после будет выбрана поездка, на второй панели появится сообщение о безопасности, а также ползунок для высоты всадника. Я попытался собрать все вместе для панелей 1 и 2, поскольку JMenuBar, drawString и actionperformed, но ничего не отображается кроме слайдера.Я попытался поставить JMenuBar с actionlistner и paintComponent вместе как первая панель, слайдер и строка для второй панели, но ничего не отображается

Заголовок

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 


public class Ride extends JFrame 
{ 
     private JMenu type; 
     private JSlider slider; 
     private GridLayout grid; 
     private JMenuBar menu; 
     private JMenuItem Roller; 
     private JMenuItem Horror; 
     private int sliderVal; 
     private int allow; 
     private String msg; 
     private String yesno; 
     private BorderLayout b; 



     public static void main(String[]args) 
     { 
       Ride ride = new Ride(); 
     } 

     public Ride() 
     { 
       super("Ride"); 
       setSize(1200,1000); 
       Panel1 p1 = new Panel1(); 
       Panel2 p2 = new Panel2(); 
       setDefaultCloseOperation(EXIT_ON_CLOSE); 
       setLayout(new GridLayout(1,2,0,0)); 
       add(p1); 
       add(p2); 
       setVisible(true); 
     } 

     class Panel1 extends JPanel implements ActionListener 
     { 
       public Panel1() 
       { 
        setSize(600,1000); 
         setBackground(Color.BLACK); 
         //Direction direction = new Direction(); 
         type = new JMenu("type of rides"); 
         Roller = new JMenuItem("Roller Coaster"); 
         Roller.addActionListener(this); 
         type.add(Roller); 
         Horror = new JMenuItem("Scary Ride"); 
         Horror.addActionListener(this); 
         type.add(Horror); 
         menu = new JMenuBar(); 
         menu.add(type); 
         // setLayout(new GridLayout(2,1,0,20)); 
         add(menu); 
         //add(direction); 
         setVisible(true); 
       } 

       public void actionPerformed(ActionEvent e) 
       { 
         if(e.getSource()==Roller) 
         { 
           msg = new String("Rough Ride, height must be >42"); 
           allow = 42; 
           repaint(); 
         } 
         else if(e.getSource()==Horror) 
         { 
           msg = new String("Scary Ride, height must be >32"); 
           allow = 32; 
           repaint(); 
         } 
       } 

       public void paintComponent(Graphics g) 
       { 
         super.paintComponent(g); 
         g.drawString("Pick Ride on the menu above,",10,600); 
         g.drawString("select height on the slidr.",10,700); 
       } 
     } 

     class Panel2 extends JPanel implements ChangeListener 
     { 
      public Panel2() 
      { 
       setSize(600,1000); 
        setLayout(new FlowLayout()); 
        slider = new JSlider(JSlider.VERTICAL,30,45,30); 
        slider.addChangeListener(this); 
        add(slider); 
        setVisible(true); 

      } 


      public void stateChanged(ChangeEvent e) 
      { 
          sliderVal = slider.getValue();//get the value of the slider 
          repaint();//reset 
          if(sliderVal > allow) 
            yesno = new String("allowed"); 
          else if (sliderVal < allow) 
            yesno = new String("not allowed"); 
      } 


      public void paintComponent(Graphics g) 
      { 
        super.paintComponent(g); 

        g.drawString(msg,20,600); 
        g.drawString(sliderVal+" :"+yesno,20,800); 
      } 

     } 
}## Heading ## 

ответ

0

Я думаю, вы должны инициализировать Сообщ сначала со значением по умолчанию (например, «» для пустой строки). В противном случае java бросает исключение NullPointerException в фоновом режиме (исключение в потоке «AWT-EventQueue-0» java.lang.NullPointerException: String равно null). Если вы инициализируете переменную msg, она показывает черную панель.

+0

СПАСИБО, ЧТО ТАКОЕ МНОГО РАБОТАЕТ. Я назначил две строки для пустого значения, и программа работает хорошо. Очень ценю вашу помощь. <333 – Hallllis