У меня есть массив Java Swing JLabels. Пользователь моей программы может добавить новый JLabel в JFrame, и я хочу изменить размер текста в JLabel в зависимости от количества JLabels в фрейме. Если JLabel слишком много, текст все равно уместится и не будет перекрывать другие JLabel.
Создание текста в JLabel с динамическим изменением размера
comment
Хорошо.. У вас были вопросы по этому поводу? Если это так, не стесняйтесь редактировать свой пост и добавлять вопросы. Желательно с SSCCE (pscode.org/sscce.html) того, что вы уже пробовали.
- person Andrew Thompson   schedule 21.01.2011
comment
Вопрос в том, какой хороший код для динамического размера текста в метке, чтобы пользователь мог добавлять столько меток, сколько захочет.
- person italiano40   schedule 21.01.2011
Ответы (1)
Выглядит некрасиво, но если это то, что вам нужно, вот небольшой фрагмент кода для компиляции и запуска. Не стесняйтесь извлекать любой код, который вам нужен для вашего проекта. Веселитесь, - М.С.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class LabelSize extends JPanel {
private Font font;
private JPanel panel;
private JLabel label = new JLabel ("Font Size Adapter Label", JLabel.CENTER);
private JTextField tf = new JTextField ("Type in text for new label here and hit [Enter]");
public LabelSize() {
super (new BorderLayout());
panel = labelPanel();
add (panel, "North");
add (tf, "South");
tf.addActionListener (new ActionListener () {
public void actionPerformed (ActionEvent e) {
label.setText (tf.getText());
label.setFont (font);
int labelW = (int) Math.ceil (label.getPreferredSize().getWidth());
int maxWidth = (int) Math.floor (panel.getSize().getWidth());
if (labelW <= maxWidth)
return;
for (int k = 1 ; labelW > maxWidth ; k++) {
Font labelFont = font.deriveFont (font.getSize() - k*1.0f);
label.setFont (labelFont);
labelW = (int) Math.ceil (label.getPreferredSize().getWidth());
}}});
}
private JPanel labelPanel() {
JPanel lp = new JPanel(new BorderLayout());
lp.setPreferredSize (new Dimension (270,30));
lp.add (label, "North");
font = label.getFont();
return lp;
}
public static void main (String[] args) {
JFrame lsFrame = new JFrame ("Lfit");
lsFrame.add (new LabelSize());
lsFrame.pack();
lsFrame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
lsFrame.setVisible(true);
}}
person
Manidip Sengupta
schedule
21.01.2011
спасибо за код, но да, у меня ничего не работает, мне нужно что-то, что изменяет размер в зависимости от размера Jlabel
- person italiano40; 21.01.2011
Добро пожаловать, и извините, я не понимаю комментарий - какая часть кода не работает? Я просто скопировал и вставил его в редактор, сохранил, скомпилировал и запустил, работает нормально. Может быть, я не правильно понял ваш вопрос - размер какого компонента (чего-то) вы хотели изменить? Вы хотели, чтобы JLabels имел фиксированный (по умолчанию) шрифт?
- person Manidip Sengupta; 21.01.2011