2011-12-01 55 views
0

下面的代碼片段:爲什麼JLabel的實例只顯示8行?

import java.awt.BorderLayout; 
import java.awt.HeadlessException; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.ScrollPaneConstants; 

/** 
* 
* @author mohammadfaisal 
* http://ermohammadfaisal.blogspot.com 
* http://facebook.com/m.faisal6621 
* 
*/ 
public class CodeMagnets extends JFrame{ 
    private JTextArea area4Label; 
    private JLabel codeLabel; 
    private JButton createButton; 
    private JPanel magnet; 

    public CodeMagnets(String title) throws HeadlessException { 
    super(title); 
    magnet=new JPanel(null); 
    JScrollPane magnetScroller=new JScrollPane(magnet); 
    magnetScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    magnetScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    add(BorderLayout.CENTER, magnetScroller); 
    JPanel inputPanel=new JPanel(); 
    area4Label=new JTextArea(5, 30); 
    area4Label.setTabSize(4); 
    JScrollPane textScroller=new JScrollPane(area4Label); 
    inputPanel.add(textScroller); 
    createButton=new JButton("Create code magnet"); 
    createButton.addActionListener(new MyButtonListener()); 
    inputPanel.add(createButton); 
    add(BorderLayout.SOUTH, inputPanel); 
    //pack(); 
    setSize(640, 480); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    class MyButtonListener implements ActionListener{ 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     codeLabel=new CodeLabel(area4Label.getText()); 
     codeLabel.setSize(getPreferredSize()); 
     codeLabel.setLocation(10, 10); 
     magnet.add(codeLabel); 
     magnet.repaint(); 
    } 
    } 

    public static void main(String[] args) { 
    new CodeMagnets("Code Magnets"); 
    } 
} 

..

class CodeLabel extends JLabel{ 
    int initX; 
    int initY; 
    int screenX; 
    int screenY; 
    public CodeLabel(String title){ 
    super(title); 
    addMouseListener(new MouseAdapter() { 
     @Override 
     public void mousePressed(MouseEvent e){ 
      screenX=e.getXOnScreen(); 
      screenY=e.getYOnScreen(); 
      initX=getX(); 
      initY=getY(); 
     } 
    }); 
    addMouseMotionListener(new MouseMotionAdapter() { 
     @Override 
     public void mouseDragged(MouseEvent e){ 
      int deltaX=e.getXOnScreen()-screenX; 
      int deltaY=e.getYOnScreen()-screenY; 
      setLocation(initX+deltaX, initY+deltaY); 
     } 
    }); 
    setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
    } 
} 

這裏標記產生過大而寬邊框。我希望它更小,並且它必須顯示我想要的行數(通過使用html創建標籤)。

Screen shot of the output

幫我出去!

+2

嘗試附加截圖到您的問題。另外,你確定它是大而寬的邊界嗎?如果你在一個太大的容器中使用它,它可能就是元素本身。你嘗試過哪些佈局? –

+0

@ user309483:我添加了屏幕截圖。該'label'使用'html'創建,並在文本區域鍵入的文本是「' 這是一個標籤
使用HTML創建的。
其邊框太大

它清楚地顯示只有8行。
所有其他行被修剪
正如你
可以在這種情況下看到
這是它 '」 –

+0

@ user309483:。標籤是'draggable'並在'panel'補充所以我'使佈局'null'。 –

回答

1

在您的按鈕監聽器,你設置你的新CodeLabel

codeLabel.setSize(getPreferredSize()); 

的大小在這種代碼的情況下,getPreferredSize()是呼籲CodeMagnets實例。我認爲這應該是:

codeLabel.setSize(codeLabel.getPreferredSize()); 
+0

thnx ...這很簡單 –

相關問題