将面板添加到框架,但在应用程序运行时不显示[重复]

2024-04-23

我正在创建一个应用程序,框架中有两个面板,顶部有一个菜单栏。菜单栏显示得很好,到目前为止设置的任何操作都有效,但其他两个面板从未出现。

我尝试重新追踪将它们添加到框架上的所有面板和线条,但找不到任何错误。

两个窗格中的第一个不显示(drawForm() 方法中的表单)在我添加一些组件之前确实显示,但因为即使我再次删除组件也没有显示。

这是类框架:

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Frame {
    public static void drawFrame(){
        // Create frame
        JFrame frame = new JFrame("Frame");
        // Set default close operation
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Set frame attributes
        frame.setVisible(true);
        frame.setSize(400, 300);
        frame.setResizable(false);
        // Set Layout
        frame.setLayout(new BorderLayout());
        // Add Components
        frame.add(drawMenuBar(), BorderLayout.NORTH);
        JPanel twinPane = new JPanel();
            frame.add(twinPane, BorderLayout.CENTER);
            twinPane.setLayout(new GridLayout(1, 2));
            twinPane.add(drawForm());
            twinPane.add(drawInfo());
    } // Ends method drawFrame

    public static JMenuBar drawMenuBar(){
        //Create menu structure
        JMenuBar menu = new JMenuBar();
            JMenu file = new JMenu("File");
                JMenuItem clear = new JMenuItem("Clear");
                JMenuItem calculate = new JMenuItem("calculate");
                JMenuItem exit = new JMenuItem("Exit");
            JMenu help = new JMenu("Help");
                JMenuItem about = new JMenuItem("About");
                JMenuItem instructions = new JMenuItem("Instructions");
        //Add menu items to repective area of menu tree
        menu.add(file);
            file.add(clear);
            file.add(calculate);
            file.add(exit);
        menu.add(help);
            help.add(about);
            help.add(instructions);
        //Add ActionListener
        exit.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent arg0) {
                MainApp app = new MainApp();
                app.exit();
            }

        });
        //Set Return
        return menu;
    } // Ends method drawMenuBar

    public static JPanel drawForm(){
        //Set panel with layout and border
        JPanel form = new JPanel();
        form.setBorder(BorderFactory.createTitledBorder("Form"));
        form.setLayout(new BoxLayout(form, BoxLayout.PAGE_AXIS));
        //Create field and labels for form panel and add to form panel
        JLabel label1 = new JLabel("text1");
            form.add(label1);
        JTextField textfield1 = new JTextField(5);
            form.add(textfield1);
        JLabel label2 = new JLabel("text2");
            form.add(label2);
        JTextField textfield2 = new JTextField(5);
            form.add(textfield2);
        JButton calc = new JButton("calculate");
            form.add(calc);
        JTextField result = new JTextField(5);
            form.add(result);
        //Set return
        return form;
    } // Ends method drawForm

    public static JPanel drawInfo(){
        //Set Panel with layout and border
        JPanel info = new JPanel();
        info.setBorder(BorderFactory.createTitledBorder("Information"));
        //Set Return
        return info;
    } // Ends method drawInfo

} // Ends class Frame

main 方法在另一个类中,但类 Frame 创建了 GUI。框架和菜单栏工作得很好,但之后的一切都不起作用。

我感谢任何帮助,谢谢

Josh


当您将组件添加到容器时,您可能需要使容器层次结构无效才能使它们变得可见......

当您在添加任何内容之前将框架设置为可见时,问题就很突出......

public static void drawFrame(){
    // Create frame
    JFrame frame = new JFrame("Frame");
    // Set default close operation
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // Set frame attributes

    // !! Don't do this here...
    //frame.setVisible(true);
    // ... IMHO, better to use pack...
    //frame.setSize(400, 300);
    frame.setResizable(false);
    // Set Layout
    frame.setLayout(new BorderLayout());
    // Add Components
    frame.add(drawMenuBar(), BorderLayout.NORTH);
    JPanel twinPane = new JPanel();
    frame.add(twinPane, BorderLayout.CENTER);
    twinPane.setLayout(new GridLayout(1, 2));
    twinPane.add(drawForm());
    twinPane.add(drawInfo());

    // !! Do it here instead...
    frame.pack();
    frame.setVisible(true);
} // Ends method drawFrame
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将面板添加到框架,但在应用程序运行时不显示[重复] 的相关文章

