【发布时间】:2015-07-05 21:50:51
【问题描述】:
尝试将组件添加到 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;您不应该从 EDT 外部更新 ui;在进行任何自定义绘画之前,您应该覆盖 paintComponent 而不是绘画并调用 super.paintComponent;根据您的代码,我不确定您如何知道 mainLoop 的一个周期与另一个周期之间的任何区别;而且你的 frame01 实际上并没有画任何东西,所以无论如何它可能看起来与框架的默认内容相同
标签: java swing jframe jcomponent