将标签添加到Scala Swing Panel时键入不匹配错误

时间:2014-12-23 14:02:39

标签: java swing scala jpanel label

我将此类扩展为FlowPanel,并且我尝试在其中添加标签:

import java.awt.{Label, Color}
import scala.swing._
import scala.util.Random    

class MyPanel extends FlowPanel{
  val dimension = new Dimension(600,400)
  maximumSize = dimension
  minimumSize = dimension
  preferredSize = dimension
  foreground = Color.white
  background = Color.LIGHT_GRAY

  def drowLabels(size: Int) = {
    for(i <- 0 until size){
      contents += new Label()
      revalidate();
      repaint();
    }
  }

但是我收到一条错误消息:

type mismatch;
found   : java.awt.Label
required: scala.swing.Component
    contents += new Label()
                ^

但是,例如,如果我将new Label()更改为new Button(),一切正常。实际上我无法将Label添加到任何类型的容器中,总会出现一些错误。

我一直试图找到一个小时的答案,但没有成功。

2 个答案:

答案 0 :(得分:3)

我认为该消息告诉您,期望java.awt.Label不是SWING组件(查看您的导入)。 SWING标签为javax.swing.JLabel,因此按如下方式修复导入应解决您的问题:

import java.awt.Color
import javax.swing.JLabel
import scala.swing._
import scala.util.Random

class MyPanel extends FlowPanel {
    ...
    def drowLabels(size: Int) = {
        for(i <- 0 until size){
            contents += new JLabel()
            revalidate();
            repaint();
         }
    }

答案 1 :(得分:0)

上述解决方案似乎不再有效:scala swing容器不允许添加元素,除非它们继承自scala.swing.Component类。因此,必须使用scala swing中的组件或使用Component.wrap(javaSwingComponent)调用来包装Java组件。

请参阅此question for more details