JOptionPane and scroll function

て烟熏妆下的殇ゞ 提交于 2019-12-05 20:15:13

问题


I want to JList a lot of results in a JOptionPane, however, I'm not sure how to add in a scroll function should there be too many results. How would I add a scroll bar to a JOptionPane? Any help would be great.

Thanks.


回答1:


Here is an example using a JTextArea embedded in a 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);



回答2:


Put the objects in a JList or other such component, drop it into a JScrollPane, and put the JScrollPane into the JOptionPane.




回答3:


you can add any JComponent(s) to JOptionPane, including JScrollPane contains JList




回答4:


I had a similar need, a JOptionPane with a Scrolling TextArea that any of my classes across my application could write to. This was to provide the user with status and progress information. My approach was to make this a static class that I instantiated once and any class could call its update method to write to it. Below is the code and a small driver in the hopes it saves someone esle the time. This could be made not static, that just fit my needs.

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

}


来源:https://stackoverflow.com/questions/8375022/joptionpane-and-scroll-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!