Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保持图形屏幕_Java_Swing - Fatal编程技术网

Java 保持图形屏幕

Java 保持图形屏幕,java,swing,Java,Swing,在我的程序中,我有一个从JPanel扩展的类GraphDisplay,用于创建图形。。。在它的构造函数中,我有一个函数display(),它创建了我想要的所有东西,包括一个用于侦听的按钮 在另一个类MainGUI中,我在用户的一个对话框操作之后创建了一个上面类的对象,发生的事情是上面的类对象被创建并在消失之前显示了几分之一秒 有没有一种方法可以让MainGUI在上面的对象上等待输入,而不是关闭 GraphDisplay是这样的 public class GraphDisplay extends

在我的程序中,我有一个从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
    }
公共类GraphDisplay扩展了JPanel{
私有静态最终长serialVersionUID=1L;
GraphDisplay(字符串源、字符串目标、列表节点、列表边、列表边)
{
//赋值
这个.display();
}
公共空间显示(){
frame1=新的JFrame();
框架1.设置大小(400400);
frame1.setVisible(true);
frame1.setLayout(新的FlowLayout(FlowLayout.LEFT));
框架1.立根背景(颜色:浅灰色);
frame1.repaint();
JButton next=新JButton(“next”);
next.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e)
{
System.out.println(“你好”);
}
});
}
公共组件(图形g){
//他画了一些画
}

谢谢

如果你想在
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);
    }
}

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

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


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

我已经…正如我所说,输出在jpanel上绘制,但jpanel本身不会停留太久…你能发布一些关于如何初始化JFrame并将jpanel添加到其中的代码吗?嘿,添加了一个代码的一部分…你能看看我正在做的任何错误吗…我特别不理解你在框架中添加面板的说法…我的代码…它不会自动关闭,为什么它会关闭?@Suraj这就是我面临的问题:)你实际上没有在面板中添加框架或下一个按钮。你修复了吗?好了下面是一些关于你最近在其他问题中使用框架和面板的评论。希望这些对你有所帮助。