我有一个此类,另一个具有连接数据库的功能,并向我展示了数据库的表,程序的这一部分工作得很好,下面说明了问题,但没有:
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);
}
}