小编Sco*_*ick的帖子

Y-Axis上Java BoxLayout中单个字符的对齐偏离中心

在Java中沿y轴将某些字符对齐到BoxLayout的中心似乎存在问题.我不知道是什么导致这种情况,我已经创建了一个SSCCE来证明这种效果.在这个例子中,我只使用了字符'a',我在每个JPanel的正中间画一条线来演示每个案例离中心有多远.粗体文本的情况似乎很好,但正常的格式和斜体都非常偏离中心,尽管同时使用了setAlignmentX和setHorizo​​ntalAlignment.任何帮助理解这种效果的人都表示赞赏.

在我的特定计算机上以某种方式出现问题的情况下,这是我运行SSCCE时屏幕上显示的内容的图像,SSCCE沿着y轴加载三个不同的带有BoxLayouts的JPanel并仅放置一个居中的JLabel每个角色'a': 在此输入图像描述

这是SSCCE的代码:

import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;

public class AlignmentTest extends JPanel
{
    public AlignmentTest(char label, int style)
    {
        JLabel l = new JLabel(Character.toString(label));
        setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
        setBackground(Color.WHITE);
        setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        setPreferredSize(new Dimension(300,50));
        add(Box.createVerticalGlue());
        add(l);
            l.setFont(l.getFont().deriveFont(style));
            l.setAlignmentX(CENTER_ALIGNMENT);
            l.setHorizontalAlignment(JLabel.CENTER);
        add(Box.createVerticalGlue());
    }
    public static void main(String[] args)
    {
        JFrame f = new JFrame("Alignment Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(1,0,5,5));
        f.add(new AlignmentTest('a',Font.PLAIN));
        f.add(new AlignmentTest('a',Font.BOLD));
        f.add(new AlignmentTest('a',Font.ITALIC));
        f.pack();
        f.setVisible(true);
    }
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawLine(getWidth()/2,0,getWidth()/2,getHeight());
    }
}
Run Code Online (Sandbox Code Playgroud)

java swing jlabel char boxlayout

6
推荐指数
2
解决办法
512
查看次数

JLabel 未在 JPanel 内截断

如果我将 aJLabel放在JPanel没有严格边界的内部,则当 a 的JPanel大小小于文本时,它不会截断文本。为什么会发生这种情况?不应该JPanel意识到没有足够的空间并相应地截断文本,无论其布局如何?

例如,我创建了JFrame一个GridLayout带有两行和一列的 。在那,我在顶部放置了一个,在底部放置了JPanel一个。每个包含一个.FlowLayoutJPanelBoxLayoutJPanelJLabel

简而言之:为什么JLabel顶部的不截断其文本?

图像来证明我的意思: 在此处输入图片说明 在此处输入图片说明

同样,这是 SSCCE 来演示效果:

import javax.swing.*;
import java.awt.*;

public class TruncationTest1
{
    public static void main(String[] args)
    {
        JFrame f = new JFrame("Truncation Test");
        JPanel panel = new JPanel(); //Default layout, aka FlowLayout
        JLabel label = new JLabel("Try resizing the frame: This will not be truncated for some reason.");
        JLabel label2 = …
Run Code Online (Sandbox Code Playgroud)

java swing jlabel jpanel grid-layout

2
推荐指数
1
解决办法
1054
查看次数

标签 统计

java ×2

jlabel ×2

swing ×2

boxlayout ×1

char ×1

grid-layout ×1

jpanel ×1