Java Swing JLabels 배열이 있습니다. 내 프로그램 사용자는 JFrame에 새 JLabel을 추가 할 수 있으며 프레임의 JLabel 수에 따라 JLabel의 텍스트 크기를 변경하려고합니다. 너무 많은 JLabel이 있으면 텍스트는 여전히 적합하며 다른 JLabel과 겹치지 않습니다.JLabel의 텍스트를 동적으로 크기 조정
5
A
답변
2
꽤 멋져 보이지만, 그것이 원하는 것이라면 여기 컴파일과 실행을위한 간단한 코드가 있습니다. 프로젝트에 필요한 코드를 자유롭게 추출하십시오. 즐겁게, - 미시시피
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);
}}
+0
코드를 사용해 주셔서 감사합니다. 그렇지만 아무 것도 작동하지 않습니다. Jlabel의 크기 – italiano40
+0
당신은 환영합니다, 죄송합니다, 나는이 코드를 이해하지 못합니다 - 코드의 어느 부분이 작동하지 않습니까? 방금 편집기에서 복사하여 저장하고 컴파일하고 실행하여 정상적으로 실행됩니다. 귀하의 질문에 맞지 않았을 수 있습니다 - 어떤 구성 요소 (무언가) 당신이 크기를 바꿨습니까? JLabel을 고정 (기본값) 글꼴로 지정 하시겠습니까? –
확인 .. 그 중 하나에 대해 질문이 있으십니까? 그렇다면 소식을 수정하고 질문을 추가하십시오. SSCCE (http://pscode.org/sscce.html)를 사용하면 이미 시도한 바가 바람직합니다. –
질문에 대한 좋은 코드는 무엇입니까 동적 크기 사용자가 레이블을 원하는만큼 추가 할 수 있도록 레이블에 텍스트를 넣을 수 있습니다. – italiano40