0

我有这个代码:

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;

class Pattern extends JComponent
{
    private JFrame frame;
    private JPanel panelBody;
    private JPanel panelMenu;
    private JPanel panelAll;
    private GridLayout glBody;
    private GridLayout glMenu;
    private BorderLayout bl;
    private ArrayList<JLabel> label;
    private ArrayList<JTextField> tf;
    private ArrayList<JButton> button;
    private ArrayList<JButton> buttonMenu;

    public Pattern()
    {
        label = new ArrayList<JLabel>();
        tf = new ArrayList<JTextField>();
        button = new ArrayList<JButton>();
        buttonMenu = new ArrayList<JButton>();
    }

    public void createFrame(String title)
    {
        this.frame = new JFrame(title);
        frame.setSize(1500,1500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setResizable(true);
    }

    public JFrame getFrame()
    {
        return this.frame;
    }

    public void setBorderLayout()
    {
        this.bl = new BorderLayout();
    }

    public BorderLayout getBorderLayout()
    {
        return this.bl;
    }

    public void setGridLayoutBody(int a, int b)
    {
        glBody = new GridLayout(a,b);
    }

    public void setGridLayoutMenu(int a, int b)
    {
        glMenu = new GridLayout(a,b);
    }

    public GridLayout getGridLayoutBody()
    {
        return this.glBody;
    }

    public GridLayout getGridLayoutMenu()
    {
        return this.glMenu;
    }

    public void createPanel()
    {
        this.panelAll = new JPanel();
        this.panelAll.setLayout(this.getBorderLayout());
        //this.panelAll.add(this.panelBody);
    }

    public void createPanelBody()
    {
        this.panelBody = new JPanel();
        //this.panelMenu.setLayout(this.getBorderLayout());
        this.panelBody.setLayout(this.getGridLayoutBody());
    }

    public void createPanelMenu()
    {
        this.panelMenu = new JPanel();
        //this.panelMenu.setLayout(this.getBorderLayout());
        this.panelMenu.setLayout(this.getGridLayoutMenu());
    }

    public JPanel getPanelBody()
    {
        return this.panelBody;
    }

    public JPanel getPanelMenu()
    {
        return this.panelMenu;
    }

    public JPanel getPanel()
    {
        return this.panelAll;
    }

    public void addLabel(JLabel l)
    {
        this.label.add(l);
        this.panelBody.add(l);
    }

    public ArrayList<JLabel> getLabel()
    {
        return this.label;
    }

    public void addTextField()
    {
        this.panelBody.add(new JTextField());
    }

    public ArrayList<JTextField> getTF()
    {
        return this.tf;
    }

    public void addButton(JButton b)
    {
        this.button.add(b);
        this.panelBody.add(b);
    }

    public void addButtonMenu(JButton b)
    {
        this.buttonMenu.add(b);
        this.panelMenu.add(b);
    }

    public ArrayList<JButton> getButton()
    {
        return this.button;
    }

    public void createMenu()
    {
        this.createPanelMenu();
        this.setGridLayoutMenu(16,1);
        this.panelMenu.setLayout(this.getGridLayoutMenu());
        this.addButtonMenu(new JButton("K-Nearest Table Classifier"));
        this.addButtonMenu(new JButton("Heaviside"));
        this.addButtonMenu(new JButton("Forward Pass"));
        this.addButtonMenu(new JButton("Backward Pass"));
        this.addButtonMenu(new JButton("Naive"));
    }

    public void addToPanel()
    {
        this.panelAll.add("West", this.panelMenu);
        this.panelAll.add("North", this.panelBody);
    }

}

class MainPattern
{
    public static void main(String[] args)
    {
        Pattern knear = new Pattern();

        knear.createFrame("K-Nearest Clasifier");

        knear.setBorderLayout();

        knear.setGridLayoutBody(2,2);

        knear.createPanel();

        knear.createPanelBody();

        knear.createMenu();

        knear.addLabel(new JLabel("K = "));

        knear.addTextField();

        knear.addButton(new JButton("Calculate!"));

        knear.addButton(new JButton("Reset!"));

        knear.addToPanel();

        knear.getFrame().setContentPane(knear.getPanel());
    }
}

我不知道为什么,每次我尝试将文本字段添加到框架时,输出都会是空框架。但是,如果不向框架添加文本字段(只需添加标签或按钮),它就可以完美地工作。我的代码有什么问题?然后,我想知道Java中的JTextField和TextField有什么区别?非常感谢。

4

1 回答 1

2

问题是,在向其添加任何内容之前,您已将框架设置为可见。

在可能的情况下,您应该始终在显示框架之前设置您的 UI。

在您的情况下,只需在解决问题knear.getFrame().invalidate();后调用knear.getFrame().setContentPane(knear.getPanel());

更新

你也可以包括一个repaint只是为了确定;)

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;

