2011-03-18 66 views
0

我想要做的是每次點擊時,廣場都應該出現在Jpanel中,但由於某種原因,Jpanel阻止了廣場(點擊邊緣)。我真的不確定我做錯了什麼,謝謝你的幫助!java gui圖形問題

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 
public class VIewa extends JFrame implements ActionListener { 

    JRadioButton[]  buttons; 
    JRadioButton[]  colorBut; 
    JButton    colorButton; 
    JPanel  blankArea; 
    panel ppp; 
    public VIewa(String title) { 

     super(title); 
     try { 
      UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 
      } catch (Exception e) {} 
     setLayout(new FlowLayout()); 

     add(new JLabel("shapes:")); 
     ButtonGroup  operations = new ButtonGroup(); 
     buttons = new JRadioButton[8]; 
     buttons[0] = new JRadioButton("line", false); 
     buttons[1] = new JRadioButton("FillRec", false); 
     buttons[2] = new JRadioButton("HolRec", false); 
     buttons[3] = new JRadioButton("FilCir", false); 
     buttons[4] = new JRadioButton("HolCir", false); 
     buttons[5] = new JRadioButton("FilPol", false); 
     buttons[6] = new JRadioButton("HolPol", false); 
     buttons[7] = new JRadioButton("Text", false); 
     for (int i=0; i<8; i++) { 
      add(buttons[i]); 
      operations.add(buttons[i]); 
      buttons[i].addActionListener(this); 
     } 
     add(new JLabel("colors:")); 
     ButtonGroup  colo = new ButtonGroup(); 
     colorBut = new JRadioButton[8]; 
     colorBut[0] = new JRadioButton("red", false); 
     colorBut[1] = new JRadioButton("orange", false); 
     colorBut[2] = new JRadioButton("yellow", false); 
     colorBut[3] = new JRadioButton("green", false); 
     colorBut[4] = new JRadioButton("blue", false); 
     colorBut[5] = new JRadioButton("black", false); 
     colorBut[6] = new JRadioButton("gray", false); 
     colorBut[7] = new JRadioButton("white", false); 
     for (int i=0; i<8; i++) { 
      add(colorBut[i]); 
      colo.add(colorBut[i]); 
      colorBut[i].addActionListener(this); 
     } 
     add(new JLabel("current color:")); 
     colorButton = new JButton(); 
     add(colorButton); 
     ppp = new panel(); 
     add(ppp); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(600,670); 
    } 

    public class panel extends JPanel implements MouseListener { 

     private ArrayList<Point> squares; 
     public panel(){ 
       squares = new ArrayList<Point>(); 
      JPanel  blankArea; 
      blankArea = new JPanel(); 
      blankArea.setLayout(null); 
      //blankArea.setOpaque(true); 
      blankArea.setBorder(BorderFactory.createLineBorder(Color.black)); 
      blankArea.setPreferredSize(new Dimension(450, 550)); 
      addMouseListener(this); 
      add(blankArea); 
     } 
     public void paintComponent(Graphics graphics) { 
      super.paintComponent(graphics); 

      graphics.setColor(Color.black); 
      for (Point center: squares) 
       graphics.drawRect(center.x - 20, center.y - 20, 40, 40); 
     } 
     public void mouseClicked(MouseEvent arg0) {} 
     public void mouseEntered(MouseEvent arg0) {} 
     public void mouseExited(MouseEvent arg0) {} 
     public void mousePressed(MouseEvent event) { 
      squares.add(event.getPoint()); 
      repaint(); } 
     public void mouseReleased(MouseEvent arg0) {} 
    } 

    public static void main(String args[]) { 
     JFrame frame = new VIewa("Graphics"); 
     JPanel framex = new JPanel(); 
     framex.add(new SquareCanvas()); 
     framex.setVisible(true); 
     frame.setVisible(true); 
    } 
    public void actionPerformed(ActionEvent arg0) { 
    } 
} 
+0

你能分享你的「新的SquareCanvas()」嗎? – 2011-03-18 09:28:01

回答

0

,但由於某些原因的JPanel擋住了廣場

你是什麼意思,該廣場是不可見的?這可能是因爲blankArea覆蓋了您在其中繪製正方形的父面板。

