好的,所以我做了一个程序,这是GUI输出...
GUI output
我尝试调整其大小,但没有骰子...不起作用。 jlist的“盒子”仍然以某种方式被切掉……请帮助?
Resized Output
顺便说一下,这是需要的代码...
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
使用其内容来确定“首选”行大小,这导致了非常小的最终产生类似...
现在,当您单击
Process Order
时,您将需要创建一个ListModel
并将其应用于您的JList
,这将需要使该JList
可用于该按钮的ActionListener
,可能是通过使其变为实例字段