gpt4 book ai didi

java - 使用布局管理器和 JFrame,NullPointerException

转载 作者:行者123 更新时间:2023-12-01 11:35:12 25 4
gpt4 key购买 nike

我正在尝试在带有菜单栏的选项卡式 Pane 中创建基本的网格布局。

菜单栏将有一个带有退出菜单项的基本文件 JMenu 和一个可更改字体颜色和背景颜色的颜色 JMenu。

一个选项卡将计算 Excel 中使用的 PMT 函数。
第二个选项卡将计算 Excel 中使用的 future 值(value)。
最终选项卡是一个简单的帮助布局。

当尝试查看布局和基本功能时,我收到 NullPointerException。异常似乎在第 208 行(这是 TextArea 将显示 PMT 函数的计算的地方)、第 52 行(这是调用 createPage1() 的地方)和第 263 行(这是大型机实例化为 Finance 的地方)被调用。 )。

最后一个我并不真正理解它的目的和功能。这是一项正在进行的工作,尚未添加任何公式,也尚未添加所有操作监听器。我现在唯一想要的就是能够查看布局。

public class Finance extends JFrame{

private JTabbedPane tabPane;
private JPanel panel1;
private JPanel panel2;
private JPanel panel3;
private JMenuBar menuBar;
private JMenu fileMenu;
private JMenu colorMenu;
private JMenuItem exitItem;
private JRadioButtonMenuItem blueItem;
private JRadioButtonMenuItem blackItem;
private JRadioButtonMenuItem redItem;
private JRadioButtonMenuItem whiteItem;
private JRadioButtonMenuItem defItem;
private JButton calc1;
private JButton calc2;
TextArea text;



public Finance(){
setTitle("Finance");
setBackground(Color.GRAY);

JPanel topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
getContentPane().add(topPanel);

createPage1();
createPage2();
createPage3();


tabPane = new JTabbedPane();
tabPane.addTab("Loan Payment", panel1);
tabPane.addTab("Future Value", panel2);
tabPane.addTab("Help", panel3);

topPanel.add(tabPane, BorderLayout.CENTER);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
buildMenuBar();
pack();
}

public void buildMenuBar(){
menuBar = new JMenuBar();


buildFileMenu();
buildColorMenu();


menuBar.add(fileMenu);
menuBar.add(colorMenu);


setJMenuBar(menuBar);
}

public void buildFileMenu(){
exitItem = new JMenuItem("Exit");
exitItem.setMnemonic(KeyEvent.VK_X);
exitItem.addActionListener(new ExitListener());

// Create a JMenu object for the File menu.
fileMenu = new JMenu("File");
fileMenu.setMnemonic(KeyEvent.VK_F);

// Add the Exit menu item to the File menu.
fileMenu.add(exitItem);
}

public void buildColorMenu(){
defItem = new JRadioButtonMenuItem("Deafult", true);
defItem.setMnemonic(KeyEvent.VK_D);
defItem.addActionListener(new ColorListener());

blueItem = new JRadioButtonMenuItem("Blue");
blueItem.setMnemonic(KeyEvent.VK_B);
blueItem.addActionListener(new ColorListener());

blackItem = new JRadioButtonMenuItem("Black");
blackItem.setMnemonic(KeyEvent.VK_L);
blackItem.addActionListener(new ColorListener());

whiteItem = new JRadioButtonMenuItem("White");
whiteItem.setMnemonic(KeyEvent.VK_W);
whiteItem.addActionListener(new ColorListener());

redItem = new JRadioButtonMenuItem("Red");
redItem.setMnemonic(KeyEvent.VK_R);
redItem.addActionListener(new ColorListener());

ButtonGroup group = new ButtonGroup();
group.add(blueItem);
group.add(blackItem);
group.add(whiteItem);
group.add(redItem);

colorMenu = new JMenu("Color");
colorMenu.setMnemonic(KeyEvent.VK_C);

colorMenu.add(defItem);
colorMenu.addSeparator();
colorMenu.add(blueItem);
colorMenu.add(blackItem);
colorMenu.add(whiteItem);
colorMenu.add(redItem);

}
private class ExitListener implements ActionListener{
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}

private class ColorListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if(blackItem.isSelected()){
panel1.setForeground(Color.WHITE);
panel2.setForeground(Color.WHITE);
panel3.setForeground(Color.WHITE);
panel1.setBackground(Color.BLACK);
panel2.setBackground(Color.BLACK);
panel3.setBackground(Color.BLACK);
}
else if(redItem.isSelected()){
panel1.setForeground(Color.WHITE);
panel2.setForeground(Color.WHITE);
panel3.setForeground(Color.WHITE);
panel1.setBackground(Color.RED);
panel2.setBackground(Color.RED);
panel3.setBackground(Color.RED);
}
else if(whiteItem.isSelected()){
panel1.setForeground(Color.BLACK);
panel2.setForeground(Color.BLACK);
panel3.setForeground(Color.BLACK);
panel1.setBackground(Color.WHITE);
panel2.setBackground(Color.WHITE);
panel3.setBackground(Color.WHITE);
}
else if(blueItem.isSelected()){
panel1.setForeground(Color.WHITE);
panel2.setForeground(Color.WHITE);
panel3.setForeground(Color.WHITE);
panel1.setBackground(Color.BLUE);
panel2.setBackground(Color.BLUE);
panel3.setBackground(Color.BLUE);
}
else if(defItem.isSelected()){
panel1.setForeground(Color.GRAY);
panel2.setForeground(Color.GRAY);
panel3.setForeground(Color.GRAY);
panel1.setBackground(Color.BLACK);
panel2.setBackground(Color.BLACK);
panel3.setBackground(Color.BLACK);
}
}
}

