【问题标题】:Where would I place my main method in this application?我应该将我的主要方法放在这个应用程序中的什么位置?
【发布时间】:2022-01-19 09:52:30
【问题描述】:

我目前正在执行一项任务,我必须创建一个使用动态数据填充树和列表的应用程序。我之前尝试过将 main 方法放在这个类中,唯一一次看起来我可以编译的是如果我将所有变量都更改为静态。我可以将我的主要方法放在这个类中(我可以在哪里?)还是我需要另一个类?谢谢。

import javax.swing.DefaultListModel;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;

import Accounts.Client;
import Accounts.ClientLoader;
import Accounts.Account;
import Accounts.Bootstrap;
import Accounts.Portfolio;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.JTextField;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;

import java.awt.Font;
import javax.swing.JTree;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JMenu;
import javax.swing.JTextArea;

public class FormWindow {
    protected JFrame frame;
    private DefaultListModel < String > clientDetail = new DefaultListModel < String > ();
    private Client person;
    private JTextField firstName;
    private JTextField lastName;
    private JTextField phoneNumber;

    public FormWindow(Client person) {
        this.person = person;
        initialize();
    }

    private void initialize() {

        frame = new JFrame("Client Manager");
        frame.setBounds(100, 100, 903, 719);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setHorizontalScrollBarPolicy
           (ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setVerticalScrollBarPolicy
           (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.setBounds(10, 11, 619, 192);
        frame.getContentPane().add(scrollPane);

        JTextArea textArea = new JTextArea();
        scrollPane.setViewportView(textArea);

        firstName = new JTextField(person.getFirstName());
        firstName.setBounds(730, 11, 144, 26);
        frame.getContentPane().add(firstName);
        firstName.setColumns(10);

        lastName = new JTextField(person.getLastName());
        lastName.setBounds(730, 66, 144, 26);
        frame.getContentPane().add(lastName);
        lastName.setColumns(10);

        phoneNumber = new JTextField(person.getPhoneNumber());
        phoneNumber.setBounds(730, 123, 144, 26);
        frame.getContentPane().add(phoneNumber);
        phoneNumber.setColumns(10);

        JButton btnNewButton = new JButton("Update Interface");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                person.setFirstName(firstName.getText());
                person.setLastName(lastName.getText());
                person.setPhoneNumber(phoneNumber.getText());
                repaintForm();
            }
        });
        btnNewButton.setBounds(639, 168, 235, 35);
        frame.getContentPane().add(btnNewButton);

        JLabel lblNewLabel = new JLabel("First Name");
        lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 15));
        lblNewLabel.setBounds(649, 11, 71, 20);
        frame.getContentPane().add(lblNewLabel);

        JLabel lblNewLabel_1 = new JLabel("Last Name");
        lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 15));
        lblNewLabel_1.setBounds(649, 70, 71, 14);
        frame.getContentPane().add(lblNewLabel_1);

        JLabel lblNewLabel_2 = new JLabel("      Phone");
        lblNewLabel_2.setFont(new Font("Tahoma", Font.PLAIN, 15));
        lblNewLabel_2.setBounds(634, 127, 71, 14);
        frame.getContentPane().add(lblNewLabel_2);

        JScrollPane scrollPane_1 = new JScrollPane();
        scrollPane_1.setHorizontalScrollBarPolicy
            (ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane_1.setBounds(10, 214, 425, 436);
        frame.getContentPane().add(scrollPane_1);

        //needs work: TREE
        DefaultMutableTreeNode portfolios = new DefaultMutableTreeNode("Portfolios");
        JTree tree = new JTree(portfolios);
        scrollPane_1.setViewportView(tree);

        JScrollPane scrollPane_2 = new JScrollPane();
        scrollPane_2.setHorizontalScrollBarPolicy
            (ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane_2.setBounds(445, 214, 429, 436);
        frame.getContentPane().add(scrollPane_2);

        JMenuBar menuBar = new JMenuBar();
        frame.setJMenuBar(menuBar);

        JMenu mnNewMenu = new JMenu("Client");
        menuBar.add(mnNewMenu);

        JMenuItem mntmNewMenuItem = new JMenuItem("Load Client");
        mntmNewMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

            }
        });
        mnNewMenu.add(mntmNewMenuItem);

        JMenuItem mntmNewMenuItem_1 = new JMenuItem("Save Client");
        mnNewMenu.add(mntmNewMenuItem_1);

        JMenu mnNewMenu_1 = new JMenu("Portfolios");
        menuBar.add(mnNewMenu_1);

        JMenuItem mntmNewMenuItem_2 = new JMenuItem("Add Portfolio");
        mnNewMenu_1.add(mntmNewMenuItem_2);

        JMenuItem mntmNewMenuItem_3 = new JMenuItem("Remove Portfolio");
        mnNewMenu_1.add(mntmNewMenuItem_3);

        JMenu mnNewMenu_2 = new JMenu("Accounts");
        menuBar.add(mnNewMenu_2);

        JMenuItem mntmNewMenuItem_4 = new JMenuItem("Add Account");
        mnNewMenu_2.add(mntmNewMenuItem_4);

        JMenuItem mntmNewMenuItem_5 = new JMenuItem("Remove Account");
        mnNewMenu_2.add(mntmNewMenuItem_5);
    }
    void repaintForm() {
        clientDetail.clear();
        clientDetail.addElement("First Name: " + person.getFirstName());
        clientDetail.addElement("Last Name: " + person.getLastName());
        clientDetail.addElement("Phone Number: " + person.getPhoneNumber());
        clientDetail.addElement("Total Value: " + person.getClientPortfolioValue());
        clientDetail.addElement("Portfolio Count: " + person.getPortfolioCount());
        clientDetail.addElement("Portfolio Names: " + person.getClientPortfolioNames());

    }
}

【问题讨论】:

    标签: java user-interface main-method


    【解决方案1】:

    如果变量是静态的,您需要另一个类并调用 FormWindow 类的新实例,然后您需要将返回值的方法分配给该特定静态变量

    【讨论】:

      【解决方案2】:

      考虑在 main 方法中创建一个 FormWindow 的实例。

      1. 把main放到FormWindow类中

      2. 在main方法中通过“new”操作符创建实例

        class FormWindow {
        
            public static void main(String[] args) {
                FormWindow form = new FormWindow(...);
            }
            ...
        }
        

      【讨论】:

      • 在(项目符号或编号)列表之后,您需要额外缩进代码。然后它也缩进。
      • 但最好改用代码围栏。 (它们以三个反引号开始和结束。我相应地编辑了你的帖子。)
      【解决方案3】:

      在静态方法中只能调用其他静态方法。这就是编译器将您的方法更改为静态的原因。您想要的是使用 main 方法创建另一个类,然后创建 FormWindow 类的对象。由于您的构造函数需要一个 Client 对象,因此您需要先创建该对象。

      FormWindow fw = new FormWindow(someClientObject)
      

      【讨论】:

        【解决方案4】:

        我认为你必须为这个类创建一个默认构造函数,或者提供一些默认值:

        public class FormWindow {
            public FormWindow() {
                Client personWithDefaultValues = new Client();
                //Fill personWithDefaultValues with some data here
            }
        
            public static void main(String[] args) {
                FormWindow h = new FormWindow();
                h.initialize();
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-01-03
          • 2015-10-19
          • 2012-03-03
          • 2014-10-24
          • 1970-01-01
          • 2016-12-08
          • 2011-06-30
          相关资源
          最近更新 更多