我正在学习在学校创建GUI。我已经制作了这两个独立的JPanel。我试图创建一个标签窗格,添加包括在seeparate选项卡中的每一个。当我打开运行代码时,我得到三个单独的窗口。一个是带有2个空白标签的窗口。其他2个窗口是我想要在每个选项卡中的面板。有人可以帮助我。
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();
}
});
}
}
和
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) {
}
}
我会添加另一个,但我没有看到需要。它的设置几乎相同。
提前致谢!
答案 0 :(得分:0)
首先,通过JTabbedPane
方法将您的面板添加到addTab
标签,而不是add
方法。
ourTabbedPane.addTab("Office Area Calculator", tab1);
ourTabbedPane.addTab("DayGUI", tab2);
答案 1 :(得分:0)
除了删除不必要的主要方法,所以你只有一个,这里有一些指针。
您不需要实例化新面板来放置面板,以便将它们作为标签。
tab1 = new JPanel();
OfficeAreaCalculator OAC = new OfficeAreaCalculator();
tab1.add(OAC);
tab2 = new JPanel();
DayGUI Day = new DayGUI();
tab1.add(Day);
ourTabbedPane.addTab("Office Area Calculator", tab1);
ourTabbedPane.addTab("DayGUI", tab2);
正如您在问题中指出的那样,这些类已经扩展JPanel
,因此只需将它们实例化并将它们添加为标签。
tab1 = new OfficeAreaCalculator();
tab2 = new DayGUI();
ourTabbedPane.addTab("Office Area Calculator", tab1);
ourTabbedPane.addTab("DayGUI", tab2);
在致电setVisible(true)
之前,您可能需要致电pack()
,以便在展示时正确调整框架尺寸。
ourFrame.pack();
ourFrame.setVisible(true);
ourFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
此外,在java中使用Swing构建GUI时,始终将GUI代码委托给Event Dispatch Thread(EDT)以避免线程问题。 Swing在它自己的线程中运行 - EDT - 与你的主线程不同。您当前正在从主线程调用Swing代码,这是一个坏主意,所以请改为:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TabP2();
}
});