2012-12-27 176 views
-3

我是新的swing應用程序,我正在開發一個小型桌面應用程序,在運行時創建jlabels並點擊每個按鈕。Swing桌面java應用程序滾動

問題是當jlabels數量太多時,我需要在jframe中顯示一個滾動條,以使用戶能夠看到所有jlabel(在jframe的高度之後創建的jlabel)。

我試過jscroll窗格和jscroll欄但沒用,請提供一個完整的例子。

在此先感謝您的努力。

+4

「請提供一個完整的例子」 :)魚通緝不是知識如何釣魚:)我這種情況下,將需要很長時間才能成爲一名優秀的程序員! – 2012-12-27 11:48:15

+3

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

回答

2

似乎爲我工作,請發表SSCCE顯示具體的問題,是你加你JLabel的容器,而不是JScrollPane

enter image description here

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

enter image description here

按照評論的輕微變化完全一樣的事情:

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(); 
      } 
     }); 
    } 
} 
+0

感謝您的回答,但我需要添加在運行時添加的多個jLabel的垂直滾動 – user1931998

+0

@ user1931998請參閱更新2.您需要做的只是更改代碼........ –

+1

來吧戴夫, @ user1931998似乎想要一個**完整的**示例。 –