0

我正在做一个项目,我需要在另外两个 JPanel 中间有一个 buttonPanel,这些 JPanel 容纳画布(画布绘制矩形)。我被困在如何做到这一点上。

我的 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)
{

}

}    

我的 Canvas 类(还没有太多内容):

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

想要看起来像这样 想要看起来像这样

现在的样子
现在的样子

4

1 回答 1

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

花一些时间阅读:

获取一些有助于您前进的有用信息。

于 2012-10-30T23:07:02.940 回答