我刚刚开始学习Java,现在正在为Tetris制作GUI。我想要这样的东西:
1 http://desmond.imageshack.us/Himg846/scaled.php?server=846&filename=tetrisf.png&res=landing
但是我得到:
编辑:有人可以告诉我如何解决此问题吗?
它是TetrisFrame(扩展JFrame)构造函数的一部分:
setLayout(new BorderLayout());
/* adding a panel of the left side */
left = new TetrisPanel(Constants.WIDTH, Constants.HEIGHT);
getContentPane().add(BorderLayout.LINE_START, left);
left.setSize(Constants.WIDTH * Constants.BLOCK_SIZE,
Constants.HEIGHT * Constants.BLOCK_SIZE);
/* adding a panel on the right side */
JPanel right = new JPanel();
getContentPane().add(BorderLayout.LINE_END, right);
nextPiecePreview = new TetrisPanel(4 , 4);
points = new JLabel("0");
right.add(nextPiecePreview);
setSize(Constants.WIDTH * Constants.BLOCK_SIZE + Constants.RIGHT_MENU_SIZE,
Constants.HEIGHT * Constants.BLOCK_SIZE + Constants.BOTTOM_MARGIN);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
这是我的TetrisPanel类的一部分:
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBounds(0, 0, Constants.BLOCK_SIZE * width ,
Constants.BLOCK_SIZE * height);
for(int i = 0; i < width; ++i) {
for(int j = 0; j < height; ++j) {
drawSquare(g, i, j, colorsMap.get(BlocksType.Z_SHAPED));
}
}
}
private void drawSquare (Graphics g, int x_temp, int y_temp, Color color) {
int x = x_temp * Constants.BLOCK_SIZE;
int y = y_temp * Constants.BLOCK_SIZE;
g.setColor(color);
g.fillRect(x + 1, y + 1, Constants.BLOCK_SIZE - 2, Constants.BLOCK_SIZE - 2);
g.setColor(color.brighter());
g.drawLine(x, y + Constants.BLOCK_SIZE - 1, x, y);
g.drawLine(x, y, x + Constants.BLOCK_SIZE - 1, y);
g.setColor(color.darker());
g.drawLine(x + 1, y + Constants.BLOCK_SIZE - 1,
x + Constants.BLOCK_SIZE - 1, y + Constants.BLOCK_SIZE - 1);
g.drawLine(x + Constants.BLOCK_SIZE - 1, y + Constants.BLOCK_SIZE - 1,
x + Constants.BLOCK_SIZE - 1, y + 1);
最佳答案
TetrisPanel
是主面板,然后应使用BorderLayout.CENTER
而不是BorderLayout.LINE_START
添加它。
并且,参数正确的顺序是getContentPane(component, layoutOrientation)
;
下面是一个布局示例:
public class GuiExample extends JPanel {
public GuiExample() {
JPanel gamePanel = new JPanel();
gamePanel.setBackground(Color.GREEN);
gamePanel.setPreferredSize(new Dimension(300, 400));
JPanel infoPanel = new JPanel();
infoPanel.setBackground(Color.WHITE);
JPanel previewPanel = new JPanel();
previewPanel.setBackground(Color.BLUE);
previewPanel.setPreferredSize(new Dimension(100, 100));
JPanel pointsPanel = new JPanel();
pointsPanel.setBackground(Color.RED);
pointsPanel.setPreferredSize(new Dimension(100, 50));
infoPanel.setLayout(new BoxLayout(infoPanel, BoxLayout.Y_AXIS));
infoPanel.setPreferredSize(new Dimension(100, 400));
infoPanel.add(previewPanel);
infoPanel.add(pointsPanel);
add(gamePanel, BorderLayout.CENTER);
add(infoPanel, BorderLayout.EAST);
}
public static void main(String s[]) {
JFrame frame = new JFrame("Java Rules");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new GuiExample());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}