为什么此代码无法正确显示?
为什么FieldBox面板上的JLabel,JTextField和JButton组件不显示?为什么此代码无法正确显示?
请让我知道如果我可以添加任何东西到这个问题,使更多的责任!
字段盒(其中的一个对每个几个实例字段的创建):
public class FieldBox extends javax.swing.JPanel {
JLabel label;
JTextField textField;
public FieldBox() {
setBackground(Color.RED);
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
label = new JLabel();
gbc.gridx = 0;
gbc.gridy = 0;
add(label,gbc);
textField = new JTextField();
gbc.gridx = 1;
gbc.gridy = 0;
add(textField, gbc);
JButton editBtn = new JButton("edit");
gbc.gridx = 2;
gbc.gridy = 0;
add(editBtn, gbc);
JButton saveBtn = new JButton ("save");
gbc.gridx = 3;
gbc.gridy = 0;
add(saveBtn, gbc);
label.setVisible(true);
label.setBackground(Color.yellow);
setVisible(true);
initComponents();
}
在其上的框被加入的面板:(面板出现我知道这个面板的负载,因为我可以。看到它的背景,我还可以看到用于测试的“tit”JLabel,而且,当我使用gridLayout将框加载到它上面(如下所示)时,我看到其中一个框的背景,但没有显示任何内容,还应显示三个框,但我只看到一个。使用GridBagLayout
public class ShowBook extends javax.swing.JPanel {
public ShowBook(Book b) {
setLayout(new GridLayout(1,6));
setBackground(Color.GREEN);
String[] fieldTitles = {"title", "catalog", "publisher" };
JLabel tit = new JLabel("tit");
add(tit);
for (String s : fieldTitles){
FieldBox fb = new FieldBox();
fb.label.setText(s + ": ");
fb.textField.setText(getField(b, s));
System.out.println("in text field" + fb.textField.getText());
fb.revalidate();
fb.setVisible(true);
add (fb);
}
revalidate();
setVisible(true);
}
添加了ShowBook面板(上图)的面板。此面板还包含一个列表框,列出集合中的书籍,以及一个用于启动ShowBook面板并将所选书籍作为参数的按钮。
public class ShowLib extends javax.swing.JPanel {
/**
* Creates new form ShowLib
*/
public ShowLib(Library l) {
setLayout(new BorderLayout()) ;
setBackground(Color.WHITE);
JPanel listPanel = new JPanel();
listPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
final JList bookList = new JList();
bookList.setVisible(true);
bookList.setPreferredSize(new Dimension(150, 600));
bookList.setBackground(Color.yellow);
DefaultListModel dlm = new DefaultListModel();
for (Book b : l.libList){
dlm.addElement(b);
}
bookList.setModel(dlm);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.fill = gbc.BOTH;
listPanel.add(bookList, gbc);
JButton showBtn = new JButton("show");
gbc.gridy = gbc.RELATIVE;
listPanel.add(showBtn, gbc);
showBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
Book b = (Book) bookList.getSelectedValue();
ShowBook db = new ShowBook (b);
System.out.println("Clicked");
add (db, BorderLayout.CENTER);
revalidate();
}
});
revalidate();
setVisible(true);
add(listPanel, BorderLayout.WEST);
}
将ShowLib面板添加到主JFrame中的情况。我知道这个工程,因为该面板显示正常
void showLib() {
ShowLib sl = new ShowLib(l);
sl.setVisible(true);
setContentPane(sl);
revalidate();
// this.revalidate();
// this.pack();
System.out.println("showlibClicked");
}
的问题是在FieldBox类底部的线initComponents();
。
获得的经验:如果您不使用NetBeans可视化GUI编辑器,请获取该行的RID!
*“获得的经验教训:如果您不使用NetBeans可视化GUI编辑器,请获取该行的RID!”*这是无稽之谈。如果您了解IDE通常在该方法中执行的操作,则可以对应用程序进行编码。它内部的GUI构建。对于使用GUI设计和自由格式代码混合使用相同的基本结构和代码签名的人来说,这是很常见的。 – 2013-03-04 21:56:36
您的代码简短,自包含,正确且可运行吗? – 2013-03-04 18:44:20