对于我的应用程序,我正在创建一个脚本编辑器。目前,我在包含JLabels代表的JPanel中显示行号。但是,当我添加新的JLabels
来表示新的行号时,JLabels
会显示在面板的中心,即使我设置JLabel's
setVerticalAlignment
和{{1 }}。我希望它能让标签出现在彼此之下。
包含所有JLabel的JPanel类构造函数:
setVerticalTextPosition
用于将JLabel添加到JPanel的方法:
public LineNumberPanel() {
setPreferredSize(new Dimension(width, height));
setLayout(new GridLayout(0, 1));
//setup the label
label = new JLabel(String.valueOf(lineCount));
label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 15));
//setup the label alignment
label.setVerticalAlignment(JLabel.TOP);
label.setHorizontalAlignment(JLabel.CENTER);
label.setVerticalTextPosition(JLabel.TOP);
setAlignmentY(TOP_ALIGNMENT);
add(label);
}
添加新JLabel时的情况如下:
答案 0 :(得分:1)
请勿使用GridLayout
。它会拉伸你的组件。如果您使用BoxLayout
则不会
BoxLayout
的便利类是Box
。你可以做到
Box box = Box.createVerticalBox();
add(box);
然后只需将标签添加到box
box.add(label);
示例强>
import java.awt.*;
import javax.swing.*;
import javax.swing.border.BevelBorder;
public class BoxLabels {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
Box box = Box.createVerticalBox();
Font font = new Font("monospaced", Font.PLAIN, 11);
JPanel sideBar = new JPanel();
sideBar.setBackground(Color.BLACK);
sideBar.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
sideBar.add(box);
JTextArea text = new JTextArea(15, 50);
text.setMargin(new Insets(5, 5, 5, 5));
text.setBackground(Color.darkGray);
text.setForeground(Color.white);
text.setFont(font);
int count = 1;
for (int i = 0; i < 10; i++) {
JLabel label = new JLabel(String.valueOf(count));
label.setFont(font);
label.setForeground(Color.GREEN);
box.add(label);
count++;
}
JPanel panel = new JPanel(new BorderLayout());
panel.add(text);
panel.add(sideBar, BorderLayout.WEST);
JOptionPane.showMessageDialog(null, panel);
}
});
}
}
答案 1 :(得分:0)
您应该尝试相应地设置标签的PreferedSize。不幸的是,您不清楚使用哪个LayoutManager。