Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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与JTabbed窗格一起使用_Java_User Interface_Jpanel_Jtabbedpane - Fatal编程技术网

Java 无法将外部JPanel与JTabbed窗格一起使用

Java 无法将外部JPanel与JTabbed窗格一起使用,java,user-interface,jpanel,jtabbedpane,Java,User Interface,Jpanel,Jtabbedpane,我正在学校学习创建GUI。我已经制作了这两个单独的JPanel。我正在尝试创建一个选项卡式窗格,在seeparate选项卡中添加并包含这些选项卡中的每一个。当我打开运行代码时,我会看到三个单独的窗口。一个是带有两个空白选项卡的窗口。其他两个窗口是我希望位于每个选项卡内的面板。谁能帮帮我吗 package Week4; import java.awt.*; import javax.swing.*; public class TabP2 { private JFrame ou

我正在学校学习创建GUI。我已经制作了这两个单独的JPanel。我正在尝试创建一个选项卡式窗格,在seeparate选项卡中添加并包含这些选项卡中的每一个。当我打开运行代码时,我会看到三个单独的窗口。一个是带有两个空白选项卡的窗口。其他两个窗口是我希望位于每个选项卡内的面板。谁能帮帮我吗

    package Week4;

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

public class TabP2 {

    private JFrame ourFrame = new JFrame("Week 4");
    private JTabbedPane ourTabbedPane;
    private JPanel masterContainer, tab1, tab2;

    TabP2(){

        masterContainer = (JPanel) ourFrame.getContentPane();

        masterContainer.setLayout(new BorderLayout());

        ourTabbedPane = new JTabbedPane();

        tab1 = new OfficeAreaCalculator();

        tab2 = new DayGUI();

        ourTabbedPane.addTab("Office Area Calculator", tab1);
        ourTabbedPane.addTab("DayGUI", tab2);

        masterContainer.add(ourTabbedPane, BorderLayout.CENTER);

        ourFrame.pack();
        ourFrame.setVisible(true);
        ourFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable() {

public void run() {
    new TabP2();
}
});
    }
}

我会加上另一个,但我觉得没有必要。它的设置几乎相同


提前谢谢

首先,通过
addTab
方法而不是
add
方法将面板添加到
JTabbedPane
作为选项卡

检查链接和教程


除了删除不必要的主方法(因此您只有一个)之外,这里还有一些指针

您不需要实例化新面板来将面板放入其中,以便将它们作为选项卡

tab1=newjpanel();
OfficeAreaCalculator OAC=新的OfficeAreaCalculator();
表1.添加(OAC);
tab2=新的JPanel();
DayGUI Day=新的DayGUI();
表1.添加(天);
我们的tabbedPane.addTab(“办公区计算器”,tab1);
addTab(“DayGUI”,tab2);
正如您在问题中指出的,这些类已经扩展了
JPanel
,因此只需实例化它们并将它们添加为选项卡即可

tab1=newofficeareacalculator();
tab2=新的DayGUI();
我们的tabbedPane.addTab(“办公区计算器”,tab1);
addTab(“DayGUI”,tab2);
在调用
setVisible(true)
之前,您可能需要调用
pack()
,以便在显示帧时正确调整大小

ourFrame.pack();
ourFrame.setVisible(true);
ourFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
此外,在java中使用Swing构建GUI时,始终将GUI代码委托给事件调度线程(EDT),以避免线程问题。Swing在自己的线程(EDT)中运行,这与主线程不同。您当前正在从主线程调用Swing代码,这不是一个好主意,因此请改为:

SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
新的TabP2();
}
});

你有3个窗口吗?使用最小化、最大化和关闭按钮,我没有足够的声誉来发布截图,我得到一个有两个标签的窗口。我得到了另一个窗口,其中有DayGUI,还有另一个窗口是OfficeAreaCalculator。你在哪个IDE中编程?eclipse。这是我们上课必须用到的东西。我们不能使用像NetBeans这样的东西。我遇到的问题是获取要填充到选项卡中的信息。我尝试了这个,但仍然无法让它在我们的tabbedPane.addTab(null,tab1)中工作;setTabComponentAt(0,新的JLabel(“办公区计算器”);屏幕截图怎么样?除了线程部分,我理解你说的一切。我在谷歌上查了一下,还是有点困惑。内容仍在单独的窗口中打开。谢谢你到目前为止在这方面的帮助。不管怎样,它是有效的。我花了一个小时才意识到我犯了一个错误。我把所有的类都命名为2,因为我不想把我原来的工作搞砸。但是经过一次又一次的编辑,我给原来的班级打电话,这是错误的。你是最棒的。谢谢您可以在本文中阅读更多关于Swing线程的内容。
package Week4;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

import java.awt.*;


public class DayGUI2 extends JPanel{

    private JButton cmdGood;
    private JButton cmdBad;

    public DayGUI2(){       

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

        setBackground(Color.white);

        add(cmdGood);
        cmdGood.setBackground(Color.green);
        add(cmdBad);
        cmdBad.setBackground(Color.red);

        cmdGood.setMnemonic('G');
        cmdBad.setMnemonic('B');

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

        setVisible(true);
    }

    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);

        }
    }

    public static void main(String[] args) {
    }

}
    ourTabbedPane.addTab("Office Area Calculator", tab1);
    ourTabbedPane.addTab("DayGUI", tab2);