1

試試這段代碼。我剛剛刪除了你的'blankArea'面板。

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

class VIewa extends JFrame implements ActionListener { 

JRadioButton[] buttons; 
JRadioButton[] colorBut; 
JButton colorButton; 
JPanel blankArea; 
panel ppp; 

public VIewa(String title) { 

    super(title); 
    try { 
     UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 
    } catch (Exception e) { 
    } 
    setLayout(new FlowLayout()); 

    add(new JLabel("shapes:")); 
    ButtonGroup operations = new ButtonGroup(); 
    buttons = new JRadioButton[8]; 
    buttons[0] = new JRadioButton("line", false); 
    buttons[1] = new JRadioButton("FillRec", false); 
    buttons[2] = new JRadioButton("HolRec", false); 
    buttons[3] = new JRadioButton("FilCir", false); 
    buttons[4] = new JRadioButton("HolCir", false); 
    buttons[5] = new JRadioButton("FilPol", false); 
    buttons[6] = new JRadioButton("HolPol", false); 
    buttons[7] = new JRadioButton("Text", false); 
    for (int i = 0; i < 8; i++) { 
     add(buttons[i]); 
     operations.add(buttons[i]); 
     buttons[i].addActionListener(this); 
    } 
    add(new JLabel("colors:")); 
    ButtonGroup colo = new ButtonGroup(); 
    colorBut = new JRadioButton[8]; 
    colorBut[0] = new JRadioButton("red", false); 
    colorBut[1] = new JRadioButton("orange", false); 
    colorBut[2] = new JRadioButton("yellow", false); 
    colorBut[3] = new JRadioButton("green", false); 
    colorBut[4] = new JRadioButton("blue", false); 
    colorBut[5] = new JRadioButton("black", false); 
    colorBut[6] = new JRadioButton("gray", false); 
    colorBut[7] = new JRadioButton("white", false); 
    for (int i = 0; i < 8; i++) { 
     add(colorBut[i]); 
     colo.add(colorBut[i]); 
     colorBut[i].addActionListener(this); 
    } 
    add(new JLabel("current color:")); 
    colorButton = new JButton(); 
    add(colorButton); 
    ppp = new panel(); 
    add(ppp); 
    ppp.setBorder(BorderFactory.createLineBorder(Color.black)); 
    ppp.setPreferredSize(new Dimension(450, 550)); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setSize(600, 670); 
} 

public class panel extends JPanel implements MouseListener { 

    private ArrayList<Point> squares; 

    public panel() { 
     squares = new ArrayList<Point>(); 
     //JPanel blankArea; 
     //blankArea = new JPanel(); 
     //blankArea.setLayout(null); 
     //blankArea.setOpaque(true); 
     //blankArea.setBorder(BorderFactory.createLineBorder(Color.black)); 
     //blankArea.setPreferredSize(new Dimension(450, 550)); 
     addMouseListener(panel.this); 
     //add(blankArea); 
    } 

    @Override 
    public void paintComponent(Graphics graphics) { 
     super.paintComponent(graphics); 

     graphics.setColor(Color.black); 
     for (Point center : squares) { 
      graphics.drawRect(center.x - 20, center.y - 20, 40, 40); 
     } 
    } 

    public void mouseClicked(MouseEvent arg0) { 
     squares.add(arg0.getPoint()); 
     repaint(); 
    } 

    public void mouseEntered(MouseEvent arg0) { 
    } 

    public void mouseExited(MouseEvent arg0) { 
    } 

    public void mousePressed(MouseEvent event) { 
     squares.add(event.getPoint()); 
     repaint(); 
    } 

    public void mouseReleased(MouseEvent arg0) { 
    } 
} 

public static void main(String args[]) { 
    JFrame frame = new VIewa("Graphics"); 
    JPanel framex = new JPanel(); 
    JPanel p = new JPanel(); 
    p.setBounds(new Rectangle(100,50)); 
    framex.add(p); 
    framex.setVisible(true); 
    frame.setVisible(true); 
} 

public void actionPerformed(ActionEvent arg0) { 
} 
} 
+0

是的工作,非常感謝! – 2011-03-18 13:28:21