2016-10-01 13 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の上に描かれました。ツール(コンボボックス)用の最初のツールで、他のツールを上に追加し、別のパネルを描画エリアに追加します。

もう1つの方法は、項目を選択してパネルを再描画することです。

関連する問題