class Pattern extends JComponent
{
    private JFrame frame;
    private JPanel panelBody;
    private JPanel panelMenu;
    private JPanel panelAll;
    private GridLayout glBody;
    private GridLayout glMenu;
    private BorderLayout bl;
    private ArrayList<JLabel> label;
    private ArrayList<JTextField> tf;
    private ArrayList<JButton> button;
    private ArrayList<JButton> buttonMenu;

    public Pattern()
    {
        label = new ArrayList<JLabel>();
        tf = new ArrayList<JTextField>();
        button = new ArrayList<JButton>();
        buttonMenu = new ArrayList<JButton>();
    }

    public void createFrame(String title)
    {
        this.frame = new JFrame(title);
        frame.setSize(1500,1500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setResizable(true);
    }

    public JFrame getFrame()
    {
        return this.frame;
    }

    public void setBorderLayout()
    {
        this.bl = new BorderLayout();
    }

    public BorderLayout getBorderLayout()
    {
        return this.bl;
    }

    public void setGridLayoutBody(int a, int b)
    {
        glBody = new GridLayout(a,b);
    }

    public void setGridLayoutMenu(int a, int b)
    {
        glMenu = new GridLayout(a,b);
    }

    public GridLayout getGridLayoutBody()
    {
        return this.glBody;
    }

    public GridLayout getGridLayoutMenu()
    {
        return this.glMenu;
    }

    public void createPanel()
    {
        this.panelAll = new JPanel();
        this.panelAll.setLayout(this.getBorderLayout());
        //this.panelAll.add(this.panelBody);
    }

    public void createPanelBody()
    {
        this.panelBody = new JPanel();
        //this.panelMenu.setLayout(this.getBorderLayout());
        this.panelBody.setLayout(this.getGridLayoutBody());
    }

    public void createPanelMenu()
    {
        this.panelMenu = new JPanel();
        //this.panelMenu.setLayout(this.getBorderLayout());
        this.panelMenu.setLayout(this.getGridLayoutMenu());
    }

    public JPanel getPanelBody()
    {
        return this.panelBody;
    }

    public JPanel getPanelMenu()
    {
        return this.panelMenu;
    }

    public JPanel getPanel()
    {
        return this.panelAll;
    }

    public void addLabel(JLabel l)
    {
        this.label.add(l);
        this.panelBody.add(l);
    }

    public ArrayList<JLabel> getLabel()
    {
        return this.label;
    }

    public void addTextField()
    {
        this.panelBody.add(new JTextField());
    }

    public ArrayList<JTextField> getTF()
    {
        return this.tf;
    }

    public void addButton(JButton b)
    {
        this.button.add(b);
        this.panelBody.add(b);
    }

    public void addButtonMenu(JButton b)
    {
        this.buttonMenu.add(b);
        this.panelMenu.add(b);
    }

    public ArrayList<JButton> getButton()
    {
        return this.button;
    }

    public void createMenu()
    {
        this.createPanelMenu();
        this.setGridLayoutMenu(16,1);
        this.panelMenu.setLayout(this.getGridLayoutMenu());
        this.addButtonMenu(new JButton("K-Nearest Table Classifier"));
        this.addButtonMenu(new JButton("Heaviside"));
        this.addButtonMenu(new JButton("Forward Pass"));
        this.addButtonMenu(new JButton("Backward Pass"));
        this.addButtonMenu(new JButton("Naive"));
    }

    public void addToPanel()
    {
        this.panelAll.add("West", this.panelMenu);
        this.panelAll.add("North", this.panelBody);
    }

}

class MainPattern
{
    public static void main(String[] args)
    {
        Pattern knear = new Pattern();

        knear.createFrame("K-Nearest Clasifier");

        knear.setBorderLayout();

        knear.setGridLayoutBody(2,2);

        knear.createPanel();

        knear.createPanelBody();

        knear.createMenu();

        knear.addLabel(new JLabel("K = "));

        knear.addTextField();

        knear.addButton(new JButton("Calculate!"));

        knear.addButton(new JButton("Reset!"));

        knear.addToPanel();

        knear.getFrame().setContentPane(knear.getPanel());
        knear.getFrame().invalidate();
        knear.getFrame().repaint();
    }
}
于 2013-04-27T09:59:07.953 回答