随机推荐

  • 取消按下 esc 键时的用户输入的简单方法?

    Is there a simple way to cancel the user input in a JTextField when key Esc is pressed 我的意思是与关键侦听器和数据备份不同的东西 Thanks Add
  • Selenium waitFor 机制的内部工作原理是什么?

    我试图通过拦截对 doClick locator 的调用来自定义 Selenium 单击命令的行为 通过 user extentions js 基本上 每当我们的应用程序的 繁忙指示器 显示时 我都需要延迟单击操作 现在这种事情的标准答案是
  • Android Wear 上长时间运行的应用程序

    Android Wear 生态系统似乎是围绕用户将与之交互然后关闭的快速任务构建的 这对于大多数应用程序来说都非常有效 但是对于一个涵盖长时间运行的任务并且在手表休眠时不应自动关闭的应用程序又如何呢 我的具体案例 通过 Swing 高尔夫
  • 在 Kotlin 中测试 CoroutineScope 基础设施

    有人能够向我展示如何使该 viewModel 中的 getMovies 函数可测试吗 我无法进行单元测试来正确等待协程 1 我很确定我必须创建一个测试 CoroutineScope 和一个正常的 lifeCycle CoroutineSco
  • PHP 替换,但替代替换字符串

    好的 这就是我想做的 我正在尝试使用 PHP 来开发本质上是tinyMarkdown 实现的子集 不值得使用完整的 Markdown 类 我本质上需要执行 str replace 但每次出现针时都会交替替换替换字符串 以便处理开始和结束 H
  • 如何统计字符串中特定字符的出现次数

    我不知道从哪里开始检查字符串中特定字符的 n 次出现 我已经列出了我认为是该功能框架的基本轮廓 但我不确定内容是什么 let countCharFromNth getStr string chkdChar char if getStr Le
  • 网络适​​配器无法建立连接 - Oracle 11g

    我编写了一个 servlet 程序 我希望它连接到我的 Oracle 数据库 但它给了我一个错误 我正在使用 Eclipse Helios Tomcat 6 0 37 Oracle 11g 11 2 0 1 0 ojdbc6 jar 在服
  • Android JSON Jackson 教程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 更改 Visual Studio 2015 键绑定

    我有一个新的小键盘 没有 F 11 和 F 12 键 就我而言 这个键经常使用 我不会更改此键 例如 F 11 更改为 F 8 F 12 更改为 F 9 如何才能将其更改为 F 11 和 F 12 简单的方法 转到工具 选项 环境 键盘 您
  • SQL中有没有快速更新多条记录的方法?

    我需要用我根据 CodeID 创建的新名称替换 20 000 多个名称 例如 我必须用 cat 更新包含 dog 其 CodeID 为 1 的所有行 并用 bird 更新包含 horse 其 CodeID 为 2 的所有行 等等 第一个 S
  • 在Python中,什么是“sys.maxsize”?

    我假设这个数字 2 63 1 是 python 可以处理或存储为变量的最大值 但这些命令似乎运行良好 gt gt gt sys maxsize 9223372036854775807 gt gt gt a sys maxsize 1 gt
  • 如何立即查看 AppCode 中的 Swift 错误?

    有没有办法立即看到 AppCode 中的 Swift 错误 在他们的网站上 他们谈论静态代码分析 但我找不到任何地方可以声称这种情况会立即发生 当您在 Xcode 中输入一些 Swift 代码时 您通常会立即看到警告 错误等 在 AppCo
  • 通过 WCF 进行日志记录而不减慢速度

    我们的应用程序中有一个每月运行一次的大型流程 此过程通常运行约 30 分钟 并生成约 342000 个日志事件 最近 我们使用 WCF 将日志记录更新为集中式模型 但现在遇到了性能问题 以前的解决方案大约需要 30 分钟即可完成 但采用新的
  • cygwin + Windows套接字编程

    我正在尝试学习 Windows 中的 Socket 编程 并使用 cygwin 来实现同样的目的 我发现所需的文件位于 usr include w32api 我从网上获取了一个示例程序并尝试编译但无法这样做 相同的代码是 include
  • 在Tensorflow中,sampled_softmax_loss和softmax_cross_entropy_with_logits有什么区别

    在张量流中 有一些方法称为softmax cross entropy with logits https www tensorflow org versions master api docs python tf nn softmax cr
  • 如何使用具有圆角背景的文本覆盖图像

    我需要在 HTML 中复制您在此图中看到的内容 问题是文本覆盖了 div 和背景图像 如果外部 div 中没有图像并且没有纯色 我可以想象我可以相当轻松地使用一些带有圆角的小 html 元素放置在正确的位置来完成此操作 但是背景图像是是什么
  • 使用 PHP MySQL 创建嵌套 JSON

    我有一个返回某些字段的 SQL 查询 我正在使用json encode 获取 JSON 格式的数据 但是我无法以我想要的格式获取它 PHP代码
  • 递归函数提取所有叶节点

    我正在尝试递归遍历 json 树并提取所有叶节点 子节点 null 并返回一个平面列表 我没有得到完整的清单 我只得到一件物品 我想我已经快到了 但我不太清楚我在这里犯了什么错误 请指教 let cluster children child
  • 获取选定的文本位置

    目前 我正在浏览器中获取选定的文本 执行以下操作 window getSelection 现在 当按下自定义键时 我需要在该文本上方显示一个工具提示 请注意 鼠标不能再位于文本上方 因此为了做到这一点 我需要该所选文本的绝对位置 有没有办法
  • 将面板添加到框架,但在应用程序运行时不显示[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 框架中有两个面板 顶部有一个菜单栏 菜单栏显示得很好 到目前为止设置的任何操作都有效 但其他两个面板从未出现 我尝试重新追踪将它们添加到框架上的所有面板和线条 但找不到任何错误 两个窗格中