gpt4 book ai didi

java - JInternalFrame 与 jtable,位于 JFrame 内部

转载 作者:行者123 更新时间:2023-12-01 23:14:00 25 4
gpt4 key购买 nike

我有这个类和另一个类来连接到数据库并向我显示数据库的表这部分程序工作得很好,下面解释了问题,但没有:

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 表示,在该 JInternalFrame 上添加了 JTable。

  • 我将 JInternalFrame 添加到 ma​​nagerInterface 类frame 中,该框架由 ManagerInterface.getframe.add 行定义。 (框架),插入 ShowEmployee 中。

问题如下:

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

  • 但是,如果我将 JInternalFrame 添加到框架 ManagerInterface 中,我会看到以下内容: enter image description here

也就是说,我看不到ScrollPane所代表的表格的属性行,它在框架管理器界面内部是不可见的,我以这种方式定义滚动 Pane ,在 ShowEmployee 中定义。JScrollPane 滚动 = new JScrollPane (表);frame.getContentPane(.)add(滚动BorderLayout.SOUTH);

最佳答案

  1. 正如 @kleopatra 指出的,遵循 java 命名约定。变量以小写字母开头。

  2. 当类名是 ManagerInterface 时,为什么要命名 JFrame ManagerInterface

    <
  3. 为什么有两个 main 方法?您只需要在 ManagerInterface 启动类中使用它。

  4. 只需将 ShowEmployee 子类化为 JInternalFrame 即可。然后只需将其添加到 ManagerInterface

    中的 JFrame (您将为其命名其他内容)
    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() {

    }
    }
  5. 添加到 4。您应该将 JInternalFrame 添加到 JDesktopPane,而不是 JFrame

    JDesktopPane desktop;

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

    frame = new JFrame("MagagerInterface");
    frame.setContentPane(desktop);
    ....
    }
  6. 从 EDT 运行您的 Swing 应用程序

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

    参见Initial Threads

  7. 下面的内容不会引起问题,但您应该知道父容器只能有一个父容器。因此,您尝试将表格添加到框架滚动 Pane 不应该完成。只需添加滚动 Pane

    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);

}
}

关于java - JInternalFrame 与 jtable,位于 JFrame 内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21499495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com