1

这是我在框架上绘制矩形的简单代码。如何向该框架添加按钮?我试图设置 FlowLayout 但矩形不可见。请帮助。

import java.awt.*;
import javax.swing.*;

public class test extends Canvas{
public static JFrame frame;
public static JButton button;

public void paint(Graphics graphics) {
    graphics.setColor(Color.yellow);
    graphics.fillRect(10, 10, 100, 100);
    graphics.setColor(Color.red);
    graphics.drawRect(10, 10, 100, 100);
}

public static void main(String args[]){
    test x=new test();
    frame=new JFrame();
    button=new JButton();

    button.setSize(20,20);
    button.setText("Click");

    frame.setSize(500,500);
    frame.add(button);
    frame.add(x);
    frame.setVisible(true);     
}
}
4

3 回答 3

2

不要在Canvas. 涂在JPanel.

让你的类扩展JPanel,然后覆盖paintComponent(Graphics g)。别忘了打电话super.paintComponent()

于 2013-07-12T13:40:42.293 回答
2

a 的默认布局JFrameBorderLayout每个布局约束只能接受一个组件。未指定时的默认值为CENTER. 所以改变:

frame.add(button);
frame.add(x);

到:

frame.add(button, BorderLayout.PAGE_START);
frame.add(x);

你应该看到这两个组件。

其他提示:

  1. 不要设置顶级容器的大小。而是布局内容并调用pack()
  2. 不要在没有充分理由的情况下混合使用 Swing 和 AWT。正如另一张海报所提到的,我们通常会JPanel在 Swing 中使用 a 进行自定义渲染。
  3. BorderLayout忽略按钮的大小并将其拉伸以适合。要让它保持一定大小,请设置一个首选大小并将其添加到FlowLayout. 添加FlowLayoutPAGE_START约束。
于 2013-07-12T13:49:15.060 回答
0

您必须使用容器,获取框架的容器,然后使用布局并使用 add() 方法向其中添加组件。

于 2013-07-15T10:39:53.697 回答