Java JCombobox意外行为
我在Netbeans中设计了一个JFrame,如下图所示: 当我运行程序时,组合框变为全白色,如下图所示: 和。。当我点击“空白”区域时,它会显示组合框内可选择的项目。。但即使在选择之后,仍然是相同的空白,没有正确显示布局和所选项目 我的代码如下:Java JCombobox意外行为,java,swing,jcombobox,Java,Swing,Jcombobox,我在Netbeans中设计了一个JFrame,如下图所示: 当我运行程序时,组合框变为全白色,如下图所示: 和。。当我点击“空白”区域时,它会显示组合框内可选择的项目。。但即使在选择之后,仍然是相同的空白,没有正确显示布局和所选项目 我的代码如下: public class LoginWindow extends javax.swing.JFrame { /** * Creates new form LoginWindow */ public LoginWindow() { i
public class LoginWindow extends javax.swing.JFrame {
/**
* Creates new form LoginWindow
*/
public LoginWindow() {
initComponents();
setLocationRelativeTo(null);
new MyWorker().execute();
}
..........
class MyWorker extends javax.swing.SwingWorker<String, Void> {
protected String doInBackground() {
databaseCheck();
return "done";
}
protected void done() {
progressPanel.setVisible(false);
loginPasswordField.setEnabled(true);
locationComboBox.setEnabled(true);
loginButton.setEnabled(true);
loginPasswordField.requestFocusInWindow();
}
}
工人阶级如下:
public class LoginWindow extends javax.swing.JFrame {
/**
* Creates new form LoginWindow
*/
public LoginWindow() {
initComponents();
setLocationRelativeTo(null);
new MyWorker().execute();
}
..........
class MyWorker extends javax.swing.SwingWorker<String, Void> {
protected String doInBackground() {
databaseCheck();
return "done";
}
protected void done() {
progressPanel.setVisible(false);
loginPasswordField.setEnabled(true);
locationComboBox.setEnabled(true);
loginButton.setEnabled(true);
loginPasswordField.requestFocusInWindow();
}
}
MyWorker类扩展了javax.swing.SwingWorker{
受保护字符串doInBackground(){
数据库检查();
返回“完成”;
}
受保护的void done(){
progressPanel.setVisible(假);
loginPasswordField.setEnabled(true);
locationComboBox.setEnabled(真);
loginButton.setEnabled(true);
loginPasswordField.requestFocusInWindow();
}
}
必须注意的是,这种行为大多是有经验的,尽管有时效果很好(很少)。。。任何帮助都将不胜感激。我只是在试图发布SSCCE时似乎已经修复了它 框架上可见的实际组件大小为[256,29]。。然而,首选尺寸不同,这似乎导致了问题
locationComboBox.setPreferredSize(new java.awt.Dimension(256, 29));
这就解决了问题。你能发布一个吗?SSCE也被称为,它引用了一个最小的示例(你能提供的代码越少),但仍然会重现错误,它必须是一个完整的代码,所以我们可以复制粘贴它,并在我们的计算机上看到它,从而能够更好地帮助你。@Frakcool修复了它。。谢谢您的时间。我建议您也阅读
setMinimumSize
和setPreferredSize
的答案。当然,这就是为什么我们要求一个MCVE,当你试图解决任何问题时,如果你把它带到基础上,那么有时候你会自己找到答案。下次再问之前想一想:)哦,别忘了检查你的答案是否被接受(当系统允许时,如果我没有错,将在2天内)。如果您正在使用多个JFrames
,您还应该阅读感谢链接。我肯定会更多地研究布局管理器,并在我的应用程序中实现它,因为我已经注意到组件在不同平台上存在大小问题。。但我想知道,如果GUI构建器在我创建组件时显示该组件,并且当应用程序运行时,它可能会导致意外问题/根据我最初没有设置的默认minimumSize/preferredSize值自动调整大小,那么这为什么会是一个问题。。哈哈!是的,我以前使用多个JFrames,但现在我在阅读了这个链接后更改了我的所有应用程序:pyesjavaswing是为使用而设计的,而不是使用多个JFrames
您可以使用一个。希望这能有所帮助,我不明白你的意思,但我想知道如果GUI生成器在我制作组件时显示组件,并且在应用程序运行时显示组件,直到“哈哈!”为止,为什么这会是一个问题,但由于字符限制,我无法复制粘贴所有组件。你能解释一下,也许我能给你另一个建议吗?不确定,也许其他人能回答这个问题。但我觉得没有什么比不使用IDE更好的了。
locationComboBox.setPreferredSize(new java.awt.Dimension(256, 29));