gpt4 book ai didi

java - 从 jframe 调用 japplet

转载 作者:行者123 更新时间:2023-11-29 05:31:42 25 4
gpt4 key购买 nike

手动设计了JApplet类,我使用Netbean Builder设计了主类,默认情况下自动生成代码的类将扩展JFrame。那么如何从 JFrame 运行 JApplet 类。
这个 JApplet 代码
现在的问题是按钮没有出现
已更新

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class GalaxyTable2 extends JFrame{ //JApplet

private static final int PREF_W = 700;
private static final int PREF_H = 600;
String[] columnNames
= {"Phone Name", "Brief Description", "Picture", "price",
"Buy"};

// Create image icons
ImageIcon Image1 = new ImageIcon(
getClass().getResource("s1.png"));
ImageIcon Image2 = new ImageIcon(
getClass().getResource("s2.png"));
ImageIcon Image3 = new ImageIcon(
getClass().getResource("s3.png"));
ImageIcon Image4 = new ImageIcon(
getClass().getResource("s4.png"));
ImageIcon Image5 = new ImageIcon(
getClass().getResource("note.png"));
ImageIcon Image6 = new ImageIcon(
getClass().getResource("note2.png"));
ImageIcon Image7 = new ImageIcon(
getClass().getResource("note3.png"));

Object[][] rowData = {
{"Galaxy S", "3G Support,CPU 1GHz",
Image1, 120, false},
{"Galaxy S II", "3G Support,CPU 1.2GHz",
Image2, 170, false},
{"Galaxy S III", "3G Support,CPU 1.4GHz",
Image3, 205, false},
{"Galaxy S4", "4G Support,CPU 1.6GHz",
Image4, 230, false},
{"Galaxy Note", "4G Support,CPU 1.4GHz",
Image5, 190, false},
{"Galaxy Note2 II", "4G Support,CPU 1.6GHz",
Image6, 190, false},
{"Galaxy Note 3", "4G Support,CPU 2.3GHz",
Image7, 260, false},};

MyTable ss = new MyTable(
rowData, columnNames);

// Create a table
JTable jTable1 = new JTable(ss);

public GalaxyTable2() {
jTable1.setRowHeight(70);

add(new JScrollPane(jTable1),
BorderLayout.CENTER);
JFrame f = new JFrame();

this.setTitle("Galaxy Phones");
JButton button = new JButton("Home");
button.setSize(new Dimension(200, 500));
button.setLocation(400, 500);
f.getContentPane().add(button);
JButton button2 = new JButton("Confirm");
button2.setSize(new Dimension(100, 500));
button2.setLocation(100, 300);
// button2.addActionListener(null);
f.getContentPane().add(button2);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setSize(800, 700);
this.setLocation(300, 0);
}
@Override

public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H);
}

public void actionPerformed(ActionEvent e) {
new AMainFrame7().setVisible(true);
}

public static void main(String[] args) {

GalaxyTable2 b=new GalaxyTable2();
/*
JFrame f = new JFrame();

JButton button = new JButton("Home");
button.setSize(new Dimension(100, 50));
button.setLocation(400, 500);
f.getContentPane().add(button);
JButton button2 = new JButton("Confirm");
button2.setSize(new Dimension(100, 50));
button2.setLocation(200, 500);
button2.addActionListener(null);
f.getContentPane().add(button2);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setTitle("Galaxy Phones");
f.setSize(500, 500);
f.getContentPane().add(f, button2);
applet.init();
applet.start();*/
b.pack();

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
b.setLocation((d.width - b.getSize().width) / 2,
(d.height - b.getSize().height) / 2);
b.setVisible(true);

}
}

和主类中的这个 Action 代码

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
new GalaxyTable().setVisible(true);
dispose();
}

最佳答案

首先,Applet 被设计为在浏览器(或 applet 查看器)的上下文中运行,它们并不是真正被设计为添加到其他容器中。

从技术上讲,您可以像添加任何其他组件一样将小程序添加到框架,但就我个人而言,我不会这样做。该小程序需要更多可用信息,以使其充分发挥作用。

相反,我会将所有“应用程序”内容移动到一个单独的组件,例如 JPanel,并根据需要在 applet 或框架之间简单地移动它...

ps- 您可以使用 f.setLocationRelativeTo(null) 使窗口在屏幕上居中 ;)

已更新

你需要回到基础。除非你绝对必须拥有一个,否则在你了解 Swing 的基础知识之前避免使用 applet,例如......

GalzyTable2 的构造函数中,您正在做...

JApplet app = new JApplet();
add(app);
app.init();
app.start();

...为什么要在一个小程序中添加另一个小程序??

恰当的例子...

main 方法中,您试图将 JFrame 的实例添加到自身...

f.getContentPane().add(f, button2);

相反,为自己创建一个类,它从类似 JPanel 的类扩展,将您的 UI 逻辑添加到此,如果需要,使用复合组件。

然后,将此面板添加到您需要的任何顶级容器中。

花时间通读Creating a GUI with Swing

更新了示例

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class GalaxyTable2 extends JPanel {

private static final int PREF_W = 700;
private static final int PREF_H = 600;

String[] columnNames
= {"Phone Name", "Brief Description", "Picture", "price",
"Buy"};

// Create image icons
ImageIcon Image1 = new ImageIcon(
getClass().getResource("s1.png"));
ImageIcon Image2 = new ImageIcon(
getClass().getResource("s2.png"));
ImageIcon Image3 = new ImageIcon(
getClass().getResource("s3.png"));
ImageIcon Image4 = new ImageIcon(
getClass().getResource("s4.png"));
ImageIcon Image5 = new ImageIcon(
getClass().getResource("note.png"));
ImageIcon Image6 = new ImageIcon(
getClass().getResource("note2.png"));
ImageIcon Image7 = new ImageIcon(
getClass().getResource("note3.png"));

Object[][] rowData = {
{"Galaxy S", "3G Support,CPU 1GHz",
Image1, 120, false},
{"Galaxy S II", "3G Support,CPU 1.2GHz",
Image2, 170, false},
{"Galaxy S III", "3G Support,CPU 1.4GHz",
Image3, 205, false},
{"Galaxy S4", "4G Support,CPU 1.6GHz",
Image4, 230, false},
{"Galaxy Note", "4G Support,CPU 1.4GHz",
Image5, 190, false},
{"Galaxy Note2 II", "4G Support,CPU 1.6GHz",
Image6, 190, false},
{"Galaxy Note 3", "4G Support,CPU 2.3GHz",
Image7, 260, false},};

MyTable ss = new MyTable(
rowData, columnNames);

// Create a table
JTable jTable1 = new JTable(ss);

public GalaxyTable2() {
jTable1.setRowHeight(70);

add(new JScrollPane(jTable1),
BorderLayout.CENTER);

JPanel buttons = new JPanel();

JButton button = new JButton("Home");
buttons.add(button);
JButton button2 = new JButton("Confirm");
buttons.add(button2);

add(buttons, BorderLayout.SOUTH);
}

@Override

public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H);
}

public void actionPerformed(ActionEvent e) {
new AMainFrame7().setVisible(true);
}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new GalaxyTable2());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}

您似乎还缺乏对如何使用布局管理器的理解。

花时间通读Creating a GUI with SwingLaying components out in a container

关于java - 从 jframe 调用 japplet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20863709/

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