2016-10-01 1 views
1

JComboBox를 클릭 한 후, JComboBox는 회화의 일부분을 회색 직사각형 모양으로 덮습니다. 코드에 문제가 있습니까? 어떻게 수정합니까? 감사!JComboBox는 다른 것들을 포함합니까?

Here's the image.

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 

import javax.swing.Box; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class MouseButtonTester extends JFrame implements  MouseMotionListener{ 
    int x,y,r; 
    JComboBox colorChooser; 
    Color color; 
    JTextField red = new JTextField(); 
    JTextField green = new JTextField(); 
    JTextField blue = new JTextField(); 
    JPanel topPanel = new JPanel(); 
    JComboBox pen; 
    int fillKind; 

    Object[] chooseRGB = { 
     "Red: ", red, 
     "Green: ", green, 
     "Blue: ", blue 
    }; 


    public MouseButtonTester(){ 
    super(); 
    this.addMouseMotionListener(this); 
    setResizable(true); 

    setLayout(new BorderLayout()); 
    add(topPanel,BorderLayout.NORTH); 
    topPanel.setLayout(new GridLayout(1,2)); 
    colorChooser = new JComboBox(); 
    pen = new JComboBox(); 
    topPanel.add(pen); 
    topPanel.add(colorChooser); 
    colorChooser.setBackground(Color.WHITE); 
    pen.setBackground(Color.WHITE); 

    pen.addItem("Pen"); 
    pen.addItem("Marker"); 
    pen.addItem("Highlighter"); 
    pen.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      if(pen.getSelectedItem().toString().equals("Pen")){ 
       fillKind = 0; 
       r = 8; 
      }else if(pen.getSelectedItem().toString().equals("Marker")){ 
       fillKind = 0; 
       r = 15; 
      }else if(pen.getSelectedItem().toString().equals("Highlighter")){ 
       fillKind = 1; 

      } 
     } 
    }); 

    colorChooser.setFont(new Font("Serif",Font.PLAIN,14)); 
    colorChooser.addItem("Red"); 
    colorChooser.addItem("Orange"); 
    colorChooser.addItem("Yellow"); 
    colorChooser.addItem("Green"); 
    colorChooser.addItem("Blue"); 
    colorChooser.addItem("Violet"); 
    colorChooser.addItem("Purple"); 
    colorChooser.addItem("Choose RGB"); 
    colorChooser.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      if("Red" == colorChooser.getSelectedItem().toString()){ 
       color = Color.RED; 
      }else if("Orange" == colorChooser.getSelectedItem().toString()){ 
       color = Color.ORANGE; 
      }else if("Yellow" == colorChooser.getSelectedItem().toString()){ 
       color = Color.YELLOW; 
      } 
      else if("Green" == colorChooser.getSelectedItem().toString()){ 
       color = Color.GREEN; 
      } 
      else if("Blue" == colorChooser.getSelectedItem().toString()){ 
       color = Color.BLUE; 
      } 
      else if("Violet" == colorChooser.getSelectedItem().toString()){ 
       color = new Color(180,0,200); 
      } 
      else if("Purple" == colorChooser.getSelectedItem().toString()){ 
       color = new Color(150,0,200); 
      } 
      else if("Purple" == colorChooser.getSelectedItem().toString()){ 

      } 
      else if("Choose RGB" ==  colorChooser.getSelectedItem().toString()){ 
       int option = JOptionPane.showConfirmDialog(null, chooseRGB,  "Choose RGB", JOptionPane.OK_CANCEL_OPTION); 
       if(option == JOptionPane.OK_OPTION){ 
         int redValue = Integer.parseInt(red.getText()); 
         int greenValue = Integer.parseInt(green.getText()); 
         int blueValue = Integer.parseInt(blue.getText()); 
         color = new Color(redValue,greenValue,blueValue); 
        } 
       } 
      } 
     }); 
    } 

    Graphics graphics; 

    public void paint(Graphics g){ 
     graphics = g.create(); 
    } 

    public void mouseDragged(MouseEvent e) { 
     x = e.getX(); 
     y = e.getY(); 

     graphics.setColor(color); 
     if(fillKind == 0){ 
      graphics.fillOval(x, y, r, r); 
     }else if(fillKind == 1){ 
      graphics.fillRect(x, y, 10, 25); 
     } 
     repaint(); 
    } 

    public void mouseMoved(MouseEvent arg0) { 
     //No actions 
    } 
} 
+0

추측 : 상자를 소유 패널에 추가하기 전에 콤보 상자를 완전히 구성하면 차이가 있습니까? – GhostCat

+0

이것은 완료되지 않았습니다. 'main()'이 없으며'main() '을 추가하고 실행하면 접힌 윈도우가 생깁니다. 그래서 그 이미지를 만드는 것이 무엇이든, 그것은 정확히이 코드가 아닙니다. – arcy

+0

다시 살펴보면 comboBox 드롭 다운의 경우 패널의 일부가 가려져 다시 칠하는 경우를 처리 할 코드가 없습니다. 그렇게하는 코드가 필요합니다. 패널에 뭔가가 희미 해지고 직사각형 좌표가 가려 졌음을 알리는 이벤트가 있습니다 (어느 것이지 잊어 버렸습니다). 그리고 그 부분을 다시 칠하는 것은 패널의 책임입니다. – arcy

답변

0

주의 깊게 코드를 보면, JComboBox가이이 문제 두 개의 패널을 만들 해결하기 위해 area.Simple 방법을 도면에 그려진 의미 인 JPanel에 그려진; 도구 (콤보 박스)에 대한 첫 번째 도구 및 다른 도구를 추가하고 다른 패널을 도면 영역에 추가합니다.

다른 방법은 choosed 항목을 패널에 다시 칠한 후입니다.

관련 문제