Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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的JInternalFrame中的JTabbedPane上设置JPanel的维度_Java_Swing_Jpanel_Jtabbedpane_Jinternalframe - Fatal编程技术网

在Java的JInternalFrame中的JTabbedPane上设置JPanel的维度

在Java的JInternalFrame中的JTabbedPane上设置JPanel的维度,java,swing,jpanel,jtabbedpane,jinternalframe,Java,Swing,Jpanel,Jtabbedpane,Jinternalframe,“我的软件”的用户需要能够单击不同的选项卡以查看不同类型的数据表示。但是,我下面包含的代码在用户单击选项卡时不会显示请求的数据面板 通过运行下面的代码,然后在代码将生成的GUI中执行以下步骤,可以轻松地重新创建问题: 1.) Select "New" from the file menu 2.) Click on "AnotherTab" in the internal frame which will appear 根据下面注释的哪一行代码,该选项卡将只显示一个空白面板,或将显示在面

“我的软件”的用户需要能够单击不同的选项卡以查看不同类型的数据表示。但是,我下面包含的代码在用户单击选项卡时不会显示请求的数据面板

通过运行下面的代码,然后在代码将生成的GUI中执行以下步骤,可以轻松地重新创建问题:

1.) Select "New" from the file menu    
2.) Click on "AnotherTab" in the internal frame which will appear

根据下面注释的哪一行代码,该选项卡将只显示一个空白面板,或将显示在面板顶部中间的一个小红场。

可以切换/注释以重新创建此问题的代码行有:

GraphPanel myGP = new GraphPanel();
//GraphPanel myGP = new GraphPanel(width,height);
这些代码行在下面的GraphGUI.java中

有谁能告诉我如何修复下面的代码,使myGP以包含它的面板的全尺寸显示

以下是重新创建此问题所需的三个java文件:

ParentFrame.java

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTabbedPane;
import javax.swing.KeyStroke;

public class ParentFrame extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
JLayeredPane desktop;
JInternalFrame internalFrame;

public ParentFrame() {
    super("Parent Frame");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setPreferredSize(new Dimension(800, 400));
    Panel p = new Panel();
    this.add(p, BorderLayout.SOUTH);
    desktop = new JDesktopPane();
    setJMenuBar(createMenuBar());
    this.add(desktop, BorderLayout.CENTER);
    this.pack();
    this.setSize(new Dimension(800, 600));
    this.setLocationRelativeTo(null);
}
protected JMenuBar createMenuBar() {
    JMenuBar menuBar = new JMenuBar();
    //Set up the File menu.
    JMenu FileMenu = new JMenu("File");
    FileMenu.setMnemonic(KeyEvent.VK_F);
    menuBar.add(FileMenu);
    //Set up the first menu item.
    JMenuItem menuItem = new JMenuItem("New");
    menuItem.setMnemonic(KeyEvent.VK_N);
    menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.ALT_MASK));
    menuItem.setActionCommand("new");
    menuItem.addActionListener(new OpenListener());
    FileMenu.add(menuItem);
    //Set up the second menu item.
    menuItem = new JMenuItem("Quit");
    menuItem.setMnemonic(KeyEvent.VK_Q);
    menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.ALT_MASK));
    menuItem.setActionCommand("quit");
    menuItem.addActionListener(this);
    FileMenu.add(menuItem);

    return menuBar;
    }
class OpenListener implements ActionListener {
    private static final int DELTA = 40;
    private int offset = DELTA;
    public void actionPerformed(ActionEvent e) {
        // create internal frame
        int ifWidth = 600;
        int ifHeight = 300;
        internalFrame = new JInternalFrame("Internal Frame", true, true, true, true);
        internalFrame.setLocation(offset, offset);
        offset += DELTA;

        // create jtabbed pane
        JTabbedPane jtp = createTabbedPane();
        internalFrame.add(jtp);
        desktop.add(internalFrame);
        internalFrame.pack();
        internalFrame.setSize(new Dimension(ifWidth,ifHeight));
        internalFrame.setVisible(true);
    }
}
private JTabbedPane createTabbedPane() {
    JTabbedPane jtp = new JTabbedPane();
    jtp.setMinimumSize(new Dimension(600,300));
    createTab(jtp, "One Tab");
    createTab(jtp, "AnotherTab");
    createTab(jtp, "Tab #3");
    return jtp;
}
private void createTab(JTabbedPane jtp, String s) {
    if(s=="AnotherTab"){
        jtp.getHeight();
        jtp.getWidth();
        GraphGUI myGraphGUI = new GraphGUI(jtp.getHeight(),jtp.getWidth());
        jtp.add(s, myGraphGUI);
    }
    else{jtp.add(s, new JLabel("TabbedPane " + s, JLabel.CENTER));}
}
public static void main(String args[]) {
    ParentFrame myParentFrame = new ParentFrame();
    myParentFrame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {if ("quit".equals(e.getActionCommand())){System.exit(0);}}
}
java:您可以在这里切换注释以重新创建问题

