Exact Duplicate and Good answer is there:
Why instance of JLabel shows only 8 lines?
I’d a code snippet:
import java.awt.BorderLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
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;
import javax.swing.border.BevelBorder;
/**
*
* @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 ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//codeLabel=new JLabel(area4Label.getText());
codeLabel=new MyLabel(area4Label.getText());//this is for my new question
codeLabel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
codeLabel.setLocation(50, 20);
codeLabel.setVisible(true);
magnet.add(codeLabel);
area4Label.setText("");
//pack();
}
});
inputPanel.add(createButton);
add(BorderLayout.SOUTH, inputPanel);
//pack();
setSize(640, 480);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new CodeMagnets("Code Magnets");
}
}
class MyLabel extends JLabel{
MyLabel(String text){
super(text);
setBorder(BorderFactory.createLineBorder(Color.BLACK));
}
public static void main(String...args){
String text="<html>"
+"1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>"
+"</html>";//this is the text which is typed in the text box by the user for creating a label
}
}
Here the label created shows only 8 lines properly and the border in enough longer than needed(I need a label with a border covering its boundary but not such a way).
Can anybody help me to make more lines visible(do not suggest to use ScrollPane because my intension is not that) and create a border exactly rigid to the text?
please check this question also to be more clear what i want:
Don’t use setSize at all!
Instead add the component to the JFrame’s contentPane, call
pack()on the JFrame, then callsetVisible(true). This way you let the Swing layout managers decide how to size everything so that components are optimally shown.