Вопрос

привет всем, у меня проблема в моей программе с полосой прокрутки в моем JList, я не могу поместить JScrollPane в свой список, потому что я использую панель вместо контейнера , это мой код, пока все его можно запустить. проблема в том, что если вы введете большое число в количестве раз, в котором выводятся некоторые данные. не смогу увидеть из-за размера моего списка .итак, это код

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MultCen extends JFrame implements ActionListener
{
    public static void main(String args [])
    {
        MultCen e = new MultCen();
        e.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        e.setVisible(true);
        e.setSize(300,450);
    }

    JTextField t1 = new JTextField();
    JTextField t2 = new JTextField();
    JButton b = new JButton("Okay");
    JButton c = new JButton("Clear");
    JList list = new JList();
    JLabel lab = new JLabel();
    DefaultListModel m = new DefaultListModel();

    public MultCen()
    {
        JPanel panel = new JPanel();
        panel.setLayout(null);



        JLabel l = new JLabel("Enter a number :");
        JLabel l1 = new JLabel("How many times :");



        l.setBounds(10,10,130,30);
        l1.setBounds(10,40,130,30);
        t1.setBounds(140,10,130,25);
        t2.setBounds(140,40,130,25);
        b.setBounds(60,90,75,30);
        c.setBounds(150,90,75,30);
        list.setBounds(30,140,220,220);

        panel.add(t1);
        panel.add(t2);
        panel.add(l);
        panel.add(l1);
        panel.add(list);
        panel.add(b);
        panel.add(c);

        getContentPane().add(panel);


        b.addActionListener(this);
        c.addActionListener(this);


    }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == b)
        {
            int t3 = Integer.parseInt(t1.getText());
            int t4 = Integer.parseInt(t2.getText());
            m.addElement("The multiplication Table of "+t3);
            for (int cc =1 ; cc <=t4; cc++ )
            {

                lab.setText(t3+"*"+cc+" = "+(t3*cc));
                m.addElement(lab.getText());
                list.setModel(m);


            }



        }

        if(e.getSource() == c)
        {
            t1.setText("");
            t2.setText("");
            m.removeAllElements();
        }
    }

}
Это было полезно?

Решение

JScrollPane не работает с null Расположение.Воспользуйся BoxLayout или любой другой макет с возможностью изменения размера вместо этого.В этом заключается ограничение setLayout(null).

Другие советы

Используйте менеджеры макета. Здесь вы задали много вопросов, и я уверен, что несколько вы посоветовали не использовать NULL PALLOUT. Опять же вот учебное пособие выкладывание компонентов в контейнере . Научитесь использовать их, поэтому вы не бежите в миллион возможных проблем на дороге впереди. Это вроде проблем является одним из них.

Вот пример того, как вы можете достичь то же самое с менеджерами макета, а также несколько пустых границ для белого пространства.

<Сильные> С помощью менеджера макета

Введите описание изображения здесь

без макета manger

Введите описание изображения здесь

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class MultCen extends JFrame {

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                MultCen e = new MultCen();
                e.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                e.setVisible(true);
                e.pack();
            }
        });

    }

    JTextField t1 = new JTextField(10);
    JTextField t2 = new JTextField(10);
    JButton b = new JButton("Okay");
    JButton c = new JButton("Clear");
    JLabel lab = new JLabel();
    DefaultListModel m = new DefaultListModel();

    public MultCen() {

        JPanel topPanel = new JPanel(new GridLayout(2, 2, 0, 5));
        JLabel l = new JLabel("Enter a number :");
        JLabel l1 = new JLabel("How many times :");
        topPanel.add(l);
        topPanel.add(t1);
        topPanel.add(l1);
        topPanel.add(t2);

        JPanel buttonPanel = new JPanel();
        buttonPanel.add(b);
        buttonPanel.add(c);
        buttonPanel.setBorder(new EmptyBorder(10, 0, 10, 0));

        JList list = new JList();
        JScrollPane scroll = new JScrollPane(list);
        scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scroll.setPreferredSize(new Dimension(300, 300));

        JPanel panel = new JPanel(new BorderLayout());
        panel.add(topPanel, BorderLayout.NORTH);
        panel.add(buttonPanel, BorderLayout.CENTER);
        panel.add(scroll, BorderLayout.SOUTH);
        panel.setBorder(new EmptyBorder(10, 15, 10, 15));

        getContentPane().add(panel);

    }
}
.


побочные заметки

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top