2013-09-21 1 views
0

ActionListener 클래스의 actionPerformed() 메서드 내에서 Shape 객체를 그려 InternalFrame에 추가하려고합니다.ActionListener 클래스의 actionPerformed() 메서드에서 프레임에 객체를 그리는 방법

public class InternalFrame extends JInternalFrame{ 

    public JSlider redSlider, greenSlider, blueSlider; 
    public TextField redField = new TextField(); 
    public TextField greenField = new TextField(); 
    public TextField blueField = new TextField(); 
    Checkbox checkBox = new Checkbox("Filled", true); 
    String[] shapeNames = {"Oval", "Rectangle", "Line", "NewShape"}; 

    public InternalFrame(String string, boolean b, 
        boolean c, boolean d, boolean e) { 
     super(string,b,c,d); 

     this.setLayout(new BorderLayout()); 

     redSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 256, 32); 
     greenSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 256, 32); 
     blueSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 256, 32); 

     redField.setText(" " + redSlider.getValue()); 
     greenField.setText(" " + greenSlider.getValue()); 
     blueField.setText(" " + blueSlider.getValue()); 

     redSlider.addChangeListener(new ChangeListener() { 
      @Override 
      public void stateChanged(ChangeEvent e) { 
       // TODO Auto-generated method stub 
       redField.setText(" " + redSlider.getValue()); 
       //System.out.println("red value: " + redSlider.getValue()); 
      } 
     }); 

     greenSlider.addChangeListener(new ChangeListener() { 
      @Override 
      public void stateChanged(ChangeEvent e) { 
       // TODO Auto-generated method stub 
       greenField.setText(" " + greenSlider.getValue()); 
      } 
     }); 

     blueSlider.addChangeListener(new ChangeListener() { 
      @Override 
      public void stateChanged(ChangeEvent e) { 
       // TODO Auto-generated method stub 
       blueField.setText(" " + blueSlider.getValue()); 
      } 
     }); 

     JPanel topPanel = new JPanel(); 
     topPanel.setLayout(new GridLayout(1, 4, 6, 0)); 

     JComboBox shapesDropDown = new JComboBox(shapeNames); 
     shapesDropDown.setSelectedIndex(0); 

     shapesDropDown.addActionListener(new ActionListener(){  
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       //if(arg0.getSource() == shapeNames[1]){ 
       MyShape myShape = new MyRectangle(); 
       add(myShape, BorderLayout.CENTER); 

       System.out.println("HHHH"); 
       //} 
      } 
     }); 

     JPanel empty1 = new JPanel(); 
     JPanel empty2 = new JPanel(); 

     topPanel.add(empty1); 
     topPanel.add(shapesDropDown); 
     topPanel.add(checkBox); 
     topPanel.add(empty2); 

     JPanel sliderPanel = new JPanel(); 
     sliderPanel.setLayout(new GridLayout(3, 3)); 

     sliderPanel.add(new Label("Red:")); 
     sliderPanel.add(redSlider); 
     sliderPanel.add(redField); 
     sliderPanel.add(new Label("Green:")); 
     sliderPanel.add(greenSlider); 
     sliderPanel.add(greenField); 
     sliderPanel.add(new Label("Blue:")); 
     sliderPanel.add(blueSlider); 
     sliderPanel.add(blueField); 

     add(topPanel, BorderLayout.NORTH); 
     add(sliderPanel, BorderLayout.SOUTH); 
    } 
} 

도형 개체도 생성되지만 InternalFrame에는 표시되지 않습니다.

+0

어떻게 인스턴스화되지 않았다는 것을 알고 계십니까? – svz

+0

어떻게 생성되지 않았는지 어떻게 알 수 있습니까? 즉, 생성자가 실패 할 수있는 유일한 방법은 예외를 throw하는 것이지만 아직 언급하지 않았습니다. – Wormbo

+0

죄송합니다. 개체가 인스턴스화되고 있지만 사각형이 프레임에 추가되지 않습니다. – Ravindra

답변

1

JInternalFrame을 확장하는 대신 공장 방법을 사용하여 내부 프레임과 그 내용을 생성하십시오. 이 example에서는 생성자에서 createInternalFrame()이 호출되지만 ActionListener에서도 호출 할 수 있습니다. 내부 프레임의 기본 레이아웃은 BorderLayout이며 기본 배치는 CENTER입니다. 그것의 크기 및 시정을 조정하기 전에 콘테이너에 확실하십시오.

image