Sembra esserci un problema con l'allineamento di alcuni caratteri al centro di un BoxLayout lungo l'asse y in Java. Non so cosa potrebbe causare questo, & Ho creato un SSCCE per dimostrare l'effetto. Nell'esempio, utilizzo solo il carattere 'a', & Tracciamo una linea lungo il centro diretto di ciascun JPanel per dimostrare quanto lontano da ciascun caso provenga dal centro. Il caso con testo in grassetto sembra allineato bene, ma la formattazione normale in corsivo & è gravemente decentrata, nonostante l'utilizzo sia di setAlignmentX & setHorizontalAlignment. Qualsiasi aiuto sulla comprensione di questo effetto è apprezzato.L'allineamento di singoli caratteri in Java BoxLayout su asse Y è fuori centro
Nel caso in cui in qualche modo il problema sia con Java sul mio computer specifico, questa è un'immagine di ciò che viene visualizzato sullo schermo quando eseguo SSCCE, che carica tre diversi JPanel con BoxLayout lungo l'asse y & centrato JLabel con solo il carattere 'a' in ogni:
& ecco il codice per lo 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());
}
}
Per chiarezza, si usi 'style' [nomi] (http://docs.oracle.com/javase/8/docs/api/constant-values.html#java. awt.Font.BOLD). – trashgod
Buon punto, non ci ho pensato. Ho cambiato il codice per usare i nomi 'style' ora. Grazie per l'input. –