我正在尝试使用Swing创建一个界面。
这是我的代码:
public class JavaApplication30
{
public static void main(String[] args) throws IOException
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.X_AXIS));
frame.setPreferredSize(new Dimension(1280, 720));
frame.setResizable(false);
frame.setContentPane(new JPanel()
{
BufferedImage image = ImageIO.read(new File("C:\\Users\\user\\Documents\\NetBeansProjects\\JavaApplication29\\src\\eila.jpg"));
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image, 0, 0, 1280, 720, this);
}
});
JPanel a = new JPanel();
a.setAlignmentX(Component.LEFT_ALIGNMENT);
a.setPreferredSize(new Dimension(150, 500));
a.setMaximumSize(new Dimension(150, 500));
a.setOpaque(false);
a.add(Box.createRigidArea(new Dimension(5,50)));
JButton amico = new JButton("Amico");
a.add(amico);
a.add(Box.createRigidArea(new Dimension(5,20)));
amico.setPreferredSize(new Dimension(150, 50));
JButton bello = new JButton("Bello");
a.add(bello);
a.add(Box.createRigidArea(new Dimension(5,20)));
bello.setPreferredSize(new Dimension(150, 50));
JButton compagno = new JButton("Compagno");
a.add(compagno);
compagno.setPreferredSize(new Dimension(150, 50));
frame.getContentPane().add(a);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
class ImagePanel extends JComponent {
private Image image;
public ImagePanel(Image image) {
this.image = image;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
}
我将按钮对齐设置在左侧,但我的按钮仍然居中。
如果没有paintComponent作为背景,就不会发生这种情况。
这是为什么?如何对齐左侧的按钮?
答案 0 :(得分:1)
我将对齐设置为左,但我的按钮居中
setAlignmentX(...)只是“面板”应如何在其父面板中对齐的提示。将按钮添加到面板时,重要的是面板的布局管理器。
默认情况下,JPanel使用FlowLayout
。此外,默认情况下,当您创建FlowLayout
时,添加到面板的组件在面板空间中为centered aligned
。
使用组件FlowLayout
将布局管理器更改为left aligned
。阅读FlowLayout
API以获取要使用的正确构造函数。
此外,您可以在按钮之间提供默认间隙,因此不需要Box.createRigidArea(...)。当您使用BoxLayout
时,该组件真正意味着使用。