保持图形屏幕

时间:2011-03-22 13:11:19

标签: java swing

在我的程序中,我有一个从JPanel扩展的类GraphDisplay,用于创建图形......在它的构造函数中,我有一个函数display(),它创建了我想要的所有东西,包括一个用于监听的按钮...

在其他一些类MainGUI中,我在用户进行对话操作后创建了一个上面的类对象,结果是上面的类对象被创建并在消失之前显示了几分之一秒....

有没有办法告诉MainGUI等待上面的对象输入而不是关闭....

GraphDisplay是这样的......

public class GraphDisplay extends JPanel {

    private static final long serialVersionUID = 1L;

    GraphDisplay(String source , String destination , List<Node> nodes , List<GUIEdge> edges , List<GUIEdge> spanedges) 
    {
         //assigning values
         this.display();
    }

    public void display() {
        frame1 = new JFrame();
        frame1.setSize(400,400);
        frame1.setVisible(true);
        frame1.setLayout(new FlowLayout(FlowLayout.LEFT));
        frame1.setBackground(Color.lightGray);
        frame1.repaint();
        JButton next = new JButton("NEXT");
        next.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                    System.out.println("Hello");
            }
    });

    }

    public void paintComponent(Graphics g) {
       //does some painting
    }

谢谢

2 个答案:

答案 0 :(得分:1)

如果您想在JPanel上绘制内容,则应该覆盖paintComponent(Graphics)方法。每次JPanel需要绘制自己时,它都会自动调用。

@Override
public paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawLine(...);
    g.drawOval(...);
    /*Other stuff*/
}

您正在JPanel中创建JFrame。我可以告诉你关于你想做什么的最基本的例子如下,我认为你可以看到问题:

public class Test extends JFrame{
    public static void main(String[] args){
        JFrame frame = new JFrame();
        MyPanel myPanel = new MyPanel();
        frame.add(myPanel);

        frame.pack();
        frame.setVisible(true);
    }

}

class MyPanel extends JPanel{
    @Override
    public void paintComponent(Graphics g){
        g.drawLine(10, 10, 100, 100);
    }
}

答案 1 :(得分:0)

如果整个程序正在关闭(从您的问题中不清楚),那么它是由于您调用的某种方法(例如System.exit())而这样做的;

MainGUI是否在创建GraphDisplay后执行其他操作?如果是这样,请记住创建面板不会停止当前的执行流程。

一旦GraphDisplay完成,关闭程序的一种简洁方法是编写一个listenerInterface(使用单个'I'm Done'方法),使用MainGUI类实现该接口(关闭应用程序)并传递GraphDisplay面板的MainGUI类。然后,当用户执行所需的操作时,GraphDisplay面板可以调用“我已完成”。