2011-12-04 25 views
9

Quiero JListir muchos resultados en JOptionPane; sin embargo, no estoy seguro de cómo agregar una función de desplazamiento en caso de que haya demasiados resultados. ¿Cómo agregaría una barra de desplazamiento a JOptionPane? Cualquier ayuda sería genial.JOptionPane y la función de desplazamiento

Gracias.

Respuesta

22

Aquí hay un ejemplo usando un JTextArea incrustado en un JScrollPane:

JTextArea textArea = new JTextArea("Insert your Text here"); 
JScrollPane scrollPane = new JScrollPane(textArea); 
textArea.setLineWrap(true); 
textArea.setWrapStyleWord(true); 
scrollPane.setPreferredSize(new Dimension(500, 500)); 
JOptionPane.showMessageDialog(null, scrollPane, "dialog test with textarea", 
             JOptionPane.YES_NO_OPTION); 
+0

favor cambia eso al JList :-) – mKorbel

+0

@AndrewThompson acordar un showMessageDialog es más apto para esta situación. – GETah

+0

@mKorbel Sí, una JList debería hacerlo también. El ejemplo que proporcioné aquí es solo para orientación. – GETah

4

puso a los objetos en una de tales componentes JList u otro, caer en un JScrollPane, y poner el JScrollPane en el JOptionPane.

0

que tenía una necesidad similar, un JOptionPane con un desplazamiento TextArea en el que podría escribir cualquiera de mis clases en mi aplicación. Esto fue para proporcionar al usuario información de estado y progreso. Mi enfoque era hacer de esto una clase estática que creaba una instancia una vez y cualquier clase podía llamar a su método de actualización para escribir en ella. A continuación se muestra el código y un pequeño controlador con la esperanza de que alguien ahorre tiempo. Esto podría hacerse no estático, que se ajusta a mis necesidades.

package com.acme.view; 

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JButton; 
import java.awt.BorderLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import com.acme.controller.MyController; 
import com.acme.utils.NonModalMessage; 

public class MyView { 

    private JFrame frame; 
    private int dialogNum = 0; 
    private MyController myCntrlr; 
    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     NonModalMessage.createMesgDialog(); 
     NonModalMessage.updateMessage("Acme Anvil Targeting Progress"); 

     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        MyView window = new MyView(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public MyView() { 
     initialize(); 
    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 250, 200); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     myCntrlr = new MyController(); 

     JButton btnMybutton = new JButton("myButton"); 

     btnMybutton.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       NonModalMessage.setMessageVisible(); 
       if(dialogNum > 0 && dialogNum % 10 == 0){ 
        NonModalMessage.clearMessage(); 
        NonModalMessage.updateMessage("Acme Anvil Targeting Progress"); 
        myCntrlr.someMethod("Controller reports Roadrunner sighted. Message Number: ", dialogNum); 
       } 
       NonModalMessage.getMessage(); 

       NonModalMessage.updateMessage("Message number: " + Integer.toString(dialogNum)); 
       System.out.println("dialogNum: " + dialogNum); 
       dialogNum++; 
      } 
     }); 

     frame.getContentPane().add(btnMybutton, BorderLayout.NORTH); 
    } 


} 

package com.acme.controller; 
import com.acme.utils.NonModalMessage; 

public class MyController { 

    public MyController(){ 

    } 

    public void someMethod(String mystring, int myInt){ 
     NonModalMessage.updateMessage(mystring + " "+ myInt); 
    } 

} 

package com.acme.utils; 
import javax.swing.JDialog; 
import javax.swing.JOptionPane; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.ScrollPaneConstants; 

public class NonModalMessage { 
    private static JTextArea textArea = null; 
    private static JOptionPane oPane = null; 
    private static JDialog dialog  = null; 
    private static JScrollPane myjsPane = null; 
    public NonModalMessage(){} 

    public static void createMesgDialog(){ 

     textArea = new JTextArea(); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 
     myjsPane = new JScrollPane(textArea); 
     myjsPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

     oPane = new JOptionPane(); 
     oPane.add(myjsPane);  

     //final JDialog dialog = pane.createDialog(myPane, "Progress Dialog"); 
     dialog = oPane.createDialog(null, ""); 
     dialog.setTitle("Progress Messages"); 
     dialog.setModal(false); 
     dialog.setSize(400, 250); 
     dialog.setResizable(true); 
     dialog.setAlwaysOnTop(true); 
    } 

    public static void setMessageVisible(){ 
     dialog.setVisible(true); 
    } 

    public static void updateMessage(String newMessage){ 
     String mytext = textArea.getText(); 
     if(mytext.isEmpty()){ 
      textArea.setText(newMessage); 
     } 
     else{ 
      textArea.setText(mytext + "\n" + newMessage); 
     } 

     oPane.setMessage(myjsPane); 
    } 
    public static String getMessage(){ 
     return textArea.getText(); 
    } 

    public static void clearMessage(){ 
     textArea.setText(""); 
     oPane.setMessage(myjsPane); 
    } 

} 
Cuestiones relacionadas