Java 无法将外部JPanel与JTabbed窗格一起使用
我正在学校学习创建GUI。我已经制作了这两个单独的JPanel。我正在尝试创建一个选项卡式窗格,在seeparate选项卡中添加并包含这些选项卡中的每一个。当我打开运行代码时,我会看到三个单独的窗口。一个是带有两个空白选项卡的窗口。其他两个窗口是我希望位于每个选项卡内的面板。谁能帮帮我吗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
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);