gpt4 book ai didi

java - Java 中的实例

转载 作者:行者123 更新时间:2023-12-02 04:09:32 25 4
gpt4 key购买 nike

我有 4 节课; RunSOMyGUIMyMenuBarNumberSettingsFile。我有一个 NumberSettingsFile 实例在 MyGUIMyMenuBar 中。问题是它们是单独的实例,因此当我在一个实例中使用方法时,它不会更新第二个实例中的值。我的问题是如何让这些实例协同工作。例如,如果我将 sortComboBox 的值设置为 11。它会更新 MyMenuBar 中的 NumberSettingsFile 实例,但不会更新 MyGUI 中的实例。因此,当按下按钮时,给定的值仍然是 10。我如何让它更新两个实例中的值,以便当我按下按钮时它会给出值 11 (在本例中)。

4个类的代码如下。

NumberSettingsFile

package SO;

public class NumberSettingsFile
{
int numberSetting1 = 10;

public int getNumberSetting1()
{
return numberSetting1;
}

public void setNumberSetting1(int newNumberSetting1)
{
numberSetting1 = newNumberSetting1;
}
}

我的菜单栏

package SO;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class MyMenuBar extends JMenuBar
{
ArrayList<Integer> list = new ArrayList<Integer>();
NumberSettingsFile uniSet = new NumberSettingsFile();
JComboBox sortComboBox;
MyGUI mG;

public MyMenuBar(MyGUI mG)
{
this.mG = mG;
setBorderPainted(true);
makeMenuBar();
}

public void makeMenuBar()
{
countTo(20);
sortComboBox = new JComboBox(list.toArray());
sortComboBox.setMaximumSize(new Dimension(100,25));
sortComboBox.addItemListener(new sortComboBoxChanged());
add(sortComboBox);
sortComboBox.setSelectedItem(uniSet.getNumberSetting1());
}

public void countTo(int C)
{
for(int k =2; k<=C; k++)
{
list.add(k);
}
}

class sortComboBoxChanged implements ItemListener
{
@Override
public void itemStateChanged(ItemEvent e)
{
String s = sortComboBox.getSelectedItem()+"";
uniSet.setNumberSetting1(Integer.parseInt(s));
System.out.println("This is the number which should be shown if you click the button: "+uniSet.getNumberSetting1());
}
}
}

MyGUI

package SO;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MyGUI
{
JFrame exampleFrame = new JFrame("Example");
JPanel examplePanel = new JPanel();
JButton exButton = new JButton();

NumberSettingsFile uniSet = new NumberSettingsFile();
MyMenuBar mbr;

public void runGUI()
{
exampleFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

exampleFrame.setBounds(10,10,250,180);

exampleFrame.setLayout(new GridLayout(1,1));

createExamplePanel();

mbr = new MyMenuBar(this);

exampleFrame.setJMenuBar(mbr);

exampleFrame.getContentPane().add(examplePanel);

exampleFrame.setVisible(true);
}

public void createExamplePanel()
{
examplePanel.setLayout(null);

exButton.setBounds(10,10,100,100);
exButton.setText("<html><CENTER>Press Me</CENTER></html>");
exButton.addActionListener(new CustomActionListener());
examplePanel.add(exButton);
}

public static void main(String[] args)
{
MyGUI mG = new MyGUI();
mG.runGUI();
}

class CustomActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == exButton)
{
System.out.println("This is the number which is shown if you click the button: "+uniSet.getNumberSetting1());
}
}
}
}

RunSO.java

import SO.*;

public class RunSO
{
public static void main(String[] args)
{
RunSO rS = new RunSO();
MyGUI.main(args);
}
}

如果您能就此事提供帮助,我将不胜感激。

最佳答案

您想要在两个对象之间共享一个 NumberSettingsFile 实例。为此,您应该避免在类中创建它,而是在创建两个类的位置创建它,并向它们传递共享实例。

在这种情况下,您的一个类已经创建了另一个类的实例。因此,您应该传递 NumberSettingsFile 的实例:

MyMenuBar中,而不是创建实例:

NumberSettingsFile uniSet = new NumberSettingsFile();

只需声明而不初始化:

NumberSettingsFile uniSet;

然后更改构造函数:

public MyMenuBar(MyGUI mG, NumberSettingsFile uniSet)
{
this.mG = mG;
this.uniSet = uniSet;
setBorderPainted(true);
makeMenuBar();
}

然后,在MyGui中,更改菜单栏的创建:

mbr = new MyMenuBar(this, uniSet);

现在 GUI 和菜单栏之间仅共享一个实例。

关于java - Java 中的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33923246/

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