【发布时间】:2015-05-18 22:34:05
【问题描述】:
我正在制作一个使用大量构造函数的应用程序,我知道你不能使用 netbeans 的拖放工具来制作构造函数,我认为学习如何编写完全组织的窗口是个好主意,无论如何我读了一本 DEITEL Java 书,其中使用了一种将对象添加到容器的方法,这里是:
private void addobject(Component componente, int column, int row, int width
int height){
//C will be the GridBagConstraints
//And I made a new GridBagLayout called "v"
//My Panel or container is called objcontainer and the LayoutManager is v
c.gridx = column;
c.gridy = row;
c.gridwidth = width;
c.gridheight = height;
v.setConstraints(componente, c);
objcontainer.add(componente);
}
该方法是在构造函数所在的同一个类中声明的,它仅以一个网格分隔。但是当我把它放在最后一个对象的 2 或更多的地方时,它就像我放 1 一样。
我不知道它是不是这样工作的,而且锚也不能完美地工作,除了 LINE START 之外,中心的都失败了。
代码如下,谢谢:
package Windows;
import java.awt.*;
import javax.swing.*;
public class agregaringreso extends JDialog{
private int ingreso;
private String nombreingreso;
private String Frecuencia [] = {"Solo una vez", "Cada semana","Cada 2 semanas", "Cada 3 semanas", "Cada mes,"};
Container contenedor;
JPanel objcontainer;
GridBagLayout esquema;
GridBagConstraints c;
JButton aceptar;
JLabel title;
JLabel ingreso2;
JLabel nombreingreso2;
JLabel frecuencia2;
JTextField ingreso3;
JTextField nombreingreso3;
JComboBox frecuencia3;
private void addobjeto(Component componente, int columna, int fila, int ancho, int alto){
c.gridx = columna;
c.gridy = fila;
c.gridwidth = ancho;
c.gridheight = alto;
esquema.setConstraints(componente, c);
objcontainer.add(componente);
}
public agregaringreso(){
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setTitle("Agregar Nuevo Ingreso - EkPek");
pack();
setResizable(false);
setSize(500, 200);
setLocationRelativeTo(null);
//FASE DE INICIALIZACION
contenedor = getContentPane();
objcontainer = new JPanel();
esquema = new GridBagLayout();
c = new GridBagConstraints();
aceptar = new JButton("Aceptar");
title = new JLabel("Agregar Nuevo Ingreso");
ingreso2 = new JLabel("Monto del Ingreso: ");
nombreingreso2 = new JLabel("Nombre del Ingreso: ");
frecuencia2 = new JLabel("Frecuencia con la cual recibe el ingreso: ");
ingreso3 = new JTextField("Escriba aqui el monto");
nombreingreso3 = new JTextField("Escriba aqui el nombre");
frecuencia3 = new JComboBox(Frecuencia);
//FASE DE ACOMODO
c.anchor = GridBagConstraints.CENTER;
addobjeto(title, 0, 0, 1, 1);
c.anchor = GridBagConstraints.LINE_START;
addobjeto(nombreingreso2 , 0, 4, 1, 1);
addobjeto(nombreingreso3, 1, 4, 1, 1);
addobjeto(ingreso2, 0, 5, 1, 1);
addobjeto(ingreso3, 1, 5, 1, 1 );
addobjeto(frecuencia2, 0 , 6, 1, 1);
addobjeto(frecuencia3, 1, 6, 1, 1);
c.anchor = GridBagConstraints.CENTER;
addobjeto(aceptar,0 ,7 ,1, 1);
contenedor.add(objcontainer);
objcontainer.setLayout(esquema);
setVisible(true);
}
}
【问题讨论】:
-
尝试改用
objcontainer.add(componente, c);。使用setConstraints可能不起作用,因为该组件尚未由GridBagLayout管理(尚未添加) -
没用,它只是在同一行显示所有内容,但感谢您阅读这篇大文章。
-
我可以看到运行代码的结果是什么,但我不知道你在期待什么。尝试发布一些您想要获得的图片。
-
另外,类名应该以大写开头。
-
@user1803551 请不要留下讽刺的 cmets - 解决问题。您可以编辑帖子,使用它并花 30 秒时间让网站变得更好,而不是添加不必要的讽刺和敌意。
标签: java swing layout layout-manager gridbaglayout