我有一个此类,另一个具有连接数据库的功能,并向我展示了数据库的表,程序的这一部分工作得很好,下面说明了问题,但没有:

import java.awt.Color;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.*;
public class ManagerInterface {
public static JFrame ManagerInterface = new JFrame("Manager Interface");

public ManagerInterface() {
    StartInterfaceGUI();
}

public static JFrame getframe() {
    return ManagerInterface;
}
private void StartInterfaceGUI() {



    ManagerInterface.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ManagerInterface.setSize(1600, 900);
    new ShowEmployee();
    ManagerInterface.setVisible(true);
}
}
public static void main(String []args)
{
   new ManagerInterface();
}


和这个班:

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.*;
import java.util.*;

import javax.swing.*;
import GUIManager.ManagerInterface;

public class ShowEmployee {

public static JInternalFrame frame = new JInternalFrame();
public JTable table = new JTable();
public JFrame mainframe = new JFrame();

public ShowEmployee() {

    frame.add(table);
    JScrollPane scroll = new JScrollPane(table);
    frame.getContentPane().add(scroll, BorderLayout.SOUTH);
    frame.setTitle("Employees");
    frame.setResizable(true);
    frame.setClosable(true);
    frame.setMaximizable(true);
    frame.setIconifiable(true);
    frame.setSize(650, 400);
    frame.pack();
    frame.setVisible(true);

           /* mainframe.add(frame);
    mainframe.setSize(650, 400);    //adding frame inside mainframe defined in this class
    mainframe.pack();
    mainframe.setVisible(true);*/


    //ManagerInterface.getframe().add(frame); //adding the internalframe to manager interface frame


}
 }


我通过以下方式将ManagerInterface用作ShowEmployee的容器:


在ManagerInterface中,我称为JFrame
类ShowEmployee由JInternalFrame表示,并在其上添加JTable。
我将JInternalFrame添加到managerInterface类的框架中,该框架由ShowEmployee中插入的ManagerInterface.getframe.add。(frame)行定义。


问题如下:


如果我在ShowEmployee内定义一个框架(在本例中为大型机)并添加内部框架,我会看到以下内容:

但是,如果我将JInternalFrame添加到框架ManagerInterface中,则会看到以下内容:



换句话说,我看不到ScrollPane所代表的表的属性行,它在帧管理器接口的内部不可见,
我以此方式定义了滚动窗格,在ShowEmployee中进行了定义。
JScrollPane scroll =新的JScrollPane(表);
frame.getContentPane(。)添加(滚动BorderLayout.SOUTH);

最佳答案

如@kleopatra所述,请遵循Java命名约定。变量以小写字母开头。
当类名为JFrame时,为什么要命名ManagerInterface ManagerInterface
为什么在世界上有两种main方法?您只需在启动类ManagerInterface中使用它。
只需使ShowEmployee子类JInternalFrame。然后只需将其添加到JFrame中的ManagerInterface(您要命名其他名称)

public class ManagerInterface {
    private Frame frame;
    private ShowEmployees showEmployee;

    public ManagerInterface() {
        showEmployees = new ShowEmployees();

        frame = new JFrame("MagagerInterface");
        frame.add(new ShowEmployees());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativTo(null);
        frame.setVisible(true);
    }
}

public class ShowEmployees extends JInternalFrame {
    public ShowEmployees() {

    }
}

加到4。您应该将JInternalFrame添加到JDesktopPane而不是JFrame

JDesktopPane desktop;

public ManagerInterface() {
    showEmployees = new ShowEmployees();
    desktop = new JDesktopPane();
    desktop.add(showEmployees);

    frame = new JFrame("MagagerInterface");
    frame.setContentPane(desktop);
    ....
}

从EDT运行您的Swing应用程序

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


Initial Threads
以下内容不会引起问题,但是您应该知道一个父容器只能有一个父容器。因此,您尝试将表格添加到框架中,而不应该执行滚动窗格。只需添加滚动窗格

frame.add(table);   <<---------------------Get Rid of MEEEE!
JScrollPane scroll = new JScrollPane(table);
frame.getContentPane().add(scroll, BorderLayout.SOUTH);





这是一个具有上述所有修复程序的运行示例。

import javax.swing.*;

public class ManagerInterface {

    public JFrame frame = new JFrame("Manager Interface");

    private ShowEmployee showEmployee;
    private JDesktopPane desktop;

    public ManagerInterface() {
        showEmployee = new ShowEmployee();
        desktop = new JDesktopPane();
        desktop.add(showEmployee);

        frame = new JFrame("MagagerInterface");
        frame.setContentPane(desktop);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

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

class ShowEmployee extends JInternalFrame {

    String[][] data = {{"Hello", "Hello", "Hello"},
    {"Hello", "Hello", "Hello"}};
    String[] cols = {"Col 1", "Col 2", "Col 3"};

    public JTable table = new JTable(data, cols);

    public ShowEmployee() {

        JScrollPane scroll = new JScrollPane(table);
        getContentPane().add(scroll);
        setTitle("Employees");
        setResizable(true);
        setClosable(true);
        setMaximizable(true);
        setIconifiable(true);
        pack();
        setVisible(true);

    }
}

07-25 23:32