簡體   English   中英

通過使用自定義顏色作為背景,JFrame停止顯示任何JPanels

[英]By using custom color as Background JFrame stops showing any JPanels

嗨,我遇到了一個新問題! 當我嘗試通過以下方式更改JPanels背景時:

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

JFrame停止顯示任何JPanels。 我應該使用版式嗎? 如果是,哪以及如何?

我不知道這是否是一個錯誤,因為它不會告訴我一個錯誤,並且可以通過使用“ 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();

    }

}

添加元素后,不會刷新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更多信息

暫無
暫無

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

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