我想創建一個帶有文本欄,進度條和不是的狀態欄。然而,事情正在絞盡腦汁。JLabel調整大小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());
}
}
這究竟是爲什麼,以及如何阻止它?
編輯: 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 2013-02-13 01:51:29