[英]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顯示在屏幕上。 它不可見,因為父級JPanel
和JTextField
具有相同的背景色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.