Java 将函数分配给Jbutton
我有几个类来创建一个非常简单的GUI(Java 将函数分配给Jbutton,java,swing,jbutton,actionlistener,jtree,Java,Swing,Jbutton,Actionlistener,Jtree,我有几个类来创建一个非常简单的GUI(JFrame),其中包含一些对象,如JTabbedPanel和JTree。在JTabbedPanel中创建功能区的一个类创建了一个JButton,该类应该具有更新JTree的功能 我确实有一些getter,但我不知道如何使用JButton更新在main方法中创建的对象(GUI对象,从那里我可以访问JTree) 如何在JButton的实际类中的main方法中创建的对象上更新某些内容 我可能不得不改变我项目的结构 public class Gui extends
JFrame
),其中包含一些对象,如JTabbedPanel和JTree
。在JTabbedPanel
中创建功能区的一个类创建了一个JButton
,该类应该具有更新JTree
的功能
我确实有一些getter,但我不知道如何使用JButton
更新在main方法中创建的对象(GUI对象,从那里我可以访问JTree
)
如何在JButton
的实际类中的main方法中创建的对象上更新某些内容
我可能不得不改变我项目的结构
public class Gui extends JFrame{
private Ribbon ribbon;
private Status status;
public Panel panel;
public Gui(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("INIT TITLE");
setExtendedState(Frame.MAXIMIZED_BOTH);
setMinimumSize(new Dimension(600,400));
setVisible(true);
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
ribbon = new Ribbon();
add(ribbon, BorderLayout.NORTH);
status = new Status();
add(status, BorderLayout.SOUTH);
panel = new Panel();
add(panel, JSplitPane.HORIZONTAL_SPLIT);
//panel.setLeftComponent(panel.getTree());
//panel.openProject();
setVisible(true);
panel.loadProject();
}
缎带没什么作用:
公共类功能区扩展了JTabbedPane{
public Ribbon(){
addTab("Home", null, new RibbonHome());
addTab("Import", null, new RibbonImport());
addTab("Options", null, new RibbonOptions());
}
}
但功能区选项卡会创建一些按钮:
public class RibbonHome extends JPanel{
private JButton b1, b2, b3;
public RibbonHome(){
b1 = new JButton("test1");
b2 = new JButton("test2");
b3 = new JButton("test3");
add(b1);
add(b2);
add(b3);
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//UPDATE the JTree
}
});
}
}
您正在做的代码示例将使事情变得更简单,但无论如何 您可能希望使计划更新的组件成为类成员。这样,您可以在现在初始化的地方初始化它,但仍然可以从ActionListener访问它 同样,这是一个关于你是如何构造事物的猜测,所以如果你能发布一个代码示例,我相信你能得到更详细的答案 代码示例后编辑: 您可以为RibbonHome提供Gui类型的额外私有成员。我通常称之为父级,因此它变成:
privategui父级代码>
在RibbonHome的构造函数中,添加Gui作为参数,这样RibbonHome将始终可以访问其父级
还可以将其添加到Ribbon的构造函数中,因为您需要将其传递到那里
作为最后一步,您将始终必须使用Gui作为参数来构造Ribbon,因此在Gui中它将变成:Ribbon=newRibbon(this)代码>
一旦你完成了所有这些,你就可以通过你的JTree在parent上的getter到达JTree
有更好的解决方案,因为这将有一个缺点,即您永远无法从Gui以外的其他组件构建新功能区,但如果您需要,可以使用接口 您正在做的代码示例将使事情变得更简单,但无论如何
您可能希望使计划更新的组件成为类成员。这样,您可以在现在初始化的地方初始化它,但仍然可以从ActionListener访问它
同样,这是一个关于你是如何构造事物的猜测,所以如果你能发布一个代码示例,我相信你能得到更详细的答案
代码示例后编辑:
您可以为RibbonHome提供Gui类型的额外私有成员。我通常称之为父级,因此它变成:privategui父级代码>
在RibbonHome的构造函数中,添加Gui作为参数,这样RibbonHome将始终可以访问其父级
还可以将其添加到Ribbon的构造函数中,因为您需要将其传递到那里
作为最后一步,您将始终必须使用Gui作为参数来构造Ribbon,因此在Gui中它将变成:Ribbon=newRibbon(this)代码>
一旦你完成了所有这些,你就可以通过你的JTree在parent上的getter到达JTree
有更好的解决方案,因为这将有一个缺点,即您永远无法从Gui以外的其他组件构建新功能区,但如果您需要,可以使用接口
按钮(主)李>
main实现并提供了该方法
按钮(主)李>
main实现并提供了该方法
最明显的答案当然是将Gui
类的引用传递给Ribbon
类,而该类又可以将其传递给RibbonHome
类
public Gui{
//...
ribbon = new Ribbon( this );
//...
}
public Ribbon ( Gui gui ){
//...
addTab("Home", null, new RibbonHome( gui ));
//...
}
public RibbonHome( Gui gui){
//...
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//UPDATE the JTree
}
});
//...
}
然而,这确保了不同类之间的紧密耦合。我不知道您到底想在JTree
上更新什么,但更基本的解决方案可能是在不同的视图之间共享一个模型。当模型更改时,您的JTree
会自动更新,而按钮只会更新模型。最明显的答案当然是将Gui
类的引用传递给Ribbon
类,而该类又可以将其传递给RibbonHome
类
public Gui{
//...
ribbon = new Ribbon( this );
//...
}
public Ribbon ( Gui gui ){
//...
addTab("Home", null, new RibbonHome( gui ));
//...
}
public RibbonHome( Gui gui){
//...
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//UPDATE the JTree
}
});
//...
}
然而,这确保了不同类之间的紧密耦合。我不知道您到底想在JTree
上更新什么,但更基本的解决方案可能是在不同的视图之间共享一个模型。当模型更改时,您的JTree
会自动更新,而按钮只会更新模型。Good point;)问题是:如何更新在JButton实际类的main方法中创建的对象上的内容?好问题。我已将其编辑到帖子中。好观点;)问题是:如何更新在JButton实际类的main方法中创建的对象上的内容?好问题。我已将其编辑到帖子中。非常感谢,我将在今天晚些时候尝试。非常感谢,我将在今天晚些时候尝试。有什么更好的解决方案?我对Java相当陌生,我想知道,什么是最佳实践。什么是更好的解决方案?我对Java相当陌生,我想知道,最佳实践是什么。