【问题标题】:BorderLayout Form won't show not even with setsize即使使用 setsize,BorderLayout 表单也不会显示
【发布时间】:2014-03-11 12:06:20
【问题描述】:

我是 java swing 新手,我正在使用菜单和带有 BorderLayout 的 JPanel 构建一个应用程序。但是即使使用 setSize ,面板也不会显示,因为我在这里是红色的。 在这里,我使用菜单将面板添加到框架:

if (actionEvent.getActionCommand() == "Tarif Änderung") {
        guiFrame.revalidate();
        guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        TarifTextForm tarifForm =new TarifTextForm();
        tarifForm.setVisible(true);

        guiFrame.getContentPane().add(tarifForm);

        //show the frame
        guiFrame.pack();    
        guiFrame.setPreferredSize(new Dimension(500, 500));
        guiFrame.setVisible(true);

在这里,我使用文本字段构建面板。

        tarifnameLbl=new JLabel();
    tarifnameLbl.setText("Tarifname:");
    tarifnameFld=new JTextField();
    tarifnameFld.setText("Zum starten, bitte tippen");


    betragLbl=new JLabel();
    betragLbl.setText("Betrag:");
    betragFld=new JTextField();
    betragFld.setText("0,00");

    JPanel p = new JPanel(new BorderLayout());

    p.add(tarifnameLbl, BorderLayout.WEST);
    p.add(betragLbl, BorderLayout.WEST);    
    p.add(tarifnameFld, BorderLayout.EAST);
    p.add(betragFld, BorderLayout.EAST);

    JPanel btnPanel = new JPanel();
    JButton newBut =new JButton();
    newBut.setText("Erstellen");
    btnPanel.add(newBut);

    JButton delBut=new JButton();
    delBut.setText("Löschen");
    btnPanel.add(delBut);

    JButton chgBut=new JButton();
    chgBut.setText("Ändern");
    btnPanel.add(chgBut);

    p.add(btnPanel, BorderLayout.SOUTH);
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout(10,10));
    panel.setSize(500,500);
    panel.add(p, BorderLayout.CENTER);

我不明白问题出在哪里:(请帮忙。 非常感谢!

【问题讨论】:

  • 还是不知道,请帮忙。

标签: java swing border-layout


【解决方案1】:

此处出错:

if (actionEvent.getActionCommand() == "Tarif Änderung") {

不要使用== 来比较字符串,而是使用equals(...)equalsIgnoreCase(...) 方法。了解 == 检查两个 objects 是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,并且这就是这里重要的事情。所以不是

if (fu == "bar") {
  // do something
}

做,

if ("bar".equals(fu)) {
  // do something
}

或者,

if ("bar".equalsIgnoreCase(fu)) {
  // do something
}

或为您的程序:

if ("Tarif Änderung".equals(actionEvent.getActionCommand())) {
   // ....
}

还要注意

  • 您在不需要此功能的组件上调用 setVisible(true)
  • 调用 pack() 之后,您在 GUI 上调用 setPreferredSize(...),这将不起作用。
  • 您应该尽可能避免设置尺寸和首选尺寸,而是让组件调整为其自然尺寸。

【讨论】:

  • 您好,非常感谢您的提示!我已经更改了我的代码,但这仍然不能解决面板根本不显示的问题。
猜你喜欢
  • 2013-06-06
  • 2019-10-14
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多