我是新的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
'「請提供一個完整的例子'' - 來吧,這不是它在這裏的工作原理。請說明你做了什麼,讓我們一起工作。 –