Java changeListener不适用于JSlider
如何在顶部打印Java changeListener不适用于JSlider,java,swing,jslider,Java,Swing,Jslider,如何在顶部打印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.Chan
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));
}
});
}
}
如何在顶部打印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));
}
});
}
}
创建JLabel并在最初创建GUI时将其添加到GUI中,并将JLabel作为实例变量。因此,您只需将标签添加到北部,而不是将JPanel添加到北部
然后,当ChangeListener启动时,您只需使用label.setText(…)
来更改标签的值
您不希望每次都创建新标签,因为需要重新验证()并重新绘制面板,以确保调用布局管理器
如何在顶部打印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));
}
});
}
}
创建JLabel并在最初创建GUI时将其添加到GUI中,并将JLabel作为实例变量。因此,您只需将标签添加到北部,而不是将JPanel添加到北部
然后,当ChangeListener启动时,您只需使用label.setText(…)
来更改标签的值
您不希望每次都创建一个新标签,因为需要重新验证()并重新绘制面板,以确保已调用布局管理器。试试这个
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
}
});
试试这个
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
}
});
这里的第一个问题是,在将
p
添加到contentPane
之后,将pine
添加到p
那么,为什么每次滑块改变其值时都要添加新的JLable?只需将JLabel添加到BorderLayout.NORTH
,并使用label.setText(String)
方法更改其文本即可。希望我能提供帮助这里的第一个问题是,在将
p
添加到contentPane
之后,您将pine
添加到p
。那么,为什么每次滑块改变其值时都要添加新的JLable?只需将JLabel添加到
BorderLayout.NORTH
,并使用label.setText(String)
方法更改其文本即可。希望我能帮忙