这是我遇到的问题。我有一个JToolBar
,其中包含3 JPanel
个,每个面板包含一些不同的组件。包含JProgressBar
的面板仅在加载时才可见。当它从可见变为不可见时会发生什么?我的另外两个面板移动了大约1个像素。这是代码:
private JProgressBar progressBar = new JProgressBar(JProgressBar.HORIZONTAL);
private JPanel progressPanel = new JPanel();
private JPanel globalPanel = new JPanel();
private JPanel cameraPanel = new JPanel();
private JLabel cameraLabel = new JLabel("Camera: ");
private JLabel cameraCoords = new JLabel();
private JLabel globalLabel = new JLabel("Global: ");
private JLabel globalCoords = new JLabel();
progressPanel.setLayout(new BoxLayout(progressPanel, BoxLayout.X_AXIS));
progressPanel.setBackground(Color.RED);
globalPanel.setLayout(new BoxLayout(globalPanel, BoxLayout.X_AXIS));
globalPanel.setBackground(Color.BLUE);
cameraPanel.setLayout(new BoxLayout(cameraPanel, BoxLayout.X_AXIS));
cameraPanel.setBackground(Color.GREEN);
progressBar.setFocusable(false);
progressBar.setPreferredSize(new Dimension(100,0));
progressBar.setMaximumSize(new Dimension(150,20));
progressBar.setStringPainted(true);
//progressBar.setAlignmentY(Component.CENTER_ALIGNMENT);
progressPanel.add(progressBar);
//globalLabel.setAlignmentY(Component.CENTER_ALIGNMENT);
//globalCoords.setAlignmentY(Component.CENTER_ALIGNMENT);
globalPanel.add(globalLabel);
globalPanel.add(globalCoords);
//cameraLabel.setAlignmentY(Component.CENTER_ALIGNMENT);
//cameraCoords.setAlignmentY(Component.CENTER_ALIGNMENT);
cameraPanel.add(cameraLabel);
cameraPanel.add(cameraCoords);
this.setBorder(new EmptyBorder(5,5,5,5));
this.setPreferredSize(new Dimension(0,30));
this.add(progressPanel);
this.add(Box.createHorizontalGlue());
this.addSeparator();
this.add(globalPanel);
this.addSeparator();
this.add(cameraPanel);
this.setFloatable(false);
现在我将progressPanel.setVisible(false)
JLabel
的移位设置为像素。我对齐注释的位置是我试图让它们对齐的地方,但这仍然无效。我在这里做错了什么?
答案 0 :(得分:0)
public class StatusBar extends JPanel{ //Instead of JToolBar
private JProgressBar progressBar = new JProgressBar(JProgressBar.HORIZONTAL);
private JPanel progressPanel = new JPanel();
private JPanel globalPanel = new JPanel();
private JPanel cameraPanel = new JPanel();
private JLabel cameraLabel = new JLabel("Camera: ");
private JLabel cameraCoords = new JLabel();
private JLabel globalLabel = new JLabel("Global: ");
private JLabel globalCoords = new JLabel();
public StatusBar(){
progressPanel.setLayout(new BoxLayout(progressPanel, BoxLayout.X_AXIS));
globalPanel.setLayout(new BoxLayout(globalPanel, BoxLayout.X_AXIS));
cameraPanel.setLayout(new BoxLayout(cameraPanel, BoxLayout.X_AXIS));
progressBar.setFocusable(false);
progressBar.setPreferredSize(new Dimension(100,0));
progressBar.setMaximumSize(new Dimension(150,20));
progressBar.setStringPainted(true);
progressPanel.add(tileLoadingLabel);
progressPanel.add(Box.createHorizontalStrut(5));
progressPanel.add(progressBar);
globalPanel.add(globalLabel);
globalPanel.add(globalCoords);
globalPanel.add(separator);
globalCoords.setPreferredSize(new Dimension(150,0));
//Here is where I made the change(after extending JPanel and not JToolBar
//I used the BorderLayout instead of the BoxLayout
this.setLayout(new BorderLayout());
this.setBorder(new EmptyBorder(5,5,5,5));
this.setPreferredSize(new Dimension(0,30));
this.add(globalPanel,BorderLayout.WEST);
this.add(Box.createHorizontalGlue());
this.add(progressPanel,BorderLayout.EAST);
}
}
我没有考虑自己发布答案,我将来知道,感谢您的见解:)