Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在框架窗口中添加滚动窗格_Java_Arrays_Jframe_Window_Jscrollpane - Fatal编程技术网

Java 如何在框架窗口中添加滚动窗格

Java 如何在框架窗口中添加滚动窗格,java,arrays,jframe,window,jscrollpane,Java,Arrays,Jframe,Window,Jscrollpane,我想在框架窗口或组合面板中添加滚动窗格 在代码下面,guiFrame.add(滚动窗格)不工作,为什么不工作 如何将滚动窗格添加到comboPanel或GUI框架 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListen

我想在框架窗口或组合面板中添加滚动窗格

在代码下面,
guiFrame.add(滚动窗格)
不工作,为什么不工作

如何将滚动窗格添加到comboPanel或GUI框架

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

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ExtraComboBox {
    private int maxFields = 4; // The max number of fields allowed in the dialog
    JComboBox fruits[] = new JComboBox[maxFields];
    JPanel comboPanel;
    JFrame guiFrame;
    String[] valOptions3 = { "&" };
    String[] valOptions2 = { "|->", "|=>" };
    String[] valOptions1 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    String[] valOptions0 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    String[] fruitOptions1 = { "", "Delay1", "Delay2", "Delay3" };
    JButton addField;
    int count1 = 0;

    JLabel dudel[] = new JLabel[maxFields];
    JComboBox dude2[] = new JComboBox[maxFields];
    String[] valOptions = { "Unknown", "0", "1" };
    String[] s = { "a", "b", "c", "d", "e", "f", "g", "h", "i" };
    private JLabel comboLbl;

    public static void main(String[] args) {
        new ExtraComboBox();
    }

    public ExtraComboBox() {
        guiFrame = new JFrame();

        // make sure the program exits when the frame closes
        guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiFrame.setTitle("ComboBox GUI");
        guiFrame.setSize(350, 350);

        // The first JPanel contains a JLabel and JCombobox
        comboPanel = new JPanel();

        addField = new JButton("Add Field");
        addField.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent event) {
                if (event.getSource().equals(addField)) {
                    if (count1 < maxFields) {
                        comboLbl = new JLabel("Select a relation:");
                        fruits[count1] = new JComboBox<String>(fruitOptions1);
                        MyItemListener2 actionListener2 = new MyItemListener2(count1);
                        fruits[count1].addItemListener(actionListener2);
                        // System.out.println("HI: " + fruits[count1].getParent());
                        dude2[count1] = new JComboBox<String>();
                        System.out.println("ADD FIELDS: " + count1);
                        comboPanel.add(comboLbl);
                        comboPanel.add(fruits[count1]);
                        comboPanel.add(dude2[count1]);
                        guiFrame.validate();
                        guiFrame.repaint();
                        count1++;
                    } else {
                        System.out.println("You reached the maximum of 4 fields.");
                    }
                }
            }
        });

        comboPanel.setLayout(new BoxLayout(comboPanel, BoxLayout.Y_AXIS));
        comboPanel.add(addField);
        // The JFrame uses the BorderLayout layout manager.
        // Put the two JPanels and JButton in different areas.
        guiFrame.add(comboPanel, BorderLayout.NORTH);
        // make sure the JFrame is visible
        guiFrame.setVisible(true);
    }

    class MyItemListener2 implements ItemListener {
        private int index;

        public MyItemListener2(int pIndex) {
            super();
            index = pIndex;
        }

        // This method is called only if a new item has been selected.
        public void itemStateChanged(ItemEvent evt) {

            if (evt.getStateChange() == ItemEvent.SELECTED) {
                // Item was just selected
                System.out.println("COUNTER: " + index);
                System.out.println(evt.getItem());

                dude2[index].removeAllItems();
                switch ((String) evt.getItem()) {
                case "Delay1":
                    for (int i = 0; i < valOptions1.length; i++) {
                        dude2[index].addItem(valOptions1[i]); // dude1 = new JComboBox(valOptions1);
                        System.out.println(valOptions1[i]);
                    }
                    break;
                case "Delay2": 
                    for (int j = 0; j < valOptions2.length; j++) {
                        System.out.println(valOptions2[j]);
                        dude2[index].addItem(valOptions2[j]); // dude1 = new JComboBox(valOptions1);
                    }
                    break;
                case "Delay3":
                    for (int j = 0; j < valOptions3.length; j++) {
                        System.out.println(valOptions3[j]);
                        dude2[index].addItem(valOptions3[j]); // dude1 = new JComboBox(valOptions1);
                    }
                }
            }
        }
    }

}
导入java.awt.BorderLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.ItemEvent;
导入java.awt.event.ItemListener;
导入javax.swing.BoxLayout;
导入javax.swing.JButton;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
公共类体外麻醉箱{
private int maxFields=4;//对话框中允许的最大字段数
JComboBox水果[]=新的JComboBox[maxFields];
JPanel小组;
JFrame-guiFrame;
字符串[]valOptions3={“&”};
字符串[]valOptions2={“|->”,“|=>”};
字符串[]valOptions1={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”};
字符串[]valOptions0={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”};
字符串[]水果选项1={”、“Delay1”、“Delay2”、“Delay3”};
JButton-addField;
int count1=0;
JLabel dudel[]=新JLabel[maxFields];
JComboBox dude2[]=新的JComboBox[maxFields];
字符串[]valOptions={“未知”、“0”、“1”};
字符串[]s={“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”};
私人JLabel comboLbl;
公共静态void main(字符串[]args){
新的ExtraComboBox();
}
公共外OMBOX(){
guiFrame=newjframe();
//确保框架关闭时程序退出
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle(“组合框GUI”);
guiFrame.setSize(350350);
//第一个JPanel包含JLabel和JCombobox
comboPanel=newJPanel();
addField=新的JButton(“添加字段”);
addField.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件){
if(event.getSource().equals(addField)){
if(count1
如何将滚动窗格添加到comboPanel或GUI框架

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

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ExtraComboBox {
    private int maxFields = 4; // The max number of fields allowed in the dialog
    JComboBox fruits[] = new JComboBox[maxFields];
    JPanel comboPanel;
    JFrame guiFrame;
    String[] valOptions3 = { "&" };
    String[] valOptions2 = { "|->", "|=>" };
    String[] valOptions1 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    String[] valOptions0 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    String[] fruitOptions1 = { "", "Delay1", "Delay2", "Delay3" };
    JButton addField;
    int count1 = 0;

    JLabel dudel[] = new JLabel[maxFields];
    JComboBox dude2[] = new JComboBox[maxFields];
    String[] valOptions = { "Unknown", "0", "1" };
    String[] s = { "a", "b", "c", "d", "e", "f", "g", "h", "i" };
    private JLabel comboLbl;

    public static void main(String[] args) {
        new ExtraComboBox();
    }

    public ExtraComboBox() {
        guiFrame = new JFrame();

        // make sure the program exits when the frame closes
        guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiFrame.setTitle("ComboBox GUI");
        guiFrame.setSize(350, 350);

        // The first JPanel contains a JLabel and JCombobox
        comboPanel = new JPanel();

        addField = new JButton("Add Field");
        addField.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent event) {
                if (event.getSource().equals(addField)) {
                    if (count1 < maxFields) {
                        comboLbl = new JLabel("Select a relation:");
                        fruits[count1] = new JComboBox<String>(fruitOptions1);
                        MyItemListener2 actionListener2 = new MyItemListener2(count1);
                        fruits[count1].addItemListener(actionListener2);
                        // System.out.println("HI: " + fruits[count1].getParent());
                        dude2[count1] = new JComboBox<String>();
                        System.out.println("ADD FIELDS: " + count1);
                        comboPanel.add(comboLbl);
                        comboPanel.add(fruits[count1]);
                        comboPanel.add(dude2[count1]);
                        guiFrame.validate();
                        guiFrame.repaint();
                        count1++;
                    } else {
                        System.out.println("You reached the maximum of 4 fields.");
                    }
                }
            }
        });

        comboPanel.setLayout(new BoxLayout(comboPanel, BoxLayout.Y_AXIS));
        comboPanel.add(addField);
        // The JFrame uses the BorderLayout layout manager.
        // Put the two JPanels and JButton in different areas.
        guiFrame.add(comboPanel, BorderLayout.NORTH);
        // make sure the JFrame is visible
        guiFrame.setVisible(true);
    }

    class MyItemListener2 implements ItemListener {
        private int index;

        public MyItemListener2(int pIndex) {
            super();
            index = pIndex;
        }

        // This method is called only if a new item has been selected.
        public void itemStateChanged(ItemEvent evt) {

            if (evt.getStateChange() == ItemEvent.SELECTED) {
                // Item was just selected
                System.out.println("COUNTER: " + index);
                System.out.println(evt.getItem());

                dude2[index].removeAllItems();
                switch ((String) evt.getItem()) {
                case "Delay1":
                    for (int i = 0; i < valOptions1.length; i++) {
                        dude2[index].addItem(valOptions1[i]); // dude1 = new JComboBox(valOptions1);
                        System.out.println(valOptions1[i]);
                    }
                    break;
                case "Delay2": 
                    for (int j = 0; j < valOptions2.length; j++) {
                        System.out.println(valOptions2[j]);
                        dude2[index].addItem(valOptions2[j]); // dude1 = new JComboBox(valOptions1);
                    }
                    break;
                case "Delay3":
                    for (int j = 0; j < valOptions3.length; j++) {
                        System.out.println(valOptions3[j]);
                        dude2[index].addItem(valOptions3[j]); // dude1 = new JComboBox(valOptions1);
                    }
                }
            }
        }
    }

}
将组合面板添加到
JScrollPane
JViewport
,然后将滚动窗格添加到JFrame

//guiFrame.add(comboPanel, BorderLayout.NORTH);
JScrollPane scrollPane = new JScrollPane( comboPanel );
guiFrame.add(scrollPane, BorderLayout.CENTER);

最好将滚动窗格添加到中心,这样它将获得框架的所有可用空间

什么滚动窗格?你说“它不起作用”是什么意思?你期望它做什么,它会做什么?你把相框装在哪里?