我正在尝试使用包含两个JPanel
的{{1}}来创建BorderLayout
。
第一个JLabel
应使用除第二个JLabel
的空格之外的所有可用水平空间。
目前我的结果如下:
我想要完成的是:
这是一个SSCCE:
JLabel
你有什么提示要我完成这个吗?
答案 0 :(得分:1)
令我惊讶的是,我发现您可以通过将left
标签分配给BorderLayout.CENTER
而非BorderLayout.WEST
来完成此操作。我必须更多地研究这些文档(可能还有更多),以找出原因。
答案 1 :(得分:1)
下面,我已经注释了你的常规两行来添加标签,而是选择使用我自己喜欢的方法让事情看起来正确,GridBags。这是一个改变你的代码,展示了我的想法。
import javax.swing.*;
import java.awt.*;
public class TwoColumnsTruncate {
public TwoColumnsTruncate() {
JPanel panel = new JPanel(new BorderLayout());
JLabel left = new JLabel("This is a really large label and its text should be truncated with ellipsis");
JLabel right = new JLabel("Some short text");
GridBagLayout layout=new GridBagLayout();
GridBagConstraints gbc=new GridBagConstraints();
layout.columnWidths=new int[] {198, 198};
layout.rowHeights=new int[] {70};
panel.setLayout(layout);
gbc.fill=GridBagConstraints.BOTH;
gbc.insets=new Insets(0, 0, 0, 0);
gbc.gridx=0;
gbc.gridy=0;
gbc.gridwidth=1;
gbc.gridheight=1;
panel.add(left, gbc);
gbc.gridx=1;
gbc.gridy=0;
gbc.gridwidth=1;
gbc.gridheight=1;
panel.add(right, gbc);
//panel.add(left, BorderLayout.WEST);
//panel.add(right, BorderLayout.EAST);
JFrame frame = new JFrame(getClass().getSimpleName());
frame.getContentPane().add(panel);
frame.setMinimumSize(new Dimension(400, 75));
frame.setMaximumSize(new Dimension(400, 75));
frame.setVisible(true);
}
public static void main(String[] args) {
new TwoColumnsTruncate();
}
}
正如您可以通过按原样运行它看到的,它将生成所需的省略号。任何进一步的移动,都可以通过改变给定的插入和列宽来简单地实现。我会建议摆弄那些,因为由于Swing的浮躁,以及缺乏图像安全性,像素往往会搞砸。 我希望这能解决你的问题,祝你好运。 P.S,如果您对GridBag有任何问题,请随时给我发消息。
答案 2 :(得分:1)
frame.getContentPane().add(panel);
frame.setMinimumSize(new Dimension(400, 75));
frame.setMaximumSize(new Dimension(400, 75));
frame.setVisible(true);
应该是:
frame.getContentPane().add(panel);
frame.setResizable(false); // guessing you want this, based on the snippet
frame.pack(); // Set it to the minimum size it actually NEEDS to be.
frame.setMinimumSize(frame.getSize());
frame.setVisible(true);