2017-06-18 40 views
1

我试图设计一个弹出窗口来通知接收新的电子邮件。 这是代码:swing - GridBagLayout中的JLabel与长文本

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import javax.swing.ImageIcon; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

/** 
* 
* @author luca 
*/ 
public class Popup extends JDialog { 


    public Popup() { 
     super.setSize(260, 100); 

     this.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 

     gbc.insets = new Insets(5, 5, 5, 5); 


     JLabel header = new JLabel("Hai ricevuto una nuova email"); 
     gbc.gridx = 1; 
     gbc.gridy = 0; 
     gbc.gridheight = 1; 
     gbc.anchor = GridBagConstraints.WEST; 
     add(header, gbc); 

     JLabel mittente = new JLabel("[email protected]"); 
     gbc.gridx = 1; 
     gbc.gridy = 1; 
     gbc.gridheight = 1; 
     add(mittente, gbc); 

     JLabel argomento = new JLabel("info voto esame"); 
     gbc.gridx = 1; 
     gbc.gridy = 2; 
     gbc.gridheight = 1; 
     add(argomento, gbc); 

     JLabel icona = new JLabel(new ImageIcon("img/email.png")); 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.gridheight = 3; 
     gbc.fill = GridBagConstraints.BOTH; 
     add(icona, gbc); 


     this.setLocation(400, 400); 
     this.setUndecorated(true); 
     this.setVisible(true); 
     mittente.setMaximumSize(new Dimension(180, 16)); 
    } 

    public static void main(String args[]){ 
     new Popup(); 
    } 

} 

当标签文本不会太长一切正常,我得到这样的: enter image description here

但是当文本太长,这是我得到: enter image description here

有没有办法得到这样的东西? enter image description here

我发现这个东西别人的质疑,我试图在label.setMaximumSize工作(),我试着写HTML标记的文字......但是毫无效果的。有人能帮我吗?

回答

6

在这种情况下,它有助于将图像的weightx设置为1,而其他所有设置都为0.还有其他各种更改。仔细检查代码以了解更改。

我还建议将全文设置为每个标签的工具提示。如果用户想要查看整个细节,只需将鼠标指向标签即可。

enter image description here

import java.awt.*; 
import java.awt.image.*; 
import javax.swing.*; 

public class Popup extends JDialog { 

    public Popup() { 
     this.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 

     gbc.insets = new Insets(5, 5, 5, 5); 

     JLabel header = new JLabel("Hai ricevuto una nuova email"); 
     gbc.gridx = 1; 
     gbc.gridy = 0; 
     gbc.gridheight = 1; 
     gbc.weightx = 1; 
     gbc.anchor = GridBagConstraints.WEST; 
     add(header, gbc); 

     gbc.weightx = 0; 
     JLabel mittente = new JLabel("[email protected]"); 
     gbc.gridx = 1; 
     gbc.gridy = 1; 
     gbc.gridheight = 1; 
     add(mittente, gbc); 

     JLabel argomento = new JLabel("info voto esame"); 
     gbc.gridx = 1; 
     gbc.gridy = 2; 
     gbc.gridheight = 1; 
     add(argomento, gbc); 

     JLabel icona = new JLabel(new ImageIcon(
       new BufferedImage(40,60,BufferedImage.TYPE_INT_RGB))); 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.gridheight = 3; 
     gbc.fill = GridBagConstraints.BOTH; 
     add(icona, gbc); 

     this.setLocation(400, 400); 
     this.setUndecorated(true); 
     pack(); 
     super.setSize(260, 100); 
     this.setVisible(true); 
     mittente.setMaximumSize(new Dimension(180, 16)); 
    } 

    public static void main(String args[]) { 
     new Popup(); 
    } 
} 
+1

非常感谢,这正是我一直在寻找! – Cilla