2015-04-29 22 views
3

我想創建一個簡單的揮杆程序,讓用戶玩一圈。如何儘可能使JPanel中的組件伸展?

這裏是我的代碼:

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JButton; 
import javax.swing.border.Border; 
import javax.swing.BorderFactory; 

import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.FlowLayout; 
import java.awt.BorderLayout; 

public class SixthProgram 
{ 
    public static void main(String[] args) 
    { 
     GUI prog=new GUI("SixthProgram"); 
     prog.setBounds(350,250,500,250); 
     prog.setVisible(true); 
    } 
} 

class GUI extends JFrame implements MouseListener, MouseMotionListener 
{ 
    JPanel colorPan, color1, color2, color3 ,color4 ,color5; 

    int x=3,y=30; // Position of circle 

    public GUI(String header) 
    { 
     super(header); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new BorderLayout()); 

     maker(); 

     addMouseListener(this); 
     addMouseMotionListener(this); 

     add(colorPan, BorderLayout.SOUTH); 
    } 

    public void maker() 
    { 
     colorPan = new JPanel(); 

     Border raisedbevel = BorderFactory.createRaisedBevelBorder(); 
     Border loweredbevel = BorderFactory.createLoweredBevelBorder(); 
     Border compound = BorderFactory.createCompoundBorder(raisedbevel, loweredbevel); 
     colorPan.setBorder(compound); 

     colorPan.setLayout(new FlowLayout(FlowLayout.CENTER)); 

     color1 = new JPanel(); 
     color2 = new JPanel(); 
     color3 = new JPanel(); 
     color4 = new JPanel(); 
     color5 = new JPanel(); 

     color1.setBackground(Color.WHITE); 
     color2.setBackground(Color.GREEN); 
     color3.setBackground(Color.RED); 
     color4.setBackground(Color.BLUE); 
     color5.setBackground(Color.BLACK); 

     colorPan.add(color1); 
     colorPan.add(color2); 
     colorPan.add(color3); 
     colorPan.add(color4); 
     colorPan.add(color5); 

    } 

    @Override 
    public void paint(Graphics g) 
    { 
     //g.setColor(Color.WHITE); 
     //g.fillRect(0,0,getWidth(),getHeight()); 
     super.paint(g); //Do the same thing as above(Clear jframe) 

     g.setColor(Color.RED); 
     g.fillOval(x,y,50,50); 
    } 

    public void mouseExited(MouseEvent e) //MouseListener overrided methods 
    { 
     System.out.println("Exit"); 
    } 

    public void mouseEntered(MouseEvent e) 
    { 
     System.out.println("Enter"); 
    } 

    public void mouseReleased(MouseEvent e) 
    { 
     System.out.println("Release"); 
    } 

    public void mousePressed(MouseEvent e) 
    { 
     System.out.println("Press");  
     x=e.getX(); 
     y=e.getY(); 
     if(x+50<getWidth() && y+50<getHeight()) // Preventing out of bounds 
      repaint(); 
    } 

    public void mouseClicked(MouseEvent e) //Press+Release=Click 
    { 
     System.out.println("Click"); 
     System.err.println(((JPanel)e.getSource()).getName()); 
    } 

    public void mouseDragged(MouseEvent e) //MouseMotionListener overrided methods 
    { 
     System.out.println("Dragged to ("+ e.getX() +","+ e.getY() +")"); 
     x=e.getX(); 
     y=e.getY(); 
     if((x>=3 && y>=30) && (x+50<getWidth() && y+50<getHeight())) // Preventing out of bounds 
      repaint(); 
    } 

    public void mouseMoved(MouseEvent e) 
    { 
     System.out.println("Moved to ("+ e.getX() +","+ e.getY() +")"); 
    } 

} 

我試圖創建具有不同顏色的JPanel。當點擊一種顏色時,圓圈的顏色會改變。我還沒有實現這個部分。

我的問題是,當我運行上面的程序,我得到的輸出:

ACTUAL_OUTPUT

但我想輸出是

EXPECTED_OUTPUT

我試着刪除

colorPan.setLayout(new FlowLayout(FlowLayout.CENTER)); 

and this re以相同的產量sul sul。

如何拉伸colorPan中的組件,以便獲得預期的輸出?

回答

5

相反的FlowLayout,可以使用一個GridLayout如下:

colorPan.setLayout(new GridLayout(1, 5)); 

這將所述元件的寬度在1行5列,每種顏色一個。

+1

謝謝。我可能會添加更多顏色。所以,我將使用'colorPan.setLayout(new GridLayout(1,0));' –

3

嘗試:

colorPan.setLayout(new BoxLayout(colorPan,BoxLayout.LINE_AXIS)); 
4

更改如下:

colorPan.setLayout(new FlowLayout(FlowLayout.CENTER)); 

到佈局,將拉伸內容以適合,像GridLayout:E.G.

colorPan.setLayout(new GridLayout(1,0));