gpt4 book ai didi

Java Swing - JSlider 和 JCombobox 导致运行时错误

转载 作者:行者123 更新时间:2023-12-02 08:34:47 26 4
gpt4 key购买 nike

好的,我将发布这三个类的代码,因为它不太长。

package guiDemonstration;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class TabbedGUI {
//create fields
private JFrame frame;
private JTabbedPane tabbedPane;

//make the following three labels public for access in the GUIEngine class
private JLabel comboLabel;
private JLabel sliderLabel;
private JLabel radioLabel;
private JSlider slider;
private JComboBox combo;
private JPanel comboPanel, sliderPanel, radioPanel;
private String []comboArray;
private JRadioButton radio, radio1, radio2;
private ButtonGroup buttonGroup;

private String comboText = "Please Make a Choice";
private String sliderText = "Move the Slider";
private String radioText = "Choose a Radio Button";

//Create field to hold GUIEngine Class
GUIEngine engine;

// empty constructor
public TabbedGUI(){
}

//method used to construct the gui
private void makeFrame(){
//create the Frame
frame = new JFrame("Example of a Tabbed GUI");

//set the initial size of the frame in pixels
frame.setSize(500, 200);
//add the frame to the contentPane
Container contentPane = frame.getContentPane();

//create an instance of the GUIEngine class
engine = new GUIEngine();

//create an array of size 3 to be used as dropdown values in the combobox
comboArray = new String[3];

//initialise the array
comboArray[0] = "First Choice";
comboArray[1] = "Second Choice";
comboArray[2] = "Third Choice";

//create instance of JComboBox and add array
combo = new JComboBox(comboArray);

//create instance of JSlider
slider = new JSlider();

//creat instance of Button Group
// this ButtonGroup will hold the individual radio buttons
buttonGroup = new ButtonGroup();

radio = new JRadioButton();
radio1 = new JRadioButton();
radio2 = new JRadioButton();

//create instances of JPanel
comboPanel = new JPanel();
sliderPanel= new JPanel();
radioPanel = new JPanel();

//create flowlayout for comboPanel
comboPanel.setLayout(new FlowLayout());

//create instances of labels
comboLabel = new JLabel(comboText);
sliderLabel=new JLabel(sliderText);
radioLabel = new JLabel(radioText);

//add radio buttons to the group
buttonGroup.add(radio);
buttonGroup.add(radio1);
buttonGroup.add(radio2);

//add a border to the button group


//begin creation of the tabbed GUI and add to contentPane
tabbedPane = new JTabbedPane();
contentPane.add(tabbedPane);

frame.add(tabbedPane);

//add instances of JPanel to each tab
tabbedPane.addTab("Combo Box", comboPanel);
tabbedPane.addTab("Slider", sliderPanel);
tabbedPane.addTab("Radio", radioPanel);

//add components to each JPanel of each tab
comboPanel.add(combo);
comboPanel.add(comboLabel);
sliderPanel.add(sliderLabel);
radioPanel.add(radioLabel);
sliderPanel.add(slider);
radioPanel.add(radio);
radioPanel.add(radio1);
radioPanel.add(radio2);

//set a border around the Slider
slider.setBorder(
BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLUE));

// call the method to add the listeners to each component
addListeners();

//by default the frame is set to invisible. Set the frame to visible
frame.setVisible(true);
}

/**
* This method adds listeners to each component
*/
public void addListeners(){

//add actionListeners to each component

combo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
engine.useCombo();
}
});

slider.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
engine.useSlider();
}
});

radio.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
engine.useRadioButtons();
}
});

radio1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
engine.useRadioButtons();
}
});

radio2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
engine.useRadioButtons();
}
});
}

/*
* The following three methods set the text for each
* label on the three individual tabs.
* These methods are called from the GUIEngine Class.
*/

//set the text on the comboLabel
public void setComboLabel(){
String updatedComboText = (String)combo.getSelectedItem();
comboLabel.setText(updatedComboText);
//System.out.println("You selected" + comboText);
}

//set the text on the sliderLabel
public void setSliderLabel(){
sliderLabel.setText("You've moved the slider!");
}

//set the text on the radioLabel
public void setRadioLabel(){
System.out.println("You've selected a radio button!");
}

/**
* This method is used to begin execution of the program
*/
public void runProgram(){
makeFrame();
}
}

第二类:

package guiDemonstration;

public class GUIEngine {

TabbedGUI tg;

//constructor
public GUIEngine(){
tg = new TabbedGUI();
}

public void useCombo(){
//System.out.println("You Used the Combo Box");
tg.setComboLabel();
}

public void useSlider(){
tg.setSliderLabel();
}

public void useRadioButtons(){
//System.out.println("You clicked a radio button");
tg.setRadioLabel();
}
}

还有主要方法:

package guiDemonstration;

public class Controller {
/**
* #This is the main method where program execution begins
* @param args
*/
public static void main(String[] args) {
TabbedGUI tg = new TabbedGUI();
tg.runProgram();
}
}

JCombobox 和 JSlider 会导致运行时错误。代码编译正常,但是当我移动 JSlider 或选择 JComboBox 上的项目时,程序崩溃。

有什么想法吗?

GF

最佳答案

您的 GUIEngine 正在创建自己的 TabbedGUI 实例,而不是使用您在 main 方法中创建的实例。

如果您需要保留 GUIEngine 类,我建议在 makeFrame 中执行此操作

engine = new GUIEngine(this);

然后更改 GUIEngine 构造函数以接受 TabbedGUI 作为参数。不妨也将实例变量设为最终变量。

关于Java Swing - JSlider 和 JCombobox 导致运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com