открытие JFrame из апплета

-4

Поэтому я запрограммировал am апплет, который навевает шарик в круги навсегда, и я хотел, чтобы пользователь решил, какую скорость должен пройти круг, но что-то не удалось, когда я добавил JFrame:

апплет (остановка, уничтожение и обновление не появляются, потому что они не важны, а в начале ничего нет):

public class Main extends Applet implements Runnable{

private Image I;
private Graphics GfU;
int ballX, ballY=249;
static int radius=20;
double Memory;
int changeY ,changeX=1;
Speed S = new Speed();

@Override
public void init() {
setSize(750,750);
S.setVisible(true);
}

@Override
public void run() {
while(true){
if(ballY>=250 || ballY<=-250){
changeY=0-changeY;
changeX=0-changeX;
}
ballY+=changeY;
Memory=(double)ballY/250;
Memory=Math.asin(Memory);
Memory=Math.cos(Memory);
ballX=(int)(Memory*250);
if(changeX==-1)
ballX=0-ballX;

repaint();
try {
Thread.sleep(17);
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

@Override
public void paint(Graphics g) {
g.setColor(Color.black);
g.fillOval(ballX-radius+250, ballY-radius+250, radius*2, radius*2);
}

public void setChangeY(int changeY) {
this.changeY = changeY;
}

public void Done(){
S.setVisible(false);
Thread BallRun = new Thread(this);
BallRun.start();
}

}

JFrame:

public class Speed extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;

public Speed(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel P = new JPanel();
JLabel L = new JLabel("please enter velosity(pixels per second)");
final JTextField TF = new JTextField("00");
final Main M = new Main();
JButton B = new JButton("OK");

B.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
M.setChangeY(Integer.parseInt(TF.getText()));
M.Done();

}
});

P.add(L,BorderLayout.NORTH);
P.add(TF,BorderLayout.WEST);

}

@Override
public void actionPerformed(ActionEvent arg0) {

}
}

спасибо (и жаль, если это беспокоит вас отсутствие информации)

спросил(а) 2014-06-21T20:48:00+04:00 6 лет, 4 месяца назад
0
57

setDefaultCloseOperation(EXIT_ON_CLOSE);

Это не допускается даже в полностью доверенный апплет. Закрытие рамки закроет JVM, который запускает апплет, который запустил его. В JVM также могут быть запущены другие апплеты.

Посмотрите на это так. Веб-страница, на которой размещается апплет, похожа на гостя, а веб-страница - гостевой дом. Для апплета для завершения JVM похож на гостя, сжигающего гостевой дом, выбивая все окна.

setDefaultCloseOperation(DISPOSE_ON_CLOSE);

Могу "работать" (чтобы не создавать AccessControlException), но на самом деле ни один апплет не должен запускать фреймы. JDialog этого используйте JDialog.

В качестве общего совета: убедитесь, что Java-консоль настроена для показа приложений апплетов и JWS. Если на уровне по умолчанию нет выхода, поднимите его и повторите попытку. Без информации, содержащейся в нем, я сомневаюсь, что можно будет успешно разработать апплет.

ответил(а) 2014-06-23T12:04:00+04:00 6 лет, 4 месяца назад
58

Вот несколько вещей, которые следует учитывать:

Не используйте JFrame. Используйте JDialog как всплывающее окно. Кроме того, вы, вероятно, не должны создавать диалог в конструкторе. Вместо этого у вас должен быть JMenuItem, чтобы пользователь мог щелкнуть по меню, когда они хотят, чтобы всплывающее окно отображалось.

Не используйте "Applet", который является компонентом AWT. Вы должны использовать "JApplet" в приложении Swing.

Вы не должны переопределять метод paint() апплета. Вместо этого вы должны добавить JPanel в апплет, а затем переопределить paintComponent (...) с помощью своей собственной картины.

Не используйте цикл для управления анимацией. Вместо этого вы должны использовать таймер Swing.

Начните с чтения учебника Swing. Существуют разделы:

Как сделать апплеты Как использовать поворотные таймеры Выполнение пользовательской живописи

ответил(а) 2014-06-21T21:21:00+04:00 6 лет, 4 месяца назад
42

Ваш Speed класс расширяет JFrame, но только то, что вы установили это setDefaultCloseOperation(EXIT_ON_CLOSE), вы должны установить по крайней мере С.Е. размер вашего JFrame с setSize(width, height) и установить его видимым с: setVisible(true). Еще одна вещь... я не могу увидеть, где вы добавили JFrame в Main классе... Вы должны добавить его создания новой Speed объекта: Speed objectname = new Speed()

Если я правильно понял, это была ваша проблема. Я думаю, вы можете прочитать здесь, чтобы узнать, как использовать JFrame: http://www.dreamincode.net/forums/topic/206344-basic-gui-in-java-using-jframes/

ответил(а) 2014-06-21T21:22:00+04:00 6 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема