2011-04-05 86 views
1

我需要創建一個程序,在JFrame或JPanel上顯示多個矩形。這是我到目前爲止的代碼:JPanel/JPanel上的隨機矩形

import javax.swing.*; 
import java.util.Random; 
import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 


public class RandomRectangles extends JFrame { 
private static final int FRAME_HEIGHT = 300; 
private static final int FRAME_WIDTH = 250; 

private JButton fewer; 
private JButton more; 
private Random generator = new Random(); 
private int count; 
private JPanel display; 
private JPanel panel; 

public RandomRectangles() 
{ 
    count = generator.nextInt(100); 

    setSize(FRAME_WIDTH, FRAME_HEIGHT); 
    this.setTitle("Random Rectangles"); 

    display = new JPanel(new BorderLayout()); 
    setLayout(new BorderLayout()); 
    //display = new JPanel(new GridLayout(2,2)); 
    JPanel buttons = new JPanel(); 

    fewer = new JButton("Fewer"); 
    more = new JButton("More"); 

    buttons.add(fewer); 
    buttons.add(more); 

    class fewerNum implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      count = count/2; 
     } 
    } 

    ActionListener listener = new fewerNum(); 
    fewer.addActionListener(listener); 

    class moreNum implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      count = count * 2; 
     } 
    } 

    ActionListener listener2 = new moreNum(); 
    more.addActionListener(listener2); 

    for (int i = 0; i <= count; i++) 
    { 
    // display.add(new RectangleComponent()); 
     add(new RectangleComponent()); 
    } 


    //add(display, BorderLayout.CENTER); 
    add(buttons, BorderLayout.SOUTH); 
} 

} 

上述代碼編譯但存在一些缺陷。單擊按鈕時不做任何事情,而不是向框架或面板添加RectangleComponent對象。 我還創建一個單獨的RectangleComponent類來繪製一個矩形對象

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.util.Random; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 

public class RectangleComponent extends JComponent{ 

private Random generator = new Random(); 
private int xLeft; 
private int yTop; 

public RectangleComponent() 
{ 
    xLeft = generator.nextInt(100); 
    yTop = generator.nextInt(100); 
} 

public void paintComponent(Graphics g) 
{ 
    Graphics2D g2 = (Graphics2D) g; 
    Rectangle rec = new Rectangle(xLeft, yTop, 20, 40); 
    int amount = generator.nextInt(100); 
    g2.draw(rec); 
} 

} 

什麼,我要做的是:編寫顯示在隨機位置的一些長方形的計劃。供應按鈕「更少」和「更多」可生成更少或更多的隨機矩形。每次用戶點擊「較少」時,計數應該減半。每次用戶點擊「更多」時,計數應該加倍。

+0

你的具體問題是什麼? – jzd 2011-04-05 18:16:13

+0

我需要知道如何顯示多個矩形的框架或面板 – carlly 2011-04-05 18:18:24

+2

小的一點,但這是一個需求的聲明,而不是一個問題。問題以問號(?)結尾。 – 2011-04-05 18:28:30

回答

3

您的[更多]和[更少]按鈕只設置矩形的數量,而不是添加或刪除它們。你必須以某種方式重新創建它們。

如果您只想顯示矩形,則不需要創建RectangleComponent - 您可以重寫JFrame的paint super.paint,並放置並繪製矩形。在這種情況下,您必須在所有ActionListeners的jframe中添加repaint()。

編輯:更好的主意是添加一個JPanel,只此面板上繪製矩形,否則矩形將超過按鈕,將「消失」按鈕點擊後,看看這個simple demo

+1

感謝您糾正您的帖子(1+)。直接在JFrame上繪圖還有其他問題,包括丟失雙緩衝。繪製JPanel或JComponent幾乎總是更好。 – 2011-04-05 21:31:54

1

我想給我的RectangleComponent類Rectangle的ArrayList,稱爲rectangleList。我會給這個類兩個public void方法,addRectangle()和removeRectangle()。在addRectangle()方法中,我會創建一個隨機Rectangle(大小適合RectangleComponent的Dimensions),將它添加到ArrayList並調用repaint。在removeRectangle中,如果數組列表的大小大於0,我會刪除一個Rectangle,然後再次調用repaint。在paintComponent中,我會遍歷ArrayList,繪製矩形。我也有paintComponent在方法開始時調用super方法。

然後在你的按鈕的actionPerformed方法中,你會調用上面的適當方法。