, поэтому я играю с JPanels и JFrames, и я замечаю, что созданный JPanel не отображается, когда я добавляю его в объект Jframe. Обратите внимание, что когда я создал JPanel в моем конструкторе Jframe, давая параметры jpanel перед добавлением в Jframe, он работал. Однако теперь я использую объект JPanel, который я создал, и он больше не работает. Это то, что я сделал.JPanel не отображается в моем JFrame
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyGui extends JFrame {
MyMouseListener listen = new MyMouseListener();
public MyGui() {
setSize(500, 500);
//setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
getContentPane().setBackground(Color.WHITE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Panel panel = new Panel();
add(panel, BorderLayout.WEST);
//setVisible(true);
show();
}
public static void main(String[] a) {
MyGui gui = new MyGui();
}
}
class Panel extends JPanel {
MyMouseListener listen = new MyMouseListener();
public Panel() {
setPreferredSize(new Dimension(300, 300));
addMouseListener(listen);
setBackground(Color.YELLOW);
setLayout(new GridLayout(3, 1));
}
public void paint(Graphics g) {
super.paintComponents(g);
g.drawOval((int) Math.round(listen.p.getX()),
(int) Math.round(listen.p.getX()), 1, 1);
}
}
class MyMouseListener implements MouseListener {
Point p = new Point();
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Mouse was clicked");
}
@Override
public void mousePressed(MouseEvent e) {
p = e.getPoint();
System.out.println(p);
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
EDIT: На самом деле я думаю, что я нашел ошибку. JPanel имеет метод рисования, который при удалении позволяет Jframe отображать панель. Однако мне нужно уметь рисовать вещи на JPanel.
Прежде чем показывать рамку, вызовите пакет() или setSize(). Если вы добавите панель после показа вызова revalidate(); перекрасить(); – StanislavL
Единственное, что я изменил в своем коде, чтобы увидеть вашу панель, это изменить 'super.paintComponents (g);' на 'super.paintComponent (g);'. Это все еще не касается вашего овала, который не окрашен. –
@JonathanDrapeau Так это выглядело понравилось это?public void paintComponent (Графика g) { \t \t super.paintComponent (g); \t \t g.drawOval ((int) Math.round (listen.p.getX()), (int) Math.round (listen.p.getX()), 1, 1); \t} –