2012-10-30 43 views
0

我正在研究一個項目,我需要在兩個其他JPanel中間有一個按鈕面板,其中包含畫布(畫布繪製矩形)。我被困在如何做到這一點。Java在按鈕的左側和右側顯示帶有畫布的JPanels

我的GUI類:

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

public class GUI extends JFrame implements ActionListener 
{ 
private static final Dimension PREF_SIZE = new Dimension(1350, 450); 

MyCanvas leftCanvas = new MyCanvas(); 
MyCanvas rightCanvas = new MyCanvas(); 
ArrayList<JButton> buttonList = new ArrayList<JButton>(); 
JPanel buttonPanel, leftPanel, rightPanel; 

public GUI() 
{ 
    super("Elevators"); 
    //setSize(800,800); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //setVisible(true); 

    JPanel mainPanel = new JPanel(); 

    mainPanel.setLayout(new GridLayout(1,3)); 

    leftPanel = new JPanel(); 
    leftPanel.add(leftCanvas); 
    rightPanel = new JPanel();  
    rightPanel.add(rightCanvas); 

    buttonPanel = new JPanel();  
    buttonPanel.setLayout(new GridLayout(12,1)); 
    buttonPanel.setSize(450,450); 




    add(mainPanel); 

    for(int i=0; i<12; i++) 
    { 
     buttonList.add(new JButton(""+i)); 
     JButton btn = buttonList.get(i); 
     buttonPanel.add(btn); 
     l 
    } 
    mainPanel.add(buttonPanel, BorderLayout.CENTER); 
    mainPanel.add(leftPanel, BorderLayout.EAST); 
    mainPanel.add(rightPanel, BorderLayout.WEST); 

    createAndShowGui(); 
} 
@Override 
public Dimension getPreferredSize() { 
    return PREF_SIZE; 
} 
private static void createAndShowGui() { 
    UI frame = new UI(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
// frame.setLocationByPlatform(true); 
    frame.setVisible(true); 
} 


public void actionPerformed(ActionEvent e) 
{ 

} 

}  

我的畫布類(沒有在它多少還):

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JFrame; 
import javax.swing.JButton; 

public class MyCanvas extends Canvas 
{ 
private Elevator e; 

int xPos =0; 
int yPos=0; 

public MyCanvas() 
{ 
    setSize(600,600); 
    repaint(); 
} 


public void paint(Graphics g) 
{ 
    g.setColor(Color.BLACK); 
    g.fillRect(xPos,yPos,100, 100); 


} 

public void actionPerformed(ActionEvent e) 
{ 
    repaint(); 
} 
public void setElevator(Elevator ev) 
{ 
    e = ev; 
} 
} 

要這個樣子 Want to look like this

它看起來像什麼現在
What it looks like right now

+0

不錯的Windows主題,順便;-) –

+0

謝謝,可惜沒有所有的圖標 –

+0

再次?難道我們沒有在你的[上一個問題]中涵蓋這個嗎?(http://stackoverflow.com/questions/13022853/working-on-a-java-gui-canvas-project) – MadProgrammer

回答

1

你在與佈局經理對抗。最終,佈局經理會贏。

// You really shouldn't be doing this, mixing heavy and light weight components is 
// simply asking for trouble. 
//public class MyCanvas extends Canvas 
public class MyCanvas extends JPanel 
{ 
    private Elevator e; 

    int xPos =0; 
    int yPos=0; 

    public MyCanvas() 
    { 
     // Don't do this, the layout manager will overwrite the values 
     //setSize(600,600); 
     // Don't do this, it doesn't actually do anything as you ain't in 
     // in position to paint yet... 
     //repaint(); 
    } 

    // Do this instead... 
    public Dimension getPreferredSize() { 
     return new Dimension(600, 600); 
    } 


    public void paint(Graphics g) 
    { 
     // You MUST do this... 
     super.paint(g); 
     g.setColor(Color.BLACK); 
     g.fillRect(xPos,yPos,100, 100); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     repaint(); 
    } 

    public void setElevator(Elevator ev) 
    { 
     e = ev; 
    } 
} 

花一些時間來通讀:

對於一些有用的信息,這將有助於你前進。

+1

*「你與佈局經理作鬥爭,最終佈局經理會贏。 「*提醒(唱 - 糟糕)」我爭取了佈局,佈局贏了......「 –