gpt4 book ai didi

java - GUI 程序不会作为小程序运行

转载 作者:行者123 更新时间:2023-12-02 05:07:49 26 4
gpt4 key购买 nike

在我的在线 Java 类(class)中,我有以下代码:

/* This is option 1 of my Java final project. This is a program which displays a frame with a button that, when you click it, increases the number below it. */

import java.awt.*; // imports everything I need for this project
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

public class option1 { // This is where I define most of my stuff. Technical restrictions prevent me from doing this in the class where the program is itself executed (see comment towards the end).

public static void main(String[] args) {

final Frame mainFrame = new OptionOne(); // First I define my frame, button, and labels ...
Button button = new Button("Button");
final Label label1a = new Label();
final Label label1b = new Label();
final Label label1c = new Label();
final Label label2 = new Label();

label1a.setBounds(15, 30, 270, 10); // ... and set their bounds and the labels' text. Labels 1a, 1b, 1c give instructions, while label2 displays the number.
label1a.setText("This is a program where you click a button");
label1b.setBounds(15, 45, 270, 10);
label1b.setText("and the number below it increases each time");
label1c.setBounds(15, 60, 270, 10);
label1c.setText("you click. To start, just click the button.");
label2.setBounds(150, 220, 50, 30);
label2.setText("0");
button.setBounds(100, 100, 50, 50);

/* After this point, things get a little more complicated. Technical restrictions on usage of variables accross classes mean that I had to make some unusual code decisions, as you will see. */

label2.addPropertyChangeListener(label2.getText(), new PropertyChangeListener() { // This part is used to detect a change in the appearance of label2, and to react appropriately to it.
@Override // All the "@Override"s are here because it gives a compiling error if I don't put them.
public void propertyChange(PropertyChangeEvent evt) {

}
});

button.addMouseListener(new MouseListener() { // This part tells the program what to do when you click the button.
@Override // the only @Override that isn't here for technical reasons (see earlier comment at first @Override)
public void mouseClicked(MouseEvent e) {
int value = Integer.parseInt(label2.getText());
label2.setText(String.valueOf(value + 1));
}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}
});

mainFrame.add(label1a); // Now that the labels and button are fully defined, we are now ready to add them.
mainFrame.add(label1b);
mainFrame.add(label1c);
mainFrame.add(label2);
mainFrame.add(button);
}
}

class OptionOne extends Frame { // technical restrictions prevent me from putting most of my code in this class. in this code I define the actual frame itself, for its final use.

OptionOne() {
setTitle("Final Project Option 1");
setSize(300, 300);
show();
}
}

我需要将它作为小程序运行。直接将其放入 HTML 代码中,例如

<head></head>
<body>
<applet code="OptionOne.class" width="300" height="300">
</applet>
</body>

给我一​​个“java.lang.reflect.invocacytargetexception”错误。为什么我会收到此错误?我知道错误一定是在 HTML 代码中,因为程序放入编译器时运行良好,那么我做错了什么?

编辑:现在我将代码更改为:

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

public class option1main extends Panel {

public static void main(String[] args) {

Button button = new Button("Button");
final Label label1a = new Label();
final Label label1b = new Label();
final Label label1c = new Label();
final Label label2 = new Label();

label1a.setBounds(15, 30, 270, 10);
label1a.setText("This is a program where you click a button");
label1b.setBounds(15, 45, 270, 10);
label1b.setText("and the number below it increases each time");
label1c.setBounds(15, 65, 270, 10);
label1c.setText("you click. To start, just click the button.");
label2.setBounds(150, 220, 50, 30);
label2.setText("0");
button.setBounds(100, 100, 50, 50);

label2.addPropertyChangeListener(label2.getText(), new PropertyChangeListener() {
@Override // All the "@Override"s are here because it gives a compiling error if I don't put them.
public void propertyChange(PropertyChangeEvent evt) {

}
});

button.addMouseListener(new MouseListener() {

@Override
public void mouseClicked(MouseEvent e) {
int value = Integer.parseInt(label2.getText());
label2.setText(String.valueOf(value + 1));
}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}
});
}
}

public class option1 {

option1main() {
final Frame mainFrame = new OptionOne();
mainFrame.add(label1a);
mainFrame.add(label1b);
mainFrame.add(label1c);
mainFrame.add(label2);
mainFrame.add(button);
}

}

public class panel1 extends Applet {

/* init() { - not sure what to add here...? */

}

class OptionOne extends Frame {

OptionOne() {
setTitle("Final Project Option 1");
setSize(300, 300);
show();
}
}

编译时,它在“option1main() {”行上出现错误“无效方法声明:需要返回类型”。这是为什么?

最佳答案

  1. 将基本 UI 移至从 Panel 扩展的单独类
  2. 允许您当前(option1)类使用该类并将其添加到Frame您创建的实例。
  3. 创建一个从 Applet 扩展的新类。在本类(class)中init方法,创建 Panel 的实例类(来自步骤 1)并将其添加到小程序
  4. 更改您的 <applet code="OptionOne.class" width="300" height="300">指向您在步骤 3 中创建的小程序类。

旁注...

  • 考虑使用 Swing 或 JavaFX,无意冒犯,AWT 已经过时 15 年以上,而且大多数人没有(或没有)使用它的经验
  • 考虑使用适当的布局管理器来解决跨平台渲染差异的问题

关于java - GUI 程序不会作为小程序运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27613331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com