阅读(954) (0)

JLabel

2017-01-09 19:23:21 更新

Java Swing教程 - JLabel


JLabel 表示标签,即用于不可编辑的文本的显示区域。

JLabel 可以显示文本和图像。它甚至可以渲染HTML标签,以便您可以创建一个显示多色或多行文本的 JLabel

JLabel 可以显示文本和图像。它甚至可以渲染HTML标签,以便您可以创建一个显示多色或多行文本的 JLabel 。...

public JLabel ()
public JLabel (java.lang.String text)
public JLabel (java.lang.String text, int horizontalAlignment)
public JLabel (Icon image)
public JLabel (Icon image, int horizontalAlignment)
public JLabel (Java.lang.String text, Icon icon, int horizontalAlignment)
 

horizontalAlignment的值为以下值之一:

  • SwingConstants.LEFT
  • SwingConstants.CENTER
  • SwingConstants.RIGHT
  • SwingConstants.LEADING
  • SwingConstants.TRAILING

horizontalAlignment的值为以下值之一:...

以下代码显示了如何创建JLabel的一些示例。

从字符串创建JLabel

JLabel nameLabel  = new JLabel("Name:");

显示图像ok.gif

JLabel warningImage  = new JLabel(new Icon("C:/images/ok.gif"));

setText()方法设置JLabel的文本。

JLabel子类用作每个JList的默认渲染器,JComboBox,JTable和JTree组件。

import java.awt.FlowLayout;
/*ww  w  . j a v a2  s.  c om*/
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main {
  public static void main(String args[]) {
    JFrame f = new JFrame("Label Demo");
    f.setLayout(new FlowLayout());
    f.setSize(300, 200);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JLabel label= new JLabel("www.zijiebao.com");
    f.add(label);
    f.setVisible(true);
  }
}


助记键

set Displayed Mnemonic()方法为JLabel设置键盘助记符。键盘助记符字符带有下划线,为用户提供提示。

setLabelFor()方法接受对另一个组件的引用,它指示此JLabel描述该组件。

当按下JLabel的助记键时,焦点设置为在setLabelFor()方法中使用的组件。

在下面的代码中,JLabel的助记符设置为字符N.当用户按Alt + N时,焦点将设置为JTextField。

import java.awt.BorderLayout;
// w  w w  . j  a va  2  s  .  co m
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Main {
  public static void main(String[] args) {
    JFrame frame = new JFrame("JFrame");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JTextField nameTextField = new JTextField();
    JLabel nameLabel = new JLabel("Name:");
    nameLabel.setDisplayedMnemonic("N");
    nameLabel.setLabelFor(nameTextField);

    frame.add(nameLabel, BorderLayout.WEST);
    frame.add(nameTextField, BorderLayout.CENTER);

    frame.pack();
    frame.setVisible(true);
  }
}


多行标签(HTML)

多行标签(HTML)

import javax.swing.JFrame;
import javax.swing.JLabel;
/*from   www .j  a v  a  2 s  .c o  m*/
public class Main {

  public static void main(String[] a) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JLabel label = new JLabel("<html>bold <br> plain</html>");
    frame.add(label);

    frame.setSize(300, 200);
    frame.setVisible(true);
  }

}

如果将HTML标记传递给JLabel上的setText方法,则标记必须以“< html>"开头 并以“< / html>"结尾。

文本对齐

我们可以在Swing标签中控制文本对齐。

下面的代码为垂直和水平到中心。

label.setHorizontalAlignment(JLabel.CENTER);
label.setVerticalAlignment(JLabel.CENTER);

完整的源代码

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
//from   w  w w.ja v  a  2s .com
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.Border;

public class Main {
  public static void main(String args[]) {
    JFrame f = new JFrame("Label Demo");
    f.setLayout(new FlowLayout());
    f.setSize(300, 200);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JLabel label= new JLabel("www.zijiebao.com");
    Border border = BorderFactory.createLineBorder(Color.BLACK);
    label.setBorder(border);
    label.setPreferredSize(new Dimension(150, 100));
    
    label.setText("Centered");
    label.setHorizontalAlignment(JLabel.CENTER);
    label.setVerticalAlignment(JLabel.CENTER);
    f.add(label);
    f.setVisible(true);
  }
}

完整的源代码...

JLabel label = new JLabel("Text Label", JLabel.CENTER);

标签图标

JLabel还可以显示图标并提供图形信息用户。

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
/* w w w.j a  va  2  s . c o m*/
public class Main {
  public static void main(String[] args) {
    JFrame frame = new JFrame("JLabel Test");

    frame.setSize(300, 200);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    ImageIcon imageIcon = new ImageIcon("icon.gif");
    JLabel label = new JLabel(imageIcon);

    frame.add(label);
    frame.setVisible(true);
  }
}

JLabel还可以显示图标并提供图形信息用户。...

JLabel label = new JLabel("Mixed", imageIcon, SwingConstants.RIGHT);

标签字体

JLabel可以更改文本字体。 以下代码从Font构造函数创建一个新字体并将创建的字体设置为JLabel。

