Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing:JPanel one中的JLabels位于行中,宽度=内容宽度_Java_Swing - Fatal编程技术网

Java Swing:JPanel one中的JLabels位于行中,宽度=内容宽度

Java Swing:JPanel one中的JLabels位于行中,宽度=内容宽度,java,swing,Java,Swing,我有一个JPanel,我想通过以下方式添加几个JLabel: 只有一个JLabel放置在一行上,下一个JLabel放置在上一行的下方 每个JLabel仅获取最小可能宽度,即其内容的宽度;我需要这个,因为我在JLabel上有鼠标单击侦听器,我不希望当用户单击JLabel附近的某个地方时触发它们 我试着这样做: myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.Y_AXIS)); myPanel.add(new JLabel("label1"));

我有一个JPanel,我想通过以下方式添加几个JLabel:

只有一个JLabel放置在一行上,下一个JLabel放置在上一行的下方

每个JLabel仅获取最小可能宽度,即其内容的宽度;我需要这个,因为我在JLabel上有鼠标单击侦听器,我不希望当用户单击JLabel附近的某个地方时触发它们

我试着这样做:

myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.Y_AXIS));
myPanel.add(new JLabel("label1"));
myPanel.add(new JLabel("label2"));
但有了这样的实现,我不仅可以点击JLabel本身,即它的文本,还可以点击它附近的某个地方,鼠标侦听器仍然会被触发

我做错了什么

我需要这个,因为我在jlabel上有鼠标单击侦听器

另一种方法是使用JButton,这样就不需要添加自定义事件处理

然后您可以使用:

button.setBorderPainted( false );
button.setContentAreaFilled( false );
button.setOpaque( false );

按钮看起来就像一个标签。但是,您只需向按钮添加一个ActionListener以进行正常的事件处理。

如果将每个JLabel放入自己的JPanel中,例如myPanel.addnew JPanel{{addnew JLabellabel1;};但为了获得更好的帮助,请创建并发布您的@HovercraftFullOfEels。我没想到您会推荐这种有时被称为双括号初始化的瘟疫。我所看到的所有这些都为实现这一目标提供了干净的方法。但当没有足够的空间时,情况就是这样。TODO:在这里插入一些关于费马最后一个定理的极客参考;-。所以@coolguy:你不应该使用这个{{double brake}}的东西。无论如何,发布一个新的帖子的建议仍然有效。您正在寻找的行为应该是默认行为。如果您观察到不同的行为,那么这一定是由代码的其他部分引起的。。。。