确切复制并且答案很好:
Why instance of JLabel shows only 8 lines?
我有一段代码:
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
}
}
此处创建的标签只能正确显示8
行,边框的长度足够长(我需要一个label
边框覆盖其边界但不是这样的。)
任何人都可以帮我制作更多的线条(不建议使用ScrollPane
,因为我的意图不是那样)并创建一个与文本完全僵化的边框?
请检查这个问题,以便更清楚我想要的内容:
答案 0 :(得分:4)
根本不要使用setSize!
而是将组件添加到JFrame的contentPane,在JFrame上调用pack()
,然后调用setVisible(true)
。这样,您就可以让Swing布局管理器决定如何调整大小,以便最佳地显示组件。
答案 1 :(得分:1)
暂时不使用JLabel,但我确信你可以调用setSize - 这会做你喜欢的吗?
答案 2 :(得分:1)
您是否要求边框应位于MyLabel
组件周围?
如果是,请尝试其他布局,例如:frame.setLayout(new FlowLayout());
如果您希望框架不包含额外空格,请使用frame.pack();