通过使用自定义颜色作为背景JFrame停止显示任何JPanels

时间:2016-02-29 18:16:35

标签: java jframe jpanel

您好我遇到了新问题!当我尝试通过以下方式更改JPanels背景时:

pnl1.setBackground(new Color(0,150,50));

JFrame停止显示任何JPanel。我应该使用布局吗?如果是,那又怎么样?

我不知道它是否是一个错误,因为它没有告诉我有关错误的信息,而且它可以通过使用" Color.GREEN" ...但是自己看一下

    package GUI;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.TextField;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class MainFrame extends JFrame{
    private static final long serialVersionUID = 1L;

    public static final int width = 1520;
    public static final int height = 860;
    private Color c_green= new Color(0,153,51);
    private Color c_blue_friends = new Color(30,144,155);

    JPanel pnl1;
        JScrollPane sp;
        JPanel pnl1_01;
            JTextField tf1;

        JPanel pnl1_02;
        JPanel pnl1_03;

    JPanel pnl2;


    JPanel pnl3;


    JPanel pnl4;
    JPanel pnl5;
    JPanel pnl6;


    public MainFrame(){
        setTitle("HackMey");
        setSize(width,height);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setLayout(null);
        setVisible(true);

        pnl1 = new JPanel();
        pnl1.setBounds(0, 0, width / 2, height);
        pnl1.setBackground(Color.black);
        pnl1.setLayout(null);


            sp = new JScrollPane();
            sp.setBounds(width / 2 - 10, 0, 10, height);
            sp.setBorder(null);
            sp.setBackground(Color.DARK_GRAY);
            sp.setVisible(true);

            pnl1_01 = new JPanel();
            pnl1_01.setBounds(0, height - height / 8, width / 2, height / 8);
            pnl1_01.setBackground(Color.gray);
            pnl1_01.setLayout(null);
            pnl1_01.setVisible(false);

            tf1 = new JTextField();
            tf1.setBorder(null);
            tf1.setBounds(0, height - height/10, width/2 -10, height / 10);
            tf1.setBackground(Color.black);
            tf1.setForeground(c_green);
            tf1.setVisible(true);

        pnl1.add(sp);
        pnl1.add(pnl1_01);  
        pnl1.add(tf1);
        pnl1.setVisible(true);

        pnl2 = new JPanel();
        pnl2.setBounds(width / 2, 0, width / 2, height / 4);
        pnl2.setBackground(c_green);
        pnl2.setLayout(null);
        pnl2.setVisible(true);


        pnl3 = new JPanel();
        pnl3.setBounds(width / 2, height / 4, width / 2, height / 4);
        pnl3.setBackground(Color.GRAY);
        pnl3.setLayout(null);
        pnl3.setVisible(true);


        pnl4 = new JPanel();
        pnl4.setBounds(width / 2, 2* (height / 4), width / 2, height / 4);
        pnl4.setBackground(c_blue_friends);
        pnl4.setLayout(null);
        pnl4.setVisible(true);


        pnl5 = new JPanel();
        pnl5.setBounds(width / 2, 3* (height / 4), width / 4, height / 4);
        pnl5.setBackground(Color.RED);
        pnl5.setLayout(null);
        pnl5.setVisible(true);


        pnl6 = new JPanel();
        pnl6.setBounds(3*(width / 4), 3* (height / 4), width / 4, height / 4);
        pnl6.setBackground(Color.GREEN);
        pnl6.setLayout(null);
        pnl6.setVisible(true);

        add(pnl1);
        add(pnl2);
        add(pnl3);
        add(pnl4);
        add(pnl5);
        add(pnl6);

        setVisible(true);
    }



    public static void main(String[] args) {
        MainFrame obj = new MainFrame();

    }

}

1 个答案:

答案 0 :(得分:0)

添加元素后,JFrame未刷新。添加完所有JPanel后,尝试将setVisible(true)行移至末尾。

<强>更新 JTextField显示在屏幕上。它不可见,因为父JPanelJTextField具有相同的背景颜色Color.black。将不同的背景颜色设置为父JPanel和JTextField,您将能够看到JTextField

并且,窗口的硬编码宽度和高度不是一个好习惯。您的程序可能必须在具有不同屏幕大小的其他计算机上运行。 因此,请考虑将应用程序窗口的宽度和高度设置为与计算机的屏幕大小相匹配。这可以使用以下两行来完成:

public static final int width = (int)java.awt.Toolkit.getDefaultToolkit().getScreenSize().getWidth();
public static final int height = (int)java.awt.Toolkit.getDefaultToolkit().getScreenSize().getHeight();

考虑使用GridBagLayout,而不是AbsoluteLayout。 GridBagLayout被认为是最灵活和最强大的LayoutManager。详细了解GridBagLayout here