У меня возникла ошибка при попытке добавить компонент в JFrame.Почему JFrame не добавляет компонент правильно
Это первый класс:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
public class FrameG extends JFrame
{
private static final String MOVE_UP = "move up";
public static int frameID = 1;
private static JFrame window = new JFrame();
private static openWin frame = new frame01();
public static void main(String[] args) {
window.setSize(1500,900);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
window.setResizable(true);
frame.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_W, 0), MOVE_UP);
frame.getActionMap().put(MOVE_UP, new movement());
mainloop();
}
private static void mainloop()
{
window.removeAll();
switch(frameID)
{
case 1:
frame = new frame01();
frame.setLayout(new FlowLayout());
System.out.println(frame);
window.add(frame);
break;
default:
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(FrameG.class.getName()).log(Level.SEVERE, null, ex);
}
mainloop();
}
}
class movement extends AbstractAction
{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("hi");
}
}
и второй класс (он расширяет класс с абстрактным методом краски, которая простирается JComponent):
import java.awt.Graphics;
import java.awt.*;
import javax.swing.JComponent;
import java.awt.geom.*;
public class frame01 extends openWin{
@Override
public void paint(Graphics g) {
Graphics2D pic = (Graphics2D) g;
pic.setBackground(Color.BLACK);
}
}
Ошибка может быть недействительной части , но я не уверен, что это такое:
frameg.frame01[,0,0,0x0,invalid,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=]
'private static openWin frame = new frame01();' кажется подозрительным. Расширьте эту строку. –
Вы метод mainLoop вызовет исключение StackOverflowException; вы не должны обновлять ui за пределами EDT; вы должны переопределять paintComponent, а не рисовать и называть super.paintComponent, прежде чем делать какую-либо обычную картину; основанный на вашем коде, я не уверен, как вы знаете какую-либо разницу между одним циклом mainLoop и другим; также вы frame01 на самом деле ничего не рисуете, поэтому он, вероятно, будет выглядеть так же, как и содержимое по умолчанию в кадре в любом случае – MadProgrammer