gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:02:29 26 4
gpt4 key购买 nike

我正在尝试在 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/

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