У меня есть странная проблема с отображением компонентов в JFrame.JPanel не отображает все компоненты, изготовленные на заказ
Я должен написать свой собственный графический движок (кнопки, текстовые поля и т. Д.) Без использования 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
Целью этого подхода является создание графического интерфейса пользователя, который может использоваться, например, если на определенном устройстве (например, на старых мобильных телефонах) не реализовано JButton, JLabel и т. Д. – BigMacintosh