public void createPage1(){

panel1 = new JPanel();
panel1.setLayout(new GridLayout(5, 2));


calc1 = new JButton("Calculate Payments");
JTextField loan = new JTextField();
JTextField months = new JTextField();
JTextField irp1 = new JTextField();
JTextField pymnt = new JTextField();
text = new TextArea();

panel1.add(new JLabel("Loan Amount:"));
panel1.add(loan);
panel1.add(new JLabel("Payment Length in Months:"));
panel1.add(months);
panel1.add(new JLabel("Interest Rate Percentage:"));
panel1.add(irp1);
panel1.add(new JLabel("Payment Amount (Fixed):"));
panel1.add(pymnt);
panel1.add(calc1);
panel2.add(text);
}

public void createPage2(){

panel2 = new JPanel();
panel2.setLayout(new GridLayout(5,2));


calc2 = new JButton("Calculate Future Value");
JTextField length = new JTextField();
JTextField value = new JTextField();
JTextField monthly = new JTextField();
JTextField irp2 = new JTextField();
JTextField fv = new JTextField();

panel2.add(new JLabel("Initial Value:"));
panel2.add(value);
panel2.add(new JLabel("Monthly Contribution:"));
panel2.add(monthly);
panel2.add(new JLabel("Interest Rate Percentage:"));
panel2.add(irp2);
panel2.add(new JLabel("Length in Years:"));
panel2.add(length);
panel1.add(calc2);
panel2.add(fv);


}

public void createPage3(){

panel3 = new JPanel();
panel3.setLayout(new GridLayout(3,3));

JButton button1 = new JButton("Input");
JButton button2 = new JButton("Output");
JButton button3 = new JButton("Input");
JButton button4 = new JButton("Output");
JButton button5 = new JButton("Navigation");
JButton button6 = new JButton("Information");

panel3.add(new JLabel("Loan Payment:"));
panel3.add(button1);
panel3.add(button2);
panel3.add(new JLabel("Future Value:"));
panel3.add(button3);
panel3.add(button4);
panel3.add(new JLabel("Basic Info:"));
panel3.add(button5);
panel3.add(button6);

}
public static void main(String args[]){
@SuppressWarnings("unused")
Finance mainFrame = new Finance();
}

完整输出如下:

    Exception in thread "main" java.lang.NullPointerException
at Finance.createPage1(Finance.java:208)
at Finance.<init>(Finance.java:52)
at Finance.main(Finance.java:263)

欢迎并感谢所有帮助。我更多地寻找错误的原因和修复它的一般方法,而不是特定的解决方案。请随意对编码进行判断,但如果可以简化或更改某些内容,请评论如何做到这一点。

最佳答案

createPage1的最后一条语句中,panel2null。我猜您尝试将 text 字段添加到 panel1 中。因此,将其更改为 panel1 而不是 panel2

public void createPage1(){

panel1 = new JPanel();
panel1.setLayout(new GridLayout(5, 2));
.....

panel2.add(text); //Here panel2 is null, use panel1 instead.
}

关于java - 使用布局管理器和 JFrame,NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30071019/

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