Я пытаюсь написать панель с 3 вертикальными секциями в MigLayout: верхний рост, средний фиксированный и нижний рост.
Вверху находится JLabel с размером шрифта на основе размера контейнера. Середина также является Jlabel, а нижняя в настоящее время является пустой панелью JPanel.
Окно увеличения - нормально:
Когда я изменяю размер окна, содержимое не изменяется обратно (обратите внимание, что проблема не в размере шрифта, а в ширине контейнера):
Эта проблема существует только тогда, когда в переопределенном методе paint (см. Ниже) вызывается setFont на таймере JLabel.
public class TabRace extends JPanel {
private JLabel timer;
public TabRace() {
super();
// Set the layout
this.setLayout(new MigLayout("","[grow]","[grow][][grow]"));
// Timer label
timer = new JLabel("00:00:00.000");
timer.setOpaque(true);
timer.setBackground(new Color(0, 0, 0));
timer.setForeground(new Color(255, 255, 255));
this.add(timer,"grow,wrap");
// Table label
JLabel tableCaption = new JLabel("Last Records:");
this.add(tableCaption,"wrap");
JPanel bottom = new JPanel();
this.add(bottom, "grow,wrap");
}
public void paint(Graphics g) {
super.paint(g);
// Thanks to coobird
// @see https://stackoverflow.com/questions/2715118/how-to-change-the-size-of-the-font-of-a-jlabel-to-take-the-maximum-size
Font labelFont = timer.getFont();
final int stringWidth = timer.getFontMetrics(labelFont).stringWidth(timer.getText());
final int componentWidth = timer.getWidth();
// Find out how much the font can grow in width.
double widthRatio = (double)componentWidth / (double)stringWidth;
int newFontSize = (int)(labelFont.getSize() * widthRatio);
int componentHeight = timer.getHeight();
// Pick a new font size so it will not be larger than the height of label.
int fontSizeToUse = Math.min(newFontSize, componentHeight);
// Set the label's font size to the newly determined size.
// REMOVING NEXT LINE AND RESIZING IS WORKING
timer.setFont(new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse));
}
}
Я также пытался поместить JLabel в JPanel. Любые идеи?
paint
должно влиять на размер компонента ... - person MadProgrammer   schedule 10.08.2014