【发布时间】:2018-04-10 09:55:09
【问题描述】:
我正在编写的程序有问题。 我把你放在上下文中......
我尝试在这个程序中实现:MVC 模式,所以,基本上,我将类分开,放在不同的包中。
我有一个:视图和控制器包,在视图包中我有一个:UserInterface 类,它扩展了 JFrame,并包含一个:JMenuBar、JMenu 和 JMenuItem...
可以用JMenuItem添加标签,这个JMenuItem,获取并添加一个:ActionListener,那个actionlistener来自另一个类,这个类是:Item,并实现了一个actionlistener,这个actionlistener创建一个tab,并添加到JFrame .
最后是 Main 类,只需调用 UserInterface 并运行程序即可。
问题是这样...在实现 ActionListener 的 Item 类中,我需要创建 UserInterface 类的实例,以便可以添加选项卡,但是当我这样做并运行程序时,添加了标签,但是每次点击JFrame都会开始溢出,我是指打开,打开,然后多次打开JFrame。
我知道发生这种情况是因为我在实现的类中创建了一个实例:ActionListener,但我无法修复。
对我来说最合乎逻辑的是,在 actionlistener 方法之外创建 UserInterface 的实例,只是为了调用实例的标识符,并将选项卡添加到用户界面,但没有任何效果。
我花了很多时间试图解决这个问题,但我无法... 这样做的目的,修复问题,避免JFrame溢出,我指的只是将标签添加到框架中,并修复多个打开框架的问题。
代码:
主类:
package controller;
import view.*;
public class Main{
public void InvokeMain(){
UserInterface ui = new UserInterface();}
public static void main(String args []){
Main m = new Main();
m.InvokeMain();}}
用户界面类:
package view;
import controller.*;
import javax.swing.*;
public class UserInterface extends JFrame{
private static final long serialVersionUID = 1L;
public JMenuBar navbar = new JMenuBar();
public JMenu file = new JMenu("File");
public JMenuItem tab = new JMenuItem("Tab");
public UserInterface(){
Item action = new Item();
setSize(800, 400);
setDefaultCloseOperation(UserInterface.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setJMenuBar(navbar);
setVisible(true);
file.add(tab);
tab.addActionListener(action);
navbar.add(file);}}
物品类别:
package controller;
import view.*;
import javax.swing.*;
import java.awt.event.*;
public class Item implements ActionListener{
public static JTabbedPane tabs = new JTabbedPane();
public void actionPerformed(ActionEvent A){
UserInterface user = new UserInterface();
tabs.addTab("untitled", null, null, "untitled");
user.add(tabs);}}
¿有人可以帮我解决这个问题吗?或者 ¿给我一个想法? 希望有人可以帮助我,非常感谢您的时间,问候。
【问题讨论】:
标签: java methods jframe stack-overflow actionlistener