Java 如何访问以序列化方式创建的对象?
这是我的代码:在这里,我单击鼠标右键,选择test1。代码创建一个JLabel并将其放置在该位置Java 如何访问以序列化方式创建的对象?,java,actionlistener,createobject,Java,Actionlistener,Createobject,这是我的代码:在这里,我单击鼠标右键,选择test1。代码创建一个JLabel并将其放置在该位置 public class Test extends JFrame { int x; int y; JPopupMenu menu = new JPopupMenu("Popup"); class MyLabel extends JLabel { public MyLabel(String text) {
public class Test extends JFrame {
int x;
int y;
JPopupMenu menu = new JPopupMenu("Popup");
class MyLabel extends JLabel {
public MyLabel(String text) {
super(text);
addMouseListener(new PopupTriggerListener());
}
class PopupTriggerListener extends MouseAdapter {
public void mousePressed(MouseEvent ev) {
if (ev.isPopupTrigger()) {
menu.show(ev.getComponent(), ev.getX(), ev.getY());
x = ev.getX();
y = ev.getY();
}
}
public void mouseReleased(MouseEvent ev) {
if (ev.isPopupTrigger()) {
menu.show(ev.getComponent(), ev.getX(), ev.getY());
x = ev.getX();
y = ev.getY();
}
}
public void mouseClicked(MouseEvent ev) {
}
}
}
JLabel label = new MyLabel("right-click");
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuItem item = new JMenuItem("Test1");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Menu item Test1");
JLabel newLabel = new JLabel("test");
label.add(newLabel);
newLabel.setBounds(x, y, 40, 10);
}
});
menu.add(item);
item = new JMenuItem("Test2");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Menu item Test2");
}
});
menu.add(item);
getContentPane().add(label);
pack();
setSize(300, 100);
}
public static void main(String[] args) {
new Test().setVisible(true);
}
但我不知道之后,我如何才能访问这些标签(例如修改它们的文本)。如果用户用右键单击标签并选择“删除”,我还想删除创建的标签,但在actionPerformed代码中,netbeans不允许我添加另一个actionListener。。有人能帮我吗?谢谢所有更改都在
测试
构造函数中:
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Change the name here from "Test1" to whatever you want
JMenuItem item = new JMenuItem("Test1");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Menu item Test1");
JLabel newLabel = new JLabel("test");
label.add(newLabel);
newLabel.setBounds(x, y, 40, 10);
}
});
menu.add(item);
// Change the name here from "Test2" to whatever you want
item = new JMenuItem("Test2");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Menu item Test2");
}
});
menu.add(item);
// Implement a "Delete" option
item = new JMenuItem("Delete");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Menu item Delete");
// Get the component at the mouse coordinates
Component comp = label.getComponentAt(x, y);
// If the component is a JLabel, delete it
if (comp instanceof JLabel) {
label.remove(comp);
// Repaint the screen to remove the label
repaint();
}
}
});
menu.add(item);
getContentPane().add(label);
pack();
setSize(300, 100);
}
好的,很好!!但是为了我的目的,我必须制作一份菜单,在这段时间内可以改变。。是否有可能在每次单击右键时创建一个菜单?我在努力,但没用。。。你能帮助我吗?谢谢,每次点击右键都可以更改菜单,但是您想在菜单中更改什么?