2011-12-04 15 views
9

Desidero JList molti risultati in un JOptionPane, tuttavia, non sono sicuro di come aggiungere una funzione di scorrimento in caso di troppi risultati. Come aggiungerei una barra di scorrimento ad un JOptionPane? Qualsiasi aiuto sarebbe grande.Funzione JOptionPane e scroll

Grazie.

risposta

22

Ecco un esempio utilizzando un JTextArea incorporato in 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

si prega di cambiare che al JList :-) – mKorbel

+0

@AndrewThompson Accetto uno showMessageDialog è più adatto per questa situazione. – GETah

+0

@mKorbel Sì, anche JList dovrebbe farlo. L'esempio che ho fornito qui è solo a scopo di guida. – GETah

4

Inserire gli oggetti in un JList o altro componente di questo tipo, rilasciarlo in un JScrollPane e inserire JScrollPane nello JOptionPane.

0

ho avuto una simile esigenza, un JOptionPane con scorrimento TextArea a cui qualsiasi mia classe della mia applicazione potrebbe scrivere. Questo era per fornire all'utente informazioni sullo stato e sui progressi. Il mio approccio era di rendere questa una classe statica che ho istanziato una volta e qualsiasi classe poteva chiamare il suo metodo di aggiornamento per scrivere su di essa. Di seguito è riportato il codice e un piccolo driver nella speranza che qualcuno risparmi l'ora. Questo potrebbe essere reso non statico, che si adatta alle mie esigenze.

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); 
    } 

}