Держите графический экран - PullRequest
0 голосов
/ 22 марта 2011

В моей программе у меня есть класс GraphDisplay, расширенный от JPanel, который используется для создания графики ... В его конструкторе у меня есть функция 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 ]

1 голос
/ 22 марта 2011

Если вы хотите рисовать вещи на JPanel, вы должны переопределить метод paintComponent(Graphics).Он будет вызываться автоматически каждый раз, когда JPanel нужно нарисовать себя.

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

Вы создаете JFrame внутри своей JPanel.Ниже приведен самый простой пример того, что вы хотите сделать, я думаю, вы видите проблему:

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);
    }
}
0 голосов
/ 22 марта 2011

Если вся программа закрывается (не ясно из вашего вопроса), то это происходит в результате какого-то метода, который вы вызываете (например, System.exit ());

Выполняет ли MainGUI дополнительные действия после создания GraphDisplay? Если это так, помните, что создание панели не останавливает текущий поток выполнения.

Чистый способ закрыть программу после завершения GraphDisplay - написать listenerInterface (с одним методом 'Done'), реализовать этот интерфейс с классом MainGUI (чтобы закрыть приложение) и передать Класс MainGUI для панели GraphDisplay. Затем панель GraphDisplay может вызвать «I'm Done», когда пользователь выполняет требуемое действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...