如何在顶部打印JLabel
?
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SampleFrame extends JFrame {
private JPanel contentPane;
private JPanel q;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SampleFrame frame = new SampleFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public SampleFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel p = new JPanel();
q = new JPanel();
JSlider pine = new JSlider();
contentPane.add(p, BorderLayout.CENTER);
p.add(pine);
contentPane.add(q, BorderLayout.NORTH);
pine.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
JSlider sl = (JSlider)arg0.getSource();
String a = ((Integer)sl.getValue()).toString();
q.add(new JLabel(a));
}
});
}
}
答案 0 :(得分:3)
如何在顶部打印JLabel?
创建JLabel并在最初创建GUI时将其添加到GUI并使JLabel成为实例变量。因此,您只需将标签添加到NORTH,而不是将JPanel添加到NORTH。
然后当ChangeListener触发时,只需使用label.setText(...)
来更改标签的值。
您不希望每次都创建新标签,因为这样您需要重新验证()并重新绘制面板以确保调用布局管理器。
答案 1 :(得分:2)
试试这个......
contentPane.add(q, BorderLayout.NORTH);
final JLabel label = new JLabel(" "); //NEW
q.add(label); //NEW
pine.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
JSlider sl = (JSlider)arg0.getSource();
String a = ((Integer)sl.getValue()).toString();
label.setText(a); //NEW
}
});
答案 2 :(得分:0)
这里的第一个问题是,在pine
添加p
后,您将p
添加到contentPane
。
那么,为什么要添加一个新的JLable evey时间,滑块会改变它的值?只需将JLabel添加到BorderLayout.NORTH
并使用label.setText(String)
方法更改其文本。
希望我能帮忙