【问题标题】:Ceylon String not being recognized by SwingSwing 无法识别 Ceylon String
【发布时间】:2013-11-20 19:24:00
【问题描述】:

我刚开始和锡兰一起玩,我真的很喜欢......

但是我在使用 Swing 时遇到了这个问题...我想使用 BorderLayout 将组件添加到 JPanel。

这是我正在使用的代码:

import javax.swing {
  JLabel,
  SwingUtilities { invokeLater },
  JFrame { exitOnClose = \iEXIT_ON_CLOSE },
  JButton,
  JPanel
}
import java.lang { Runnable }
import java.awt {
  Dimension,
  BorderLayout { north = \iNORTH, center = \iCENTER }
}

class MySwingApp() satisfies Runnable {

  shared actual void run() {
    value frame = JFrame();
    frame.title = "Renato app";
    frame.defaultCloseOperation = exitOnClose;
    frame.size = Dimension(300, 200);
    frame.setLocationRelativeTo(null);

    value panel = JPanel();
    panel.layout = BorderLayout();

    frame.add(panel);

    panel.add(JLabel("Hello world"), north);
    panel.add(JButton("Click me"), center);
    frame.visible = true;
  }

}

错误是:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: cannot add to layout: constraint must be a string (or null)
at java.awt.BorderLayout.addLayoutComponent(BorderLayout.java:426)
at java.awt.Container.addImpl(Container.java:1120)
at java.awt.Container.add(Container.java:966)
at firstModule.MySwingApp.run(run.ceylon:52)

我运行应用程序:

invokeLater(MySwingApp());

在我看来,这是在锡兰映射字符串的问题?!​​?谁能看到我做错了什么(作为锡兰的新手,我不会感到惊讶)??

【问题讨论】:

  • 当我尝试使用 IDE 关注 BorderLayout { NORTH } 时,我最终会出现 BorderLayout.north(小写),它不是字符串而是组件!!这可能是问题的根源吗??
  • 即使我使用字符串“North”和“Center”它仍然无法工作:(
  • 你可以使用字符串代替导入panel.add(JLabel("Hello world"), "North");panel.add(JButton("Click me"), "Center");

标签: swing ceylon


【解决方案1】:

这里发生的情况是 Container.add() 的第二个参数被声明为 Object,而不是 java.lang.String,因此 Ceylon 编译器没有意识到需要拆箱 Ceylon String。根据方法的签名,任何Object都是可以接受的,只是方法的实现决定了它实际上需要一个Java字符串。

在这种情况下,您可以使用 ceylon.interop.java 模块中的 javaString() 函数将 Ceylon String 转换为 Java String

panel.add(JLabel("Hello world"), javaString(north));
panel.add(JButton("Click me"), javaString(center));

【讨论】:

  • 哇,说得有道理...不得不责怪 Swing 库允许传入任何对象!当我尝试代码时会接受答案!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
相关资源
最近更新 更多