2012-10-30 1 views
0

저는 캔버스 (캔버스가 직사각형을 그립니다)를 보유하고있는 다른 두 JPanels의 중간에 buttonPanel이 있어야하는 프로젝트에서 작업하고 있습니다. 나는 이것을하는 방법에 붙어있다. 자바 왼쪽/오른쪽 캔버스를 사용하여 JPanels/button을 표시합니다 .Panel

내 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; 
    } 
} 

통해 읽을 시간을 가지고 : 앞으로 당신을 도울 것입니다 몇 가지 유용한 정보를 Performing Custom Painting

Using Layout Managers

    • .

  • +1

    * "레이아웃 관리자와 싸우고 있습니다. 결국 레이아웃 관리자가 이깁니다. "* (내가 노래 부르기 - 가난하게)"나는 그 싸움에서 나왔고, 그 결투는 ... " –

    관련 문제