我是新的swing应用程序,我正在开发一个小型桌面应用程序,在运行时创建jlabels并点击每个按钮。Swing桌面java应用程序滚动
问题是当jlabels数量太多时,我需要在jframe中显示一个滚动条,以使用户能够看到所有jlabel(在jframe的高度之后创建的jlabel)。
我试过jscroll窗格和jscroll栏但没用,请提供一个完整的例子。
在此先感谢您的努力。
我是新的swing应用程序,我正在开发一个小型桌面应用程序,在运行时创建jlabels并点击每个按钮。Swing桌面java应用程序滚动
问题是当jlabels数量太多时,我需要在jframe中显示一个滚动条,以使用户能够看到所有jlabel(在jframe的高度之后创建的jlabel)。
我试过jscroll窗格和jscroll栏但没用,请提供一个完整的例子。
在此先感谢您的努力。
似乎为我工作,请发表SSCCE显示具体的问题,是你加你JLabel
的容器,而不是JScrollPane
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
public class JLabelJScrollPaneTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame() {
@Override
public Dimension getPreferredSize() {//size frame purposefully smaller
return new Dimension(100, 100);
}
};
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("WWWWWWWWWoooooorrrrkkkk");
JScrollPane jsp = new JScrollPane(label);
frame.add(jsp);
frame.pack();
frame.setVisible(true);
}
});
}
}
是弹簧想到的唯一的事情UPDATE
我看你说:
(在jframe的高度后创建jlabel)。
因此,我认为它的JFrame是可见的?如果这样:
下面是一个说明如何2秒表示JFrame
的后JLabel
添加到JScrollPane
一个例子,最重要的是添加/移除/更换部件尺寸之后调用revalidate()
和repaint()
在容器上的实例。
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class JLabelJScrollPaneTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JFrame frame = new JFrame() {
@Override
public Dimension getPreferredSize() {
return new Dimension(100, 100);
}
};
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JScrollPane jsp = new JScrollPane();
frame.add(jsp);
frame.pack();
frame.setVisible(true);
Timer t= new Timer(2000, new AbstractAction() {//create timer to add JLabel to scrollPane after 2 seconds
@Override
public void actionPerformed(ActionEvent ae) {
final JLabel label = new JLabel("WWWWWWWWWoooooorrrrkkkk");
jsp.setViewportView(label);
//refelect changes
frame.revalidate();
frame.repaint();
}
});
t.setRepeats(false);
t.start();
}
});
}
}
UPADTE 2
按照评论的轻微变化完全一样的事情:
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class JLabelJScrollPaneTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JFrame frame = new JFrame() {
@Override
public Dimension getPreferredSize() {
return new Dimension(100, 100);
}
};
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel labelPanel = new JPanel(new GridLayout(4, 1));
final JScrollPane jsp = new JScrollPane(labelPanel);
frame.add(jsp);
frame.pack();
frame.setVisible(true);
Timer t = new Timer(2000, new AbstractAction() {//create timer to add JLabel to scrollPane after 2 seconds
@Override
public void actionPerformed(ActionEvent ae) {
final JLabel label = new JLabel("WWWWWWWWWoooooorrrrkkkk");
final JLabel label2 = new JLabel("Try it");
final JLabel label3 = new JLabel("Noooooo reealllly");
final JLabel label4 = new JLabel("Yes");
labelPanel.add(label);
labelPanel.add(label2);
labelPanel.add(label3);
labelPanel.add(label4);
labelPanel.revalidate();
labelPanel.repaint();
}
});
t.setRepeats(false);
t.start();
}
});
}
}
感谢您的回答,但我需要添加在运行时添加的多个jLabel的垂直滚动 – user1931998
@ user1931998请参阅更新2.您需要做的只是更改代码........ –
来吧戴夫, @ user1931998似乎想要一个**完整的**示例。 –
“请提供一个完整的例子” :)鱼通缉不是知识如何钓鱼:)我这种情况下,将需要很长时间才能成为一名优秀的程序员! – 2012-12-27 11:48:15
'“请提供一个完整的例子'' - 来吧,这不是它在这里的工作原理。请说明你做了什么,让我们一起工作。 –