簡體   English   中英

我的JPanel無法顯示。 Eclipse說我沒有錯誤。 Java的

[英]My JPanel won't show. Eclipse says I have no errors. Java

我正在嘗試在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");

但是你設置對類框架可見

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程序應在事件調度線程上運行/啟動。 請參閱初始線程 基本上,您可以將實例化包裝在SwingUtilities.invokeLater

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

UPDATE

您還將要對持有標簽和字段的面板使用不同的布局管理器。 使用FlowLayout(JPanel的默認設置)時,eveerytyhing連續添加。 花一些時間在使用容器布置組件上學習布局管理器

這是使用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){}
}

您有一個隱藏框架的本地框架,它實際上是一個JFrame

public class MySystemGUI extends JFrame implements ActionListener {   // class signature
    ...
    public MySystemGUI() {
        ... 
        myFrame = new JFrame (); // local variable
        ...
        myFrame.add(myPanel,"South");
        ...
    }
    ...
}

您的面板將添加到此本地框架而不是您的班級,因此它將不可見。 您可以使用this.add(...)擺脫此局部變量並添加面板,或者避免擴展JFrame並改用局部變量。 最好使用最后一種方法:

今天我全班都花了一個小時。 包括老師。 不走運

只是找另一位老師。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM