Я почти слепой после прочтения нескольких статей java swing и до сих пор не могу заставить панель работать.
Когда я добавляю 2 JLabels, они красиво выровнены влево, с дополнением 5px, определенным EmptyBorder, так же, как я хочу, чтобы они были.JLabel неуместен после добавления JPanel
Я обнаружил, что после добавления ProgressBar с дополнительной границей для заполнения, не работает, как ожидалось, добавил еще 1 панель, где я добавить ProgressBar. Прогресс выглядит неплохо, но все мои ярлыки смещены.
И, наконец, он выглядит следующим образом (RED фон для отладки, чтобы увидеть, как JPanel рисует):
Question1: Как это исправить?
Question2: Это стандартный подход для качания, чтобы разместить панель внутри другой панели с другими панелями, чтобы получить форму, я хочу?
Источник:
public class AppInitProgressDialog {
private static final int VIEW_PADDING_VAL = 5;
private static final Border viewPaddingBorder = new EmptyBorder(VIEW_PADDING_VAL, VIEW_PADDING_VAL, VIEW_PADDING_VAL, VIEW_PADDING_VAL);
private JPanel view; // Dialog view
private JPanel panel;
private JPanel progressPanel;
private JLabel title;
private JLabel progressDesc;
private JProgressBar progressBar;
private void initPanel(int w, int h) {
view = new JPanel();
view.setBorder(BorderFactory.createRaisedSoftBevelBorder());
view.setBackground(Color.LIGHT_GRAY);
view.setSize(w, h);
view.setLayout(new BorderLayout());
panel = new JPanel();
panel.setBorder(viewPaddingBorder);
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
//panel.setLayout(new SpringLayout());
panel.setOpaque(false);
JFrame parent = AppContext.getMe().getAppWindow().getFrame();
int posx = (parent.getWidth() - w)/2;
int posy = (parent.getHeight() - h)/2;
view.add(panel, BorderLayout.CENTER);
view.setLocation(posx, posy);
}
private void initTitle() {
title = new JLabel("Progress title");
title.setAlignmentX(JComponent.LEFT_ALIGNMENT);
panel.add(title);
}
private void initProgress() {
progressPanel = new JPanel(new BorderLayout());
progressPanel.setBackground(Color.LIGHT_GRAY);
progressPanel.setBorder(new EmptyBorder(15, 30, 15, 30));
progressPanel.setBackground(Color.RED);
progressBar = new JProgressBar(0, 10000);
progressBar.setStringPainted(true);
progressBar.setAlignmentX(JComponent.LEFT_ALIGNMENT);
progressPanel.add(progressBar);
panel.add(progressPanel);
progressDesc = new JLabel("Progress description");
panel.add(progressDesc);
}
public AppInitProgressDialog() {
initPanel(400, 100);
initTitle();
initProgress();
}
public JComponent getView() {
return view;
}
}
Я рекомендую редактирование вопроса и удаление будущее Вопроса 3. Это не имеет никакого отношения к первоначальному вопросу в названии. – sm4