我在JFrame中显示组件时出现了一个奇怪的问题。JPanel不显示所有定制组件
我必须编写自己的GUI引擎(按钮,文本框等),而不使用Swing。只允许使用JFrame/JPanel。
假设我想放置3个按钮。
我的按钮类:
public class Button extends JPanel implements MouseListener {
Rectangle r = new Rectangle();
String text;
int X,Y,W,H;
public Button(int x, int y, int w, int h, String t)
{
X=x;
Y=y;
W=w;
H=h;
this.setBackground(Color.CYAN);
addMouseListener(this);
r.setSize(w, h);
r.setLocation(x, y);
this.text = t;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.draw(r);
g2d.drawString(text, X+W/2, Y+H/2);
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
if((arg0.getButton()==1) && r.contains(arg0.getPoint()))
System.out.println(arg0.getPoint().toString());
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
而在主类创建一个JFrame和JPanel的。我添加到JPanel 3按钮,最后JPanel添加到JFrame,但只显示最后声明的按钮。
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame f = new JFrame("Demo");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBackground(Color.cyan);
JPanel j = new JPanel(new BorderLayout());
j.add(new Button(10,10,100,50,"text"));
j.add(new Button(10,100,100,50,"text2"));
j.add(new Button(300,10,100,50,"text3"));
f.add(j);
f.pack();
f.setSize(640, 400);;
f.setVisible(true);
}
我在做什么错?
不知道你在做什么。使用组件或绘制图片。如果您使用组件,那么您可以使用所有内置的Swing功能,如MouseListeners。如果您只是绘制图片,那么您还需要实现所有这些功能。那么这项任务的目的是什么? – camickr
这个assigment的目的是创建一个图形用户界面(GUI),例如在某个设备(如旧手机)中没有实现JButton,JLabel等时可以使用的图形用户界面 – BigMacintosh