Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未将JPanel添加到JTabbedPane_Java_Swing_Jpanel_Jtabbedpane - Fatal编程技术网

Java 未将JPanel添加到JTabbedPane

Java 未将JPanel添加到JTabbedPane,java,swing,jpanel,jtabbedpane,Java,Swing,Jpanel,Jtabbedpane,对于我的家庭作业额外学分,我创建了一个JTabbedPane并添加了两个jpanel。我觉得我很接近,但它仍然没有编译。当我运行它时,两个JPanel都会打开,但JTabbedPane不会打开。我得到了很多未知源错误。我怀疑在这一点上,我的问题在JPanels本身,因为它们最初是JFrames,我尝试(我认为没有成功)将JFrames转换为JPanels JTabbedPaneAssignment应该创建JTabbedPane,并使用一个选项卡上的apps DayGui和另一个选项卡上的Offi

对于我的家庭作业额外学分,我创建了一个JTabbedPane并添加了两个jpanel。我觉得我很接近,但它仍然没有编译。当我运行它时,两个JPanel都会打开,但JTabbedPane不会打开。我得到了很多未知源错误。我怀疑在这一点上,我的问题在JPanels本身,因为它们最初是JFrames,我尝试(我认为没有成功)将JFrames转换为JPanels

JTabbedPaneAssignment应该创建JTabbedPane,并使用一个选项卡上的apps DayGui和另一个选项卡上的OfficeAreaCalculator填充这两个窗格。这里我只包括jtabbedpaneasignment和DayGui类。我道歉,如果它太多的代码,我已经修剪了很多我认为无关的,但可能仍然有太多。 下面是调用类jtabbedpaneasignment

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

public class JTabbedPaneAssignment extends JPanel
{
    public JTabbedPaneAssignment()
    {
        //super(new GridLayout(1, 1));

        JTabbedPane tabbedPane = new JTabbedPane();
        DayGui pnlDay = new DayGui();
        OfficeAreaCalculator  pnlOffice = new OfficeAreaCalculator ();
        this.add(tabbedPane);

        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        tabbedPane.add(panel1,"First panel");
        tabbedPane.add(panel2,"Second panel");


        //JComponent panel1 = makeTextPanel("Pane #1");
        panel1.setPreferredSize(new Dimension(300, 150));
        tabbedPane.addTab("DayGui", panel1);
        tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

        //JComponent panel2 = makeTextPanel("Pane #2");
        panel2.setPreferredSize(new Dimension(410, 50));
        tabbedPane.addTab("OfficeAreaCalculator", panel2);
        tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
        add(tabbedPane);
    }

    protected JComponent makeTextPanel(String text)
    {
        JPanel panel = new JPanel(false);
        JLabel filler = new JLabel(text);
        filler.setHorizontalAlignment(JLabel.CENTER);
        panel.setLayout(new GridLayout(1, 1));
        panel.add(filler);
        return panel;
    }

    // Create JTabbedPane
    private static void createAndShowGUI()
    {
        // Create and set up the window.
        JFrame frame = new JFrame("JTabbedPane");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JTabbedPaneAssignment(), BorderLayout.CENTER);
        JTabbedPane DayGui = new JTabbedPane();
        JTabbedPane OfficeAreaCalculator = new JTabbedPane();
        frame.pack();
        frame.setVisible(true);
    }


    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}
这是大贵班。它最初是一个JFrame,但我正在尝试将其转换为JPanel。我想我的问题在代码的这一部分,但我不知道

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

//public class DayGui extends JPanel
public class DayGui extends JPanel
{
    private JPanel dayPanel;
    private JButton cmdGood;
    private JButton cmdBad;

    public DayGui()
    {
        //dayPanel = new JPanel("Messages");

        cmdGood = new JButton("Good");
        cmdBad = new JButton("Bad");

        Container c = dayPanel.getRootPane();
        c.setLayout(new FlowLayout());

        c.add(cmdGood);
        c.add(cmdBad);

        dayPanel.setSize(300, 150);

        ButtonsHandler bhandler = new ButtonsHandler();
        cmdGood.addActionListener(bhandler);
        cmdBad.addActionListener(bhandler);

        dayPanel.setVisible(true);
        dayPanel.getRootPane().setBackground(Color.CYAN);

    }

    class ButtonsHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if (e.getSource() == cmdGood)
                JOptionPane.showMessageDialog(null, "Today is a good day!",
                        "Event Handler Message",
                        JOptionPane.INFORMATION_MESSAGE);
            if (e.getSource() == cmdBad)
                JOptionPane.showMessageDialog(null, "Today is a bad day!",
                        "Event Handler Message",
                        JOptionPane.INFORMATION_MESSAGE);
        }
    }

}

你的问题一直模棱两可,你发布的代码比这里的任何人都要多

