Moh*_*sal 4 java swing jlabel jpanel
我的工作中,我会使用的程序JTextArea,JButton,JLabel和JPanel。
我要实现的逻辑是:用户在给定中键入文本textArea,然后单击button. 单击按钮时,我会从 中检索文本textArea并label使用书面文本(如 中textArea)创建一个并将其显示在panel.
我之前所做的一切都是正确的,但问题出在labeland 上panel。在label上不可见panel。
代码片段是:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
在动态添加新组件后,您需要重新绘制()/验证()您的面板。所以在这之后:
magnet.add(codeLabel);
Run Code Online (Sandbox Code Playgroud)
添加这个:
magnet.validate();
Run Code Online (Sandbox Code Playgroud)
或者
magnet.repaint();
Run Code Online (Sandbox Code Playgroud)
还有一件事是您对磁铁面板使用空布局。所以必须在将 jLable 添加到磁铁面板之前 setBounds() 。所以它变成
public void actionPerformed(ActionEvent e) {
codeLabel=new JLabel(area4Label.getText());
codeLabel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
codeLabel.setBounds(50, 20, 100, 100);
magnet.add(codeLabel);
magnet.repaint();
area4Label.setText("");
}
Run Code Online (Sandbox Code Playgroud)
不建议null用作布局,您应该根据您的要求使用适当的布局,如 BorderLayout 或 GridLayout 甚至更简单的 FlowLayout。
正如@Andrew 所说,使用类似的东西:
codeLabel.setSize(codeLabel.getPreferredSize());
codeLabel.setLocation(50, 20);
Run Code Online (Sandbox Code Playgroud)
代替
codeLabel.setBounds(50, 20, 100, 100);
Run Code Online (Sandbox Code Playgroud)
这将解决 jLabel 的大小问题。
| 归档时间: |
|
| 查看次数: |
17987 次 |
| 最近记录: |