【问题标题】:JFrame not displaying panel contentJFrame 不显示面板内容
【发布时间】:2019-08-03 17:00:53
【问题描述】:

我刚开始学习 JFrame,正在尝试使用 grouplayout 创建一个包含 JLabels 和 JTextFields 框架的框架,但是当我运行程序时,我的面板中的内容没有出现。 感谢所有帮助。

    package practice;

import java.awt.*;

import javax.swing.*;


public class Boxc {
    public static void main(String[] args){
        JFrame frame = new JFrame("---------------------(-_-)---------------------"); 
        JLabel headText = new JLabel("Teach Me"); 

        //head text
        headText.setVerticalAlignment(JLabel.TOP);
        headText.setHorizontalAlignment(JLabel.CENTER);
        headText.setFont(headText.getFont().deriveFont(20f));




        frame.setVisible(true); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(700, 500);
        frame.setResizable(false);

        frame.setLocationRelativeTo(null); //Center start position
        frame.add(headText);

        //panel 1
        JPanel panel1 = new JPanel();
        GroupLayout layout = new GroupLayout(panel1);
        panel1.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);


        JLabel uInput = new JLabel("When You Type:");
        JTextField uText = new JTextField("Enter Here");
        JLabel iReply = new JLabel("I Reply:");
        JTextField iText = new JTextField("Enter Here");

        GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
        hGroup.addGroup(layout.createParallelGroup().
                addComponent(uInput).addComponent(iText));
        hGroup.addGroup(layout.createParallelGroup().
                addComponent(uText).addComponent(iText));
       layout.setHorizontalGroup(hGroup);





        frame.add(panel1);
    }}

【问题讨论】:

    标签: java swing jframe jpanel jtextfield


    【解决方案1】:

    Java 很奇怪。

    这一切都与 JFrame 方法的顺序有关。你必须总是在最后做frame.setVisible(true);,最好是作为你用来启动JFrame的任何代码的最后一行。在这种情况下,

    frame.setVisible(true); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(700, 500);
        frame.setResizable(false);
    
        frame.setLocationRelativeTo(null); //Center start position
        frame.add(headText);
    

    将改为

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(700, 500);
        frame.setResizable(false);
    
        frame.setLocationRelativeTo(null); //Center start position
        frame.add(headText);
        frame.setVisible(true); 
    

    希望这会有所帮助。

    编辑:忽略从/到的变化。将frame.setVisible(true); 放在frame.add(panel1); 之后。

    【讨论】:

    • panel1 部分在我切换位置后仍然没有出现。不过感谢您的建议。另外,我认为它与 panel1 部分本身有关,因为其余代码(例如 headText)显示在框架上。
    • 你把frame.setVisible(true);放在frame.add(panel);后面了吗?我确定你做到了,我只是确保你的问题听起来很像它源于 frame.setVisible(true); 的错误放置。
    • 我试过了,但是遇到了很多错误,前几个错误包括: 线程“main”中的异常 java.lang.IllegalStateException: javax.swing.JLabel[,0,0 ,0x0,无效,alignmentX=0.0,alignmentY=0.0,border=,flags=8388608,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizo​​ntalAlignment=LEADING,horizo​​ntalTextPosition=TRAILING,iconTextGap=4,labelFor=, text=When You Type:,verticalAlignment=CENTER,verticalTextPosition=CENTER] 未附加到 javax.swing.GroupLayout.checkComponents(Unknown Source) 处的垂直组
    • 很确定我在 panel1 部分犯了一些错误,对 grouplayout 不太熟悉。
    • @X 和 Y 以及将您的 headText 添加到 panel1 而不是框架。我敢肯定,一旦你开始工作,面板就会把它盖住。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多