Я хочу создать строку состояния с текстовой панелью, индикатором выполнения, а что нет. Тем не менее, дела обстоят глупо.JLabel resizing JPanel
На первый у меня был только текст бар и строка состояния выглядела как в приведенном ниже примере (мне не нужен родительский контейнер):
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Main
{
public static void main(String[] args)
{
//Display actual GUI
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new Gui();
}
});
}
}
class Gui
{
public Gui()
{
JFrame masterWindow = new JFrame();
masterWindow.setSize(1100, 800);
masterWindow.setMinimumSize(new Dimension(400, 400));
masterWindow.setLocationRelativeTo(null);
masterWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel rootPanel = new JPanel();
rootPanel.setLayout(new BorderLayout());
StatusBar statusBar = new StatusBar();
rootPanel.add(statusBar, BorderLayout.SOUTH);
masterWindow.setContentPane(rootPanel);
masterWindow.setVisible(true);
}
}
class StatusBar extends JLabel
{
private static final long serialVersionUID = 1L;
StatusBar()
{
super("welcomeText");
add(textBar);
setOpaque(true);
setBorder(BorderFactory.createLoweredSoftBevelBorder());
}
}
Это работает как положено. Но сохраните высоту строки состояния. Теперь, если вы измените класс StatusBar на класс ниже, высота почти удвоится. Почему это происходит?
Это не так, как эта установка требует больше пространства по вертикали:
public class StatusBar extends JPanel
{
private static final long serialVersionUID = 1L;
StatusBar()
{
super();
JLabel textBar = new JLabel(Main.language.getString("welcomeText"));
add(textBar);
setOpaque(true);
setBorder(BorderFactory.createLoweredSoftBevelBorder());
}
}
Почему это происходит, и как это остановить?
EDIT: BorderLayout действительно работал, но я хотел использовать MigLayout.
Я понял, но сейчас возникает другая проблема. Дополнительный progresBar не будет закрепляться на востоке, а разделитель даже не виден.
Вот код:
public class StatusBar extends JPanel
{
private static final long serialVersionUID = 1L;
JLabel textBar;
JProgressBar progressBar;
StatusBar()
{
setLayout(new MigLayout("insets 0, gap 0!")); //Mig has some gaps inbetween components, this will remove the gaps
textBar = new JLabel(Main.language.getString("welcomeText"));
progressBar = new JProgressBar(0, 100);
JSeparator separator = new JSeparator(SwingConstants.VERTICAL);
add(textBar);
add(separator);
add(progressBar, "east");
setOpaque(true);
setBorder(BorderFactory.createLoweredSoftBevelBorder());
}
}
Я могу сделать это новый вопрос, но я не думаю, что это стоит ...
почему бы вам не взглянуть на исходный код или возможно запустить этот код через отладчик? – mre