java - 我的 JPanel 不会显示。 Eclipse 说我没有错误。 java

标签 java eclipse swing jframe jpanel

我正在尝试在 JFrame 中显示 JPanel。 Jrame 可以工作,但我无法显示 JPanel。

今天我全类为此花了一个小时。包括老师。不是运气。 Eclipse 说没有错误有人可以提醒我我的错误吗?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

// make a JFrame and bits

public class MySystemGUI extends JFrame implements ActionListener
{
    private static final long serialVersionUID = 1L;
    private JFrame myFrame;
    private JTextField LLName, LLAddress, LLPhone, LLbankDeets;
    private JButton sub1;
    private JLabel LLNameT, LLAddressT, LLPhoneT, LLbankDeetsT;

    private JPanel LLJP()
    {
        JPanel JP1 = new JPanel();

        LLNameT = new JLabel ("Enter Landlord name");
        LLName = new JTextField(30);
        LLAddressT = new JLabel ("Enter Landlord Address ");
        LLAddress = new JTextField(40);
        LLPhoneT = new JLabel ("Enter Landlod Phone No.");
        LLPhone = new JTextField(10);
        LLbankDeetsT = new JLabel ("Enter Landlod Bank details");
        LLbankDeets = new JTextField(10);
        sub1 = new JButton("Submit"); 

        JP1.add(LLNameT);
        JP1.add(LLName); 
        JP1.add(LLAddressT);
        JP1.add(LLAddress); 
        JP1.add(LLPhoneT);
        JP1.add(LLPhone); 
        JP1.add(LLbankDeetsT );
        JP1.add(LLbankDeets); 
        JP1.add(sub1);

        //myFrame.add(JP1 );

        return JP1;
    }

    // Set up frame 

    public MySystemGUI()
    {   
        myFrame = new JFrame ();
        JPanel myPanel = LLJP(); 
        myFrame.add(myPanel,"South");
        this.setLayout(new GridBagLayout());
        this.setSize(700, 500);
        this.setTitle("My System GUI");
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBackground(Color.blue);  
    }

    //run this bitch
    public static void main (String[] args)
    { 
        new MySystemGUI();
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {

    }
}

最佳答案

你有一个 JFrame 成员

private JFrame myFrame;

这是您要添加组件的地方。

myFrame.add(myPanel,"South");

但是你setVisible到class frame

public class MySystemGUI extends JFrame
   ...
   this.setVisible(true);   // `this` is class frame, not `myFrame`

取出所有的this.setXxx和做myFrame.setXxx,取出extends JFrame

public class MySystemGUI implements ActionListener {
    ...
    public MySystemGUI() {
       ...
       myFrame.setLayout(new GridBagLayout());
       myFrame.setSize(700, 500);
       myFrame.setTitle("My System GUI");
       myFrame.setVisible(true);
       ...
    }
}

其他注意事项

  • myFrame.add(myPanel,"South"); - “South”无关紧要,仅适用于 BorderLayout。您将布局设置为 GridBaglayout。

  • this.setBackground(Color.blue);您不想在框架可见后 设置背景吗?

    <
  • Swing 程序应该在事件调度线程上运行/启动。参见 Initial Threads .基本上,您可以将实例化包装在 SwingUtilities.invokeLater

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

更新

您还需要为包含标签和字段的面板使用不同的布局管理器。使用 FlowLayout(JPanel 的默认设置),每行都连续添加。花点时间在 Laying out Components Withing a Container 学习布局管理器

这是一个使用 GridLayout 的简单修复

import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class MySystemGUI implements ActionListener {

    private static final long serialVersionUID = 1L;
    private JFrame myFrame;
    private JTextField LLName, LLAddress, LLPhone, LLbankDeets;
    private JButton sub1;
    private JLabel LLNameT, LLAddressT, LLPhoneT, LLbankDeetsT;

    private JPanel LLJP() {

        JPanel JP1 = new JPanel(new GridLayout(0, 2));

        LLNameT = new JLabel("Enter Landlord name");
        LLName = new JTextField(30);
        LLAddressT = new JLabel("Enter Landlord Address ");
        LLAddress = new JTextField(40);
        LLPhoneT = new JLabel("Enter Landlod Phone No.");
        LLPhone = new JTextField(10);
        LLbankDeetsT = new JLabel("Enter Landlod Bank details");
        LLbankDeets = new JTextField(10);
        sub1 = new JButton("Submit");

        JP1.add(LLNameT);
        JP1.add(LLName);
        JP1.add(LLAddressT);
        JP1.add(LLAddress);
        JP1.add(LLPhoneT);
        JP1.add(LLPhone);
        JP1.add(LLbankDeetsT);
        JP1.add(LLbankDeets);
        JP1.add(sub1);

        return JP1;

    }

    public MySystemGUI() {
        myFrame = new JFrame();
        JPanel myPanel = LLJP();
        myFrame.add(myPanel);
        myFrame.setTitle("My System GUI");
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setBackground(Color.blue);
        myFrame.pack();
        myFrame.setVisible(true);
    }

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

    @Override
    public void actionPerformed(ActionEvent e){}
}

关于java - 我的 JPanel 不会显示。 Eclipse 说我没有错误。 java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26485706/

相关文章:

java - JNI C函数无法解析android串口Api

java - Jaxb marshall 抽象类而不是唯一类

java - OkHttp3 - 使用 HttpURL.Builder 的 boolean 查询参数

java - ArrayList 错误程序无法运行

eclipse - 安装 eclipse Web Tools Platform (WTP) - 更新站点不起作用?

java - "Couldn' t 解析对语法 'org.eclipse.xtext.common.Terminals' 的引用“- PDE 已安装

java - java中的重叠图像

java - 如何在这个 Java 程序中获取逻辑以使我的循环正常工作?

java - 我看不到圆圈在移动

java - 当我运行此 JFrame 时,为什么我的按钮不会出现?