好的,所以我做了一个程序,这是GUI输出...

GUI output

java - 为什么JList在我的GUI框架输出中被“剪切”或其他?-LMLPHP

我尝试调整其大小,但没有骰子...不起作用。 jlist的“盒子”仍然以某种方式被切掉……请帮助?

Resized Output

java - 为什么JList在我的GUI框架输出中被“剪切”或其他?-LMLPHP

顺便说一下,这是需要的代码...

import java.awt.GridLayout;
import java.awt.BorderLayout;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JRadioButton;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Order extends JFrame{

JLabel title;
JLabel size;
JLabel top;
JRadioButton b1;
JRadioButton b2;
JRadioButton b3;
JCheckBox c1;
JCheckBox c2;
JCheckBox c3;
JButton process;
ButtonGroup group;
JPanel p1;
JPanel p2;
JPanel p3;
double total;
boolean cb1 = false;
boolean cb2 = false;
boolean cb3 = false;
boolean cheese = false;
boolean tomato = false;
boolean mushroom = false;
String toppings = "Add-on Toppings: ";
double length = 0;
boolean cf = false;
boolean tf = false;
boolean mf = false;
String sizeString;
String num;
String price = "Amount Due: ";
DefaultListModel tops;
double tprice;
String listData[] = new String [3];
JScrollPane pain;

public Order(){

    super ("");

    p1 = new JPanel();

    title = new JLabel("WELCOME TO HAUZ DINNERS");
    p1.add(title);

    add(p1, BorderLayout.NORTH);

    p2 = new JPanel();
    p2.setLayout(new GridLayout(4,2));

    size = new JLabel("Burger Size");
    p2.add(size);

    top = new JLabel("Each Add-on Toppings: $1.25");
    p2.add(top);

    b1 = new JRadioButton("Small: $3.50");
    p2.add(b1);

    b1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            total = 3.50;
            sizeString = "Burger Size: Small";
        }
    });

    c1 = new JCheckBox("Extra Cheese");
    p2.add(c1);

    c1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if(c1.isSelected()){
                cheese = true;
            }
            else{
                cheese = false;
            }

            if(cheese == true){
                length++;
            }
            else{
                length--;
            }
        }
    });

    b2 = new JRadioButton("Medium: $4.50");
    p2.add(b2);

    b2.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            total = 4.50;
            sizeString = "Burger Size: Medium";
        }
    });

    c2 = new JCheckBox("Tomato");
    p2.add(c2);

    c2.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if(c2.isSelected()){
                tomato = true;
            }
            else{
                tomato = false;
            }

            if(tomato == true){
                length++;
            }

            else{
                length--;
            }
        }
    });

    b3 = new JRadioButton("Large: $6.00");
    p2.add(b3);

    b3.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            total = 6.00;
            sizeString = "Burger Size: Large";
        }
    });

    c3 = new JCheckBox("Mushrooms");
    p2.add(c3);

    c3.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if(c3.isSelected()){
                mushroom = true;
            }
            else{
                mushroom = false;
            }

            if(mushroom == true){
                length++;
            }

            else{
                length--;
            }
        }
    });

    group = new ButtonGroup();
    group.add(b1);
    group.add(b2);
    group.add(b3);

    add(p2, BorderLayout.CENTER);

    p3 = new JPanel();

    process = new JButton("Process Order");
    p3.add(process);

    process.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if(cheese == true){
                cf = true;
                if((cf == true)&&(tf != true)&&(mf != true)){
                    toppings = toppings + "Extra Cheese";
                }
                else{
                    toppings = toppings + ", Extra Cheese";
                }
            }
            if(tomato == true){
                tf = true;
                if((cf != true)&&(tf == true)&&(mf != true)){
                    toppings = toppings + "Tomato";
                }
                else{
                    toppings = toppings + ", Tomato";
                }
            }
            if(mushroom == true){
                mf = true;
                if((cf != true)&&(tf != true)&&(mf == true)){
                    toppings = toppings + "Mushrooms";
                }
                else{
                    toppings = toppings + ", Mushrooms";
                }
            }

            tprice = 1.25 * length;

            total = total + tprice;
            num = Double.toString(total);

            price = price + "$" + num;

            listData [0] = sizeString;
            listData [1] = toppings;
            listData [2] = price;

        }
    });
    JList<String> list = new JList<>(listData);
    list.setSelectedIndex(0);
    pain = new JScrollPane(list);

    p3.add(list);

    add(p3, BorderLayout.SOUTH);

}

public static void main(String[]args){

    Order frame = new Order();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(350,220);
    frame.setVisible(true);

}

}

最佳答案

首先,将p3的布局管理器更改为更实用的名称,而不是默认的FlowLayout管理器...

p3 = new JPanel();
p3.setLayout(new BorderLayout());
process = new JButton("Process Order");
p3.add(process, BorderLayout.NORTH);


接下来,确保将JScrollPane添加到容器中,而不仅仅是JList

JList<String> list = new JList<>();
list.setSelectedIndex(0);
list.setVisibleRowCount(3);
pain = new JScrollPane(list);

p3.add(pain, BorderLayout.SOUTH);

add(p3, BorderLayout.SOUTH);


现在,要注意的事情。我添加了list.setVisibleRowCount(3);,它为JList提供了一些大小调整提示。在构造listData时,我还从JList中删除​​了JList,这是因为列表为空,并且JList使用其内容来确定“首选”行大小,这导致了非常小的

最终产生类似...

java - 为什么JList在我的GUI框架输出中被“剪切”或其他?-LMLPHP

现在,当您单击Process Order时,您将需要创建一个ListModel并将其应用于您的JList,这将需要使该JList可用于该按钮的ActionListener,可能是通过使其变为实例字段

10-06 16:20
查看更多