2014-09-07 5 views
0
public void paint(Graphics g) { 
    myWidth = getSize().width; // get this Applet size 
    myHeight = getSize().height; 
    double xCoord, yCoord; 
    int yPixel; 
    String str = JOptionPane.showInputDialog("Enter your name."); 
    g.drawString(str, 100, 100); 

    for (int xPixel = 0; xPixel < myWidth; xPixel++) { 
     xCoord = (double) (xPixel - myYAxisHPos)/myXUnitPixels; 
     yCoord = f(xCoord); 
     yPixel = (int) (myXAxisVPos - yCoord * myYUnitPixels); 
     g.drawLine(xPixel, yPixel, xPixel, yPixel); 
    } 
} 

Мне интересно, почему он открывается дважды, когда я запускаю свой апплет. Любая помощь будет оценена по достоинству.JOptionPane.showinputdialog открытие дважды в апплете

+1

Зачем нужен апплет? Если это объясняется вашим инструктором, обратитесь к [Почему учителя CS должны ** останавливаться ** преподавать Java-апплеты] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop-учебно-ява-апплеты /). –

ответ

3
public void paint(Graphics g) 
{ 
.. 
String str = JOptionPane.showInputDialog("Enter your name."); 

Никогда не изменять графический интерфейс или поп-модальный диалог в рамках метода paint(Graphics)! Последний заблокирует EDT, и оба вызовут цикл.

Я задаюсь вопросом, почему он открывает в два раза, когда я начинаю свой апплет

Краска может быть вызвана в любое время, это не входит контроль программист.

Вместо этого метод следует переместить в метод init(), а результат сохранен как атрибут класса.

Что-то вроде:

String str = null; 

@Override 
public void init() { 
    str = JOptionPane.showInputDialog("Enter your name."); 
    //.. 
} 
0

Хотя вы называете paint метод с использованием метода рисования обычно paint() метод вызова с помощью виртуальной машины Java вы не можете контролировать это. Не используйте JOptionPane внутри этого. Каждый раз frame или panel получить обновление paint метод получит звонок.