Java JCheckBox未出现
我已经检查了everwhere以进行修复,但没有任何东西可以使我的复选框出现。我将其添加到面板,并将面板添加到窗口。按钮正在出现,因此复选框一定有问题。这是我的密码:Java JCheckBox未出现,java,swing,layout-manager,jcheckbox,Java,Swing,Layout Manager,Jcheckbox,我已经检查了everwhere以进行修复,但没有任何东西可以使我的复选框出现。我将其添加到面板,并将面板添加到窗口。按钮正在出现,因此复选框一定有问题。这是我的密码: import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.KeyEvent; import javax.swing.JButton;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainApplication {
public static Toolkit tk = Toolkit.getDefaultToolkit();
public static void main(String[] args) {
MainApplication instance = new MainApplication();
instance.start();
}
private JFrame window;
private JPanel mainPanel;
private JPanel contingencyPanel;
private JButton applyButton = new JButton("Apply Changes");
private JCheckBox autoRedLightBox = new JCheckBox("Red Light");
private JCheckBox autoYellowLightBox = new JCheckBox("Yellow Light");
private JCheckBox autoGreenLightBox = new JCheckBox("Green Light");
private JCheckBox autoBlueLightBox = new JCheckBox("Blue Light");
public void start() {
window = new JFrame("Main Control Window");
mainPanel = new JPanel();
contingencyPanel = new JPanel();
window.setSize(1280, 720);
window.setResizable(false);
window.setFocusable(true);
window.setFocusTraversalKeysEnabled(true);
int screenWidth = (int)tk.getScreenSize().getWidth();
int screenHeight = (int)tk.getScreenSize().getHeight();
window.setLocation((screenWidth/2)-(window.getWidth()/2), (screenHeight/2)-(window.getHeight()/2));
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainPanel.setLayout(null);
contingencyPanel.setLayout(null);
applyButton.setToolTipText("Changes will be applied to the arduino.");
applyButton.setSize(new Dimension(120, 30));
applyButton.setLocation(new Point((1280-120)-10, (720-56)-10));
autoRedLightBox.setSelected(true);
autoRedLightBox.setLocation(new Point(30, 30));
autoRedLightBox.setMnemonic(KeyEvent.VK_R);
mainPanel.add(applyButton);
mainPanel.add(autoRedLightBox, BorderLayout.CENTER);
window.add(mainPanel);
window.setVisible(true);
}
}
期望的结果:
阅读一些关于Swing中布局经理的信息。每个面板都需要一个布局来容纳组件,如果不为JPanel指定布局,它将使用默认布局(FlowLayout)。 问题就在这一行,当您为布局设置null时
mainPanel.setLayout(null);
只需对其进行注释,您就会看到表单上的按钮。
另外,要将表单放在屏幕中央,可以调用此方法
window.setLocationRelativeTo(null);
这非常适合
网格布局
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class ButtonsAndChecks {
private JComponent ui = null;
ButtonsAndChecks() {
initUI();
}
public void initUI() {
if (ui!=null) return;
// adjust last two numbers to need..
ui = new JPanel(new GridLayout(0,5,20,20));
ui.setBorder(new EmptyBorder(4,4,4,4));
// adjust numbers to need..
for (int i=1; i<26; i++) {
ui.add(new JButton("Button " + i));
}
// adjust numbers to need..
for (int i=1; i<26; i++) {
ui.add(new JCheckBox("Check " + i, i%2==0));
}
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
ButtonsAndChecks o = new ButtonsAndChecks();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
import java.awt.*;
导入javax.swing.*;
导入javax.swing.border.EmptyBorder;
公共类按钮和检查{
私有JComponent ui=null;
按钮和检查(){
initUI();
}
public void initUI(){
如果(ui!=null)返回;
//根据需要调整最后两个数字。。
ui=新JPanel(新网格布局(0,5,20,20));
ui.新订单(新的空订单(4,4,4,4));
//根据需要调整数字。。
对于(int i=1;imainPanel.setLayout(null)这就是问题所在。Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。在不同的地区使用不同的PLAF。因此,它们不利于像素完美的布局。相反,使用布局管理器,或与布局填充和边框一起使用。提供ASCII艺术或简单的布局图最小大小的GUI,如果可以调整大小,则具有更大的宽度和高度。window.setLocation((screenWidth/2)-(window.getWidth()/2),(screenHeight/2)-(window.getHeight()/2);
请尝试使用..window.setLocationRelativeTo(null);
@AndrewThompson非常感谢!现在我将其更改为方框布局,效果非常好,但是是否有任何布局不会弄乱按钮的位置,因为这就是我最初使用空布局管理器的原因?@AndrewThompson哦,谢谢,我从来都不知道将窗口居中有那么容易!非常感谢!@BinkanSalaryman谢谢,还有我刚找到一个有布局列表的网站,我想gridbag可能会满足我的需求,然后我看到了你的评论,如果它有助于解决问题,请阅读我的想法。