import java.awt.Color;
import java.awt.Font;
//  www .j av a2  s . c o m
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main {
  public static void main(String[] args) {
    JFrame frame = new JFrame("JLabel Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JLabel label = new JLabel("First Name");
    label.setFont(new Font("Courier New", Font.ITALIC, 18));
    label.setForeground(Color.RED);

    frame.add(label);
    frame.pack();
    frame.setVisible(true);
  }
}

JLabel助记键

以下代码显示如何使用JLabel来显示另一个组件的助记符。

以下代码显示如何使用JLabel来显示另一个组件的助记符。...

JLabel助记键用下划线显示,用户可以聚焦目标控制通过按Alt键+助记字母。

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
//from   w  ww. j a  v a 2s . co m
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Main {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Label Focus Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JLabel label = new JLabel("Name: ");
    label.setDisplayedMnemonic(KeyEvent.VK_N);
    
    JTextField textField = new JTextField();
    label.setLabelFor(textField);
    
    frame.add(label, BorderLayout.WEST);
    frame.add(textField, BorderLayout.CENTER);

    frame.add(new JButton("Somewhere Else"), BorderLayout.SOUTH);
    frame.setSize(250, 100);
    frame.setVisible(true);
  }
}

禁用JLabel

import java.awt.FlowLayout;
//from  ww  w.  j a  v a 2  s.co m
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main {
  public static void main(String args[]) {
    JFrame f = new JFrame("Label Demo");
    f.setLayout(new FlowLayout());
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JLabel label= new JLabel("www.zijiebao.com");
    label.setEnabled(false);

    f.add(label);
    f.pack();
    f.setVisible(true);
  }
}

JLabel Unicode

import java.awt.GridLayout;
//from ww w  .j av  a 2 s.com
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main {
  public static void main(String args[]) {
    UnicodeJFrame unicodeJFrame = new UnicodeJFrame();
    unicodeJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    unicodeJFrame.setSize(350, 250);
    unicodeJFrame.setVisible(true);
  } 
}

class UnicodeJFrame extends JFrame {
  public UnicodeJFrame() {
    super("Demonstrating Unicode");

    setLayout(new GridLayout(8, 1));

    JLabel englishJLabel = new JLabel("\u0057\u0065\u006C\u0063"
        + "\u006F\u006D\u0065\u0020\u0074\u006F\u0020Unicode\u0021");
    englishJLabel.setToolTipText("This is English");
    add(englishJLabel);

    JLabel chineseJLabel = new JLabel("\u6B22\u8FCE\u4F7F\u7528" + "\u0020\u0020Unicode\u0021");
    chineseJLabel.setToolTipText("This is Traditional Chinese");
    add(chineseJLabel);

    JLabel cyrillicJLabel = new JLabel("\u0414\u043E\u0431\u0440"
        + "\u043E\u0020\u043F\u043E\u0436\u0430\u043B\u043E\u0432"
        + "\u0430\u0422\u044A\u0020\u0432\u0020Unicode\u0021");
    cyrillicJLabel.setToolTipText("This is Russian");
    add(cyrillicJLabel);

    JLabel frenchJLabel = new JLabel("\u0042\u0069\u0065\u006E\u0076"
        + "\u0065\u006E\u0075\u0065\u0020\u0061\u0075\u0020Unicode\u0021");
    frenchJLabel.setToolTipText("This is French");
    add(frenchJLabel);

    JLabel germanJLabel = new JLabel("\u0057\u0069\u006C\u006B\u006F"
        + "\u006D\u006D\u0065\u006E\u0020\u007A\u0075\u0020Unicode\u0021");
    germanJLabel.setToolTipText("This is German");
    add(germanJLabel);

    JLabel japaneseJLabel = new JLabel("Unicode\u3078\u3087\u3045" + "\u3053\u305D\u0021");
    japaneseJLabel.setToolTipText("This is Japanese");
    add(japaneseJLabel);

    JLabel portugueseJLabel = new JLabel("\u0053\u00E9\u006A\u0061"
        + "\u0020\u0042\u0065\u006D\u0076\u0069\u006E\u0064\u006F\u0020" + "Unicode\u0021");
    portugueseJLabel.setToolTipText("This is Portuguese");
    add(portugueseJLabel);

    JLabel spanishJLabel = new JLabel("\u0042\u0069\u0065\u006E"
        + "\u0076\u0065\u006E\u0069\u0064\u0061\u0020\u0061\u0020" + "Unicode\u0021");
    spanishJLabel.setToolTipText("This is Spanish");
    add(spanishJLabel);
  } 
}

JLabel看和感觉

JLabel助记键用下划线显示,用户可以聚焦目标控制通过按Alt键+助记字母。...

属性字符串 对象类型
Label.actionMap ActionMap
Label.background Color
Label.border Border
Label.disabledForeground Color
Label.disabledShadow Color
Label.font Font
Label.foreground Color
LabelUI String

JLabel边框

JLabel label= new JLabel("A default label");
Border border = BorderFactory.createLineBorder(Color.BLACK);
label.setBorder(border);

JLabel拖放

向JLabel组件添加拖放支持

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/*w w  w  .j a va 2 s . c o m*/
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.TransferHandler;

public class Main {
  public static void main(String[] argv) throws Exception {
    JLabel label = new JLabel("Label Text");

    final String propertyName = "text";
    label.setTransferHandler(new TransferHandler(propertyName));

    label.addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent evt) {
        JComponent comp = (JComponent) evt.getSource();
        TransferHandler th = comp.getTransferHandler();

        th.exportAsDrag(comp, evt, TransferHandler.COPY);
      }
    });
  }
}

自定义JLabel

向JLabel组件添加拖放支持...

import java.awt.Graphics;
import java.awt.Rectangle;

import javax.swing.JLabel;

class UnderlinedLabel extends JLabel {
  public UnderlinedLabel() {
    this("");
  }

  public UnderlinedLabel(String text) {
    super(text);
  }

  public void paint(Graphics g) {
    Rectangle r;
    super.paint(g);
    r = g.getClipBounds();
    g.drawLine(0, r.height - getFontMetrics(getFont()).getDescent(), getFontMetrics(getFont())
        .stringWidth(getText()), r.height - getFontMetrics(getFont()).getDescent());
  }
}