2012-12-27 178 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似乎想要一个**完整的**示例。 –