Possiedo un array di Java Swing JLabels. L'utente del mio programma può aggiungere una nuova JLabel a JFrame e voglio che la dimensione del testo nella modifica di JLabel sia basata sul numero di JLabel nel frame. Se ci sono troppi JLabels, il testo si adatterà comunque e non si sovrapporrà ad altri JLabels.Rendere dinamico il testo in una JLabel
risposta
Non sembra carino, ma se è quello che vuoi, ecco una rapida porzione di codice da compilare ed eseguire. Sentiti libero di estrarre il codice che ti serve per il tuo progetto. Divertiti, - M.S.
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);
}}
grazie per il codice, ma non c'è nessuno che funzioni per me, ho bisogno di qualcosa che si ridimensiona in base a dimensione della Jlabel – italiano40
Siete i benvenuti, e scusate, non capisco il proposito - quale parte del codice non funziona? L'ho appena copiato-n-incollato su un editor, salvato, compilato e eseguito, funziona perfettamente. Forse non ho capito bene la tua domanda - quale componente (qualcosa) vuoi ridimensionare? Volevi che i JLabels fossero di tipo fisso (predefinito)? –
OK .. Avevi una domanda in merito? Se è così, sentiti libero di modificare il tuo post e aggiungere le domande. Preferibilmente con un SSCCE (http://pscode.org/sscce.html) di ciò che hai già provato. –
La domanda è che cos'è un buon codice per ridimensionare il testo nell'etichetta in modo che l'utente possa aggiungerne tante quante vogliono le etichette – italiano40