Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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选项卡式窗格不显示程序_Java_Jpanel_Jtabbedpane - Fatal编程技术网

Java选项卡式窗格不显示程序

Java选项卡式窗格不显示程序,java,jpanel,jtabbedpane,Java,Jpanel,Jtabbedpane,我对Java相当缺乏经验,为了解决这个问题,我四处搜索了不少。我相信我的代码是正确的,但是我的标签没有显示任何内容。我遇到了一些关于将布局更改为BorderLayout的事情,但对我来说不起作用。当我运行这个程序时,我可以很快看到我的第一个标签程序,然后它是空白的。我只发布了TabbedPrograms类,因为我相信问题在于这里,但如果需要,我可以发布其余的。提前感谢您的帮助 import java.awt.BorderLayout; import javax.swing.JFrame; imp

我对Java相当缺乏经验,为了解决这个问题,我四处搜索了不少。我相信我的代码是正确的,但是我的标签没有显示任何内容。我遇到了一些关于将布局更改为BorderLayout的事情,但对我来说不起作用。当我运行这个程序时,我可以很快看到我的第一个标签程序,然后它是空白的。我只发布了TabbedPrograms类,因为我相信问题在于这里,但如果需要,我可以发布其余的。提前感谢您的帮助

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;


public class TabbedPrograms extends JFrame
{
public TabbedPrograms()
{
    setTitle("Week Four Lab Assignment");
    setLayout(new BorderLayout()); //this is what I added to change from the default layout
    JTabbedPane jtp = new JTabbedPane();
    getContentPane().add(jtp);

    jtp.addTab("Day GUI", new DayGUI());
    jtp.addTab("Office Area Calculator", new OfficeAreaCalculator());

    getContentPane().add(jtp);
    setSize(310, 210);
    setVisible(true);
}

public static void main(String[] args) 
{
    TabbedPrograms test = new TabbedPrograms();
    test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

import java.awt.Color;
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.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class DayGUI extends JPanel 
{
private JFrame mainFrame;
private JButton cmdGood;
private JButton cmdBad;

public DayGUI()
{
    mainFrame = new JFrame("Messages");

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

    Container c = mainFrame.getContentPane();
    c.setLayout(new FlowLayout());
    c.setBackground(Color.orange);

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

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

    mainFrame.setSize(300, 100);

    mainFrame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }

});

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

    mainFrame.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) 
{
    DayGUI app;
    app = new DayGUI();

}

}


import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.DecimalFormat;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class OfficeAreaCalculator extends JPanel
{
private JFrame mainFrame;
private JButton calculateButton;
private JButton exitButton;
private JTextField lengthField;
private JTextField widthField;
private JTextField areaField;
private JLabel lengthLabel;
private JLabel widthLabel;
private JLabel areaLabel;

public OfficeAreaCalculator()
{
    mainFrame = new JFrame("Office Area Calculator");

    exitButton = new JButton("Exit");
    lengthLabel = new JLabel("Enter the length of the office:");
    widthLabel = new JLabel("Enter the width of the office:");
    areaLabel = new JLabel("Office area:");
    lengthField = new JTextField(5);
    widthField = new JTextField(5);
    areaField = new JTextField(5);
    areaField.setEditable(false);
    calculateButton = new JButton("Calculate");

    Container c = mainFrame.getContentPane();

    c.setLayout(new FlowLayout());

    c.add(lengthLabel);
    c.add(lengthField);
    c.add(widthLabel);
    c.add(widthField);
    c.add(areaLabel);
    c.add(areaField);
    c.add(calculateButton);
    c.add(exitButton);

    calculateButton.setMnemonic('C');
    exitButton.setMnemonic('X');

    mainFrame.setSize(260, 150);

    mainFrame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });


    CalculateButtonHandler chandler = new CalculateButtonHandler();
    calculateButton.addActionListener(chandler);

    ExitButtonHandler ehandler = new ExitButtonHandler();
    exitButton.addActionListener(ehandler);

    FocusHandler fhandler = new FocusHandler();
    lengthField.addFocusListener(fhandler);
    widthField.addFocusListener(fhandler);
    areaField.addFocusListener(fhandler);

    mainFrame.setVisible(true);
        }

class CalculateButtonHandler implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        DecimalFormat num = new DecimalFormat(", ###.##");
        double width, length, area;
        String instring;

        instring = lengthField.getText();
        if(instring.equals(""))
        {
            instring = ("0");
            lengthField.setText("0");
        }
        length = Double.parseDouble(instring);

        instring = widthField.getText();
        if(instring.equals(""))
        {
            instring = "0";
            widthField.setText("0");
        }
        width = Double.parseDouble(instring);

        area = length * width;
        areaField.setText(num.format(area));

    }
}

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

class FocusHandler implements FocusListener
{
    public void focusGained(FocusEvent e)
    {
        if(e.getSource() == lengthField || e.getSource() == widthField)
        {
            areaField.setText("");
        }
        else if (e.getSource() == areaField)
        {
            calculateButton.requestFocus();
        }
    }

    public void focusLost(FocusEvent e)
    {
        if(e.getSource() == widthField)
        {
            calculateButton.requestFocus();
        }
    }
}

}

问题在于
DayGUI
OfficeAreaCalculator
都将组件添加到各自的
JFrame
窗口中,而不是添加到
tabbed程序中。这些帧同时出现,然后显示主应用程序帧

在这两个容器中,将组件直接添加到
JPanel
,以便组件显示在
JTabbedPane

比如说

//c.add(lengthLabel);
add(lengthLabel);

代码逻辑有问题,您希望向JTabbedPane添加Day()和Calc()对象,这两个对象都扩展了JPanel,当您将它们添加到选项卡式窗格时,应该使用JPanel并向其添加元素。相反,在Day()和Calc()对象中,您实例化了新的JFrame()对象,而我在主函数中似乎看不到这些对象(getter)。

您添加了两次
jtp
(在添加选项卡之前和之后)。删除第一个条目并查看发生了什么相同的事情选项卡在那里,但它们都是空白的。我也尝试过调整大小,认为这两个程序可能太大了,但没有任何区别。这是我找到的可能解决方案的链接,但对我来说不起作用。[链接]@user2802680问题出在
DayGUI
和/或
OfficeAreaCalculator
@Reimeus的代码中。我修改了上面的帖子,包括了DayGUI和OfficeAreaCalculator类。非常感谢!我知道这很可能是件小事。我学到了一些新的东西,我相信我将来会需要的。再次感谢。