java - JFrame 的 setUndecorated(true) 内容未显示
问题描述
我正在使用应该在 LCD 触摸屏上实现的 java swing 创建一个 gui。gui 将占据所有屏幕并且不应该是可关闭的。所以“setUndecorated(true)”是必不可少的。问题,当我使用它时,框架的所有内容都没有显示,当我将鼠标移到它们上时,只会出现按钮。然后,当我最大化和最小化框架时,所有内容都会出现。这是我正在使用的代码:
public static void main(String[] args) {
//Création de notre JFrame
fenetre = new JFrame();
fenetre.setTitle("IHM");
fenetre.setSize(800, 600);
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setLocationRelativeTo(null);
support = new JPanel();
///////Adding content to the JPanel()/////////////
fenetre.setContentPane(support);
fenetre.setUndecorated(true);
fenetre.setVisible(true);
}
到目前为止,我找到的唯一解决方案是在设置可见的框架后更改框架的大小,如下所示:
fenetre.setSize(801, 601);
fenetre.setSize(800, 600);
但我并没有真正纠正这个问题,只是绕过它。
(编辑)我对那个不完整的代码表示歉意。这是一个完整的示例,您可以自己测试。首先将 undecorated 设置为 false 进行测试,然后尝试将 undecorated 设置为 true 并通过最大化和最小化 gui 来可视化窗口的内容。最后,尝试使用代码底部的快速修复。
编码 :
package test;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class test {
//Declarations
private static JFrame fenetre;
private static JPanel support;
private static JLabel l1, l2;
private static JComboBox<String> c1, c2;
private static JButton b1, b2;
//List to initiate the comboBoxes
private static String[] listC1 = {"Peter", "Alex", "Jhon", "Bran"};
private static String[] listC2 = {"10", "20", "32", "45"};
public static void main(String[] args) {
//Initialisation of the JFrame
fenetre = new JFrame();
fenetre.setTitle("IHM");
fenetre.setSize(800, 600);
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setLocationRelativeTo(null);
//Initialisation of the JPanel
support = new JPanel();
support.setBackground(Color.red);
support.setPreferredSize(fenetre.getSize());
//Initialisation of the components
l1 = new JLabel("What's my name");
l2 = new JLabel("What's my age");
c1 = new JComboBox<String>(listC1);
c2 = new JComboBox<String>(listC2);
b1 = new JButton("validate name");
b2 = new JButton("validate age");
//Creating layout
support.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
//Adding components
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(20, 20, 0, 0);
gbc.gridx = 0;
gbc.gridy = 0;
support.add(l1, gbc);
gbc.gridy = 1;
support.add(c1, gbc);
gbc.insets = new Insets(20, 20, 20, 0);
gbc.gridy = 2;
support.add(b1, gbc);
gbc.insets = new Insets(20, 20, 0, 20);
gbc.gridx = 1;
gbc.gridy = 0;
support.add(l2, gbc);
gbc.gridy = 1;
support.add(c2, gbc);
gbc.insets = new Insets(20, 20, 20, 20);
gbc.gridy = 2;
support.add(b2, gbc);
//Adding Listeners
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("My name is " + c1.getSelectedItem());
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("My age is " + c2.getSelectedItem());
}
});
//Adding the JPanel to the content pane of the JFrame
fenetre.setContentPane(support);
//Setting undecorated true (switch between true and false for testing)
fenetre.setUndecorated(false);
fenetre.setVisible(true);
//Quick fix, uncomment to test
//fenetre.setSize(801, 601);
//fenetre.setSize(800, 600);
}
}
解决方案
您没有向您的按钮添加任何按钮,JPanel
那么您希望它如何显示它们?
无论哪种方式,这是一个显示按钮的简单示例:
JFrame fenetre = new JFrame();
fenetre.setTitle("IHM");
fenetre.setExtendedState(JFrame.MAXIMIZED_BOTH);
fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
fenetre.setLocationRelativeTo(null);
JPanel support = new JPanel();
JButton button = new JButton("button");
support.add(button);
fenetre.setContentPane(support);
fenetre.setVisible(true);
请注意,您应该使用正确的布局。
我还添加setExtendedState(JFrame.MAXIMIZED_BOTH)
了填充屏幕,setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)
因为您不希望屏幕可以关闭。
推荐阅读
- spring - DataSourceBuilder 不拾取 ConfigurationProperties(prefix="...")
- python - Python - 如何使新文本在变量后出现在多行中?
- html - 博主“阅读更多”未显示
- c - 为什么我的共享对象在没有 -fPIC 的情况下无法编译
- javascript - 为什么选中的复选框为空?
- java - 如何将 android 中转换后的 drawable 上传到 Firebase?
- ruby-on-rails - 如何更改 ActiveRecord AssociationRelation 的单列
- plc - TIA Portal V16 的 OPC UA 服务器选项中缺少“启用标准 Simantic 服务器接口”
- c++ - 使用GMP库实现RSA后加密消息的结果为0
- python - 从内部提取令牌