无法设置JFrame背景色问题求助
解决JFrame背景无法显示蓝色的问题
嘿,我一眼就看出问题所在啦!你现在调用的frame.setBackground(Color.BLUE)其实是在设置JFrame的边框区域颜色,但咱们平时看到的窗口内部区域,是由JFrame的ContentPane(内容面板)负责的,而且你还往里面加了两个不透明的JPanel(a和b),它们直接把内容面板的颜色给挡住了。
按照你要求的保留现有代码结构,只需要做这几个小修改:
- 把设置JFrame背景的代码,改成设置内容面板的背景
- 将你添加的JPanel a和b设置为透明(
setOpaque(false)),这样下层的内容面板背景就能透出来了
修改后的完整代码如下:
public static void window() { JFrame frame = new JFrame("Sharp"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout( new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)); JPanel b = new JPanel(); JLabel label2 = new JLabel("Hello, World!", JLabel.CENTER); label2.setAlignmentY(0); label2.setAlignmentX(0); label2.setText("<html>Made by Julian</html>"); JPanel a = new JPanel(); b.add(label2); a.setAlignmentX(Component.CENTER_ALIGNMENT); a.setPreferredSize(new Dimension(850, 500)); a.setMaximumSize(new Dimension(850, 850)); // set max = pref JToggleButton tb = new JToggleButton("SHARP Instructions"); tb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JToggleButton btn = (JToggleButton) e.getSource(); if(btn.isSelected()) { Desktop d = Desktop.getDesktop(); try { d.browse(new URI("https://pastebin.com/nDdGZ0cJ")); } catch (IOException | URISyntaxException e2) { e2.printStackTrace(); } } } }); // 改成设置内容面板的背景 frame.getContentPane().setBackground(Color.BLUE); // 设置JPanel为透明,让背景透出来 a.setOpaque(false); b.setOpaque(false); a.add(tb); frame.add(a, new GridBagConstraints()); frame.getContentPane().add(a); frame.getContentPane().add(b); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); }
简单补充下原理:
JPanel默认是不透明状态(opaque = true),会自动绘制自己的浅灰色背景,完全覆盖下层内容面板的颜色- 把
JPanel设为透明后,它们就不会绘制自身背景,就能看到后面的蓝色内容面板了
内容的提问来源于stack exchange,提问作者whateverrr
相关产品推荐
相关产品推荐