我为您制作了一个非常小但有效的
JTabbedPane
示例,让您看到使其工作所需的最小工作量

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class JTabbedPaneExample extends JFrame{

    public JTabbedPaneExample(String title){
        super(title);
        setSize(800,600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        
        JTabbedPane tabbedPane = new JTabbedPane();
        
        JPanel panelOne = new JPanel();
        JPanel panelTwo = new JPanel();
        tabbedPane.add(panelOne,"First panel");
        tabbedPane.add(panelTwo,"Second panel");
        
        add(tabbedPane);
    }
    
    
    public static void main(String[] args){
        
        new JTabbedPaneExample("JTP Example").setVisible(true);
        
    }
} 
然后运行时,此代码如下所示:

如果在代码中重复相同的过程,但仍然存在错误,那么问题不在于
JTabbedPane
,而在于其他方面

当我运行它时,两个JPanel都会打开,但JTabbedPane不会打开。我明白了 许多未知源错误

那么,根据您的代码和导入部分:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
这些行不会编译(除非
DayGUI
OfficeAreaCalculator
类与
jtabbedpaneasignment
类位于同一个包中):

这是我在编译和运行您的示例时遇到的唯一错误。我改了以下几行:

tabbedPane.addTab( "DayGui", new JPanel());
tabbedPane.addTab("Office Calculator", new JPanel());
它就像一个符咒

更新

根据您最近的编辑(添加
DayGui
类,谢谢),您的代码中有几个错误

DayGui:该类扩展了
JPanel
,因此您需要直接在此类上添加组件,而不需要此面板:

private JPanel dayPanel;
您需要直接在
DayGui
类上设置布局管理器、按钮和背景,如下所示:

public DayGui() {
    cmdGood = new JButton("Good");
    cmdBad = new JButton("Bad");

    setLayout(new FlowLayout());
    add(cmdGood);
    add(cmdBad);

    setSize(300, 150);

    ButtonsHandler bhandler = new ButtonsHandler();
    cmdGood.addActionListener(bhandler);
    cmdBad.addActionListener(bhandler);
    setBackground(Color.CYAN);
}
jtabbedpaneasignment:我认为您试图将
panel1
panel2
添加为选项卡,但您使用
add
方法代替
addTab

JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
tabbedPane.add(panel1,"First panel");
tabbedPane.add(panel2,"Second panel");
此外,这一行:

tabbedPane.addTab("DayGui", panel1);
应该是:

tabbedPane.addTab("DayGui", pnlDay);
最后,在这一行中,您第二次添加了
panel2
,这是不正确的:

tabbedPane.addTab("OfficeAreaCalculator", panel2); //I'd comment this line
如果你做出建议性的改变,你会看到类似这样的东西(顺便说一句,青色几乎让我失明:p):


希望这会对您有所帮助,并为您的延期表示歉意。

好的,这是第二次。现在您已经拥有了
DayGui
类,我们注意到您在初始化它之前尝试使用
dayPanel
。i、 e.你怎么也不说
dayPanel=newjpanel()。这导致在代码中抛出
NullPointerException
,破坏了正常的执行过程。修复此问题,您的
DayGui
类将在运行时正常运行

在您的代码库中,您还可以做一些非常有趣的事情,即开始使用某些东西,但永远都不会去完成它。例如,您扩展了
JPanel
,但使用了
JPanel
类型的成员变量来完成其余的工作。建议将实例变量全部废弃,并使用从扩展
JPanel
继承的方法

现在让我们进入您的
jtabbedpaneasignment
类。虽然不可怕,但代码可读性不强,并且在许多地方重复(多次添加选项卡面板)。如果要将此代码进一步应用到更大的项目中,维护和调试将很快成为一个问题

为了向您展示代码中的混乱程度,我已经快速地将您提供的代码重写为可编译的,并且应该大致完成您正在进行的工作

jtabbedpaneasignment
DayGui-重命名为DayPanel
: 那么这些有什么不同呢?基本上,我已经删除了您进入的
DayGui
中的
NullPointerException
。我所做的任何其他更改都是为了避免代码混乱,这样您才能真正了解代码中发生了什么


希望这有帮助。

我道歉。我不确定要包含多少代码。我确实看到了与您显示的类似的JTabbedPane。问题是DayGui和OfficeAreaCalculator不显示在选项卡式窗格中。它们确实会在选项卡式窗格外弹出,当我退出jtabbedpane时,它们会成功退出。我恐怕在代码中看不到任何提示您行为的内容。您能否定义DayGUI等,并且只显示与您所谈论的内容相关的代码。我们不知道你指的是第一类还是第二类。我更新了上面的代码。我不知道问题是在第一个类jtabbedpaneasignment(创建JTabbedPane的ans应该填充窗格)中,还是在JPane类DayGui中。在我看来,DayGui是罪魁祸首,特别是因为我正在尝试将它从JFrame转换为JLabel。谢谢。我会研究这个。我知道我的代码乱七八糟。这是我在头部爆炸时尝试50种不同东西的结果,就像在电影扫描仪中;)
tabbedPane.addTab("OfficeAreaCalculator", panel2); //I'd comment this line
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;



public class JTabbedPaneAssignment extends JPanel
{
    public JTabbedPaneAssignment()
    {
        final JTabbedPane tabbedPane = new JTabbedPane();
        final DayPanel dayPanel = new DayPanel();
        final JPanel officePanel = new JPanel();

        tabbedPane.add("DayGui", dayPanel);
        tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

        tabbedPane.add("OfficeAreaCalculator", officePanel);
        tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

        add(tabbedPane);
    }



    // Create JTabbedPane
    private static void createAndShowGUI()
    {
        // Create and set up the window.
        JFrame frame = new JFrame("JTabbedPane");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JTabbedPaneAssignment(), BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }


    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class DayPanel extends JPanel {

    public DayPanel() {
        super();
        setBackground(Color.CYAN);

        final JButton goodButton = new JButton("Good");
        final JButton badButton = new JButton("Bad");

        ActionListener listener = new DayPanel.ButtonsHandler();
        goodButton.addActionListener(listener);
        badButton.addActionListener(listener);

        add(goodButton);
        add(badButton);
    }

    class ButtonsHandler implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            final String command = ((JButton) e.getSource()).getActionCommand();

            if (command.equals("Good")) {
                showMessage("Today is a good day!");
            } else if (command.equals("Bad")) {
                showMessage("Today is a bad day!");
            }
        }

        // Show popup message
        private void showMessage(String message) {
            JOptionPane.showMessageDialog(null, message,
                    "Event Handler Message", JOptionPane.INFORMATION_MESSAGE);
        }
    }

}