import javax.swing.*;

class GraphGUI extends JPanel{
GraphGUI(int height,int width) {
    //REPRODUCE ERROR BY COMMENTING OUT EITHER ONE OF NEXT TWO LINES:
    GraphPanel myGP = new GraphPanel();
//      GraphPanel myGP = new GraphPanel(width,height);
    this.add(myGP);
    this.setVisible(true);// Display the panel.
}
}
GraphPanel.java:

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

class GraphPanel extends JPanel {
Insets ins; // holds the panel's insets
double[] plotData;
double xScale;

GraphPanel(int w, int h) {
    setOpaque(true);// Ensure that panel is opaque.
    setPreferredSize(new Dimension(w, h));// Set preferred dimension as specfied.
    setMinimumSize(new Dimension(w, h));// Set preferred dimension as specfied.
    setMaximumSize(new Dimension(w, h));// Set preferred dimension as specfied.
}
GraphPanel() {
    setOpaque(true);// Ensure that panel is opaque.
}

protected void paintComponent(Graphics g){// Override paintComponent() method.
    super.paintComponent(g);// Always call superclass method first.
    int height = getHeight();// Get height of component.
    int width = getWidth();// Get width of component.
    System.out.println("height, width are: "+height+" , "+width);
    ins = getInsets();// Get the insets.
    // Get dimensions of text
    Graphics2D g2d = (Graphics2D)g;
    FontMetrics fontMetrics = g2d.getFontMetrics();
    String xString = ("x-axis label");
    int xStrWidth = fontMetrics.stringWidth(xString);
    int xStrHeight = fontMetrics.getHeight();
    String yString = "y-axis label";
    int yStrWidth = fontMetrics.stringWidth(yString);
    int yStrHeight = fontMetrics.getHeight();
    String titleString ="Title of Graphic";
    int titleStrWidth = fontMetrics.stringWidth(titleString);
    int titleStrHeight = fontMetrics.getHeight();
    //get margins
    int leftMargin = ins.left;
    //set parameters for inner rectangle
    int hPad=10;
    int vPad = 6;
    int numYticks = 10;
    int testLeftStartPlotWindow = ins.left+5+(3*yStrHeight);
    int testInnerWidth = width-testLeftStartPlotWindow-ins.right-hPad;
    int remainder = testInnerWidth%numYticks;
    int leftStartPlotWindow = testLeftStartPlotWindow-remainder;
    System.out.println("remainder is: "+remainder);
    int blueWidth = testInnerWidth-remainder;
    int blueTop = ins.bottom+(vPad/2)+titleStrHeight;
    int bottomPad = (3*xStrHeight)-vPad;
    int blueHeight = height-bottomPad-blueTop;

    g.setColor(Color.red);
    int redWidth = width-leftMargin-1;
    //plot outer rectangle
    g.drawRect(leftMargin, ins.bottom, redWidth, height-ins.bottom-1);
    System.out.println("blueWidth is: "+blueWidth);
    // fill inner rectangle
    g.setColor(Color.white);
    g.fillRect(leftStartPlotWindow, blueTop, blueWidth, blueHeight);

    //write top label
    g.setColor(Color.black);
    g.drawString(titleString, (width/2)-(titleStrWidth/2), titleStrHeight);

    //write x-axis label
    g.setColor(Color.red);
    g.drawString(xString, (width/2)-(xStrWidth/2), height-ins.bottom-vPad);
    g2d.rotate(Math.toRadians(-90), 0, 0);//rotate text 90 degrees counter-clockwise
    //write y-axis label
    g.drawString(yString, -(height/2)-(yStrWidth/2), yStrHeight);
    g2d.rotate(Math.toRadians(+90), 0, 0);//rotate text 90 degrees clockwise
    // plot inner rectangle
    g.setColor(Color.blue);
    g.drawRect(leftStartPlotWindow, blueTop, blueWidth, blueHeight);
}
}

谢谢你的快速回答。很抱歉,我花了这么长时间才将此标记为正确答案+谢谢你的快速回答。很抱歉,我花了这么长时间才将此标记为正确答案+1.
class GraphGUI extends JPanel {

    .
    .
    GraphGUI(int height,int width) {
    // components in a GridLayout are stretched to fit space available
    setLayout(new GridLayout());