Olá, estou fazendo um programa com o qual preciso colocar uma TabbedPane no painel centro do container, porém quando eu faço isso, fica um Borrão na parte de baixo, como se a parte sul do Container sobrescrevesse a parte Centro (lembrando que é um borderLayout), entretanto, eu não adicionei nenhum Painel Sul, e não faço ideia do que esteja atrapalhando, segue o código:
package Cadastra;
import Controla.TableModel;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableColumn;
import javax.swing.text.MaskFormatter;
/**
*
* @author Thomas
*/
public class CadastraVerbas extends JDialog {
JRadioButton rbHora = new JRadioButton("Cálculo por Hora");
JRadioButton rbValor = new JRadioButton("Cálculo por Valor");
JRadioButton rbFgts = new JRadioButton("FGTS s/ Pacto");
JRadioButton rbIndeni = new JRadioButton("Indenizações");
JRadioButton rbInss = new JRadioButton("INSS");
JRadioButton rbSeguro = new JRadioButton("Seguro Desemprego");
JCheckBox cbAbaterValor = new JCheckBox("Abater Valores Pagos Mês a Mês");
JCheckBox cbOmitir = new JCheckBox("Omitir na Impressão os Meses com Valor Zerado");
JCheckBox cbAbaterTot = new JCheckBox("Abater o totalNegativo da Verba no Resumo Geral");
ButtonGroup bgFora = new ButtonGroup();
JTextField tfNomeVerb = new JTextField(10);
JFormattedTextField tfPerDe;
JFormattedTextField tfPerAte;
MaskFormatter datas;
JTabbedPane tbFora = new JTabbedPane();
JTabbedPane tbHoras = new JTabbedPane();
JTabbedPane tbValor = new JTabbedPane();
JTabbedPane tbFgts = new JTabbedPane();
BorderLayout Border = new BorderLayout();
GridLayout Gl6c1 = new GridLayout(6, 1);
GridLayout Gl4c1 = new GridLayout(4, 1);
GridLayout Gl1c2 = new GridLayout(1, 2);
GridLayout Gl2c1 = new GridLayout(2, 1);
GridLayout Gl3c1 = new GridLayout(3, 1);
GridLayout Gl1c3 = new GridLayout(1, 3);
GridLayout Gl1c1 = new GridLayout(1, 1);
FlowLayout flE = new FlowLayout(FlowLayout.LEFT);
FlowLayout flC = new FlowLayout(FlowLayout.CENTER);
FlowLayout flD = new FlowLayout(FlowLayout.RIGHT);
JPanel pnN = new JPanel();
JPanel pnNC1 = new JPanel(Gl1c2);
JPanel pnNC1C1 = new JPanel(Gl3c1);
JPanel pnNC1C1L1 = new JPanel(flE);
JPanel pnNC1C1L2 = new JPanel(flE);
JPanel pnNC1C1L3 = new JPanel(flE);
JPanel pnNC1C2 = new JPanel(Gl3c1);
JPanel pnNC1C2L1 = new JPanel(flE);
JPanel pnNC1C2L2 = new JPanel(flE);
JPanel pnNC1C2L3 = new JPanel(flE);
JPanel pnNC2 = new JPanel(Gl4c1);
JPanel pnNC2L1 = new JPanel(Gl1c2);
JPanel pnNC2L1C1 = new JPanel(flD);
JPanel pnNC2L1C2 = new JPanel(flE);
JPanel pnNC2L2 = new JPanel(flE);
JPanel pnNC2L3 = new JPanel(flE);
JPanel pnNC2L4 = new JPanel(flE);
JPanel pnNC3 = new JPanel(Gl2c1);
JPanel pnNC3L1 = new JPanel(Gl1c2);
JPanel pnNC3L1C1 = new JPanel(flD);
JPanel pnNC3L1C2 = new JPanel(flE);
JPanel pnNC3L2 = new JPanel(Gl1c2);
JPanel pnNC3L2C1 = new JPanel(flD);
JPanel pnNC3L2C2 = new JPanel(flE);
JPanel pnC = new JPanel(Gl1c1);
JPanel pnCHor = new JPanel(Border);
JPanel pnCValo = new JPanel(Border);
JPanel pnCFgts = new JPanel(Border);
JPanel pnCInss = new JPanel(Border);
JPanel pnCInden = new JPanel(Border);
JPanel pnCSegur = new JPanel(Border);
JPanel pnCHorBase = new JPanel(Gl2c1);
JPanel pnCHorBaseS = new JPanel(Gl1c3);
JPanel pnCHorBaseSC1 = new JPanel(flC);
JPanel pnCHorBaseSC2 = new JPanel(flC);
JPanel pnCHorBaseSC3 = new JPanel(flC);
JPanel pnCHorConv = new JPanel();
JPanel pnCHorVal = new JPanel();
JPanel pnCHorFer = new JPanel();
JPanel pnCHor13 = new JPanel();
JPanel pnCHorAvi = new JPanel();
JPanel pnCHorSaldo = new JPanel();
JPanel pnCValBase = new JPanel();
JPanel pnCValConv = new JPanel();
JPanel pnCValVal = new JPanel();
JPanel pnCValFer = new JPanel();
JPanel pnCVal13 = new JPanel();
JPanel pnCValAvi = new JPanel();
JPanel pnCValSaldo = new JPanel();
Container cp;
JTable tb1 = new JTable(new TableModel());
JScrollPane sctb1 = new JScrollPane(tb1);
JButton btAddCol = new JButton("Adicionar Colunas");
JButton btRemCol = new JButton("Remover Colunas");
JButton btAtualCol = new JButton("Atualizar");
private List<JCheckBox> checkboxes = new ArrayList<JCheckBox>();
public CadastraVerbas() {
try {
datas = new MaskFormatter("**/**/****");
datas.setValidCharacters("0123456789");
} catch (ParseException P) {
P.printStackTrace();
}
tfPerAte = new JFormattedTextField(datas);
tfPerDe = new JFormattedTextField(datas);
tfPerAte.setColumns(6);
tfPerDe.setColumns(6);
setModal(true);
cp = getContentPane();
cp.setLayout(Border);
setSize(850, 600);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setTitle("Cadastro de Verbas e Reflexos");
pnNC1C1L1.add(rbHora);
pnNC1C1L2.add(rbValor);
pnNC1C1L3.add(rbFgts);
pnNC1C2L2.add(rbIndeni);
pnNC1C2L1.add(rbInss);
pnNC1C2L3.add(rbSeguro);
bgFora.add(rbHora);
bgFora.add(rbValor);
bgFora.add(rbFgts);
bgFora.add(rbIndeni);
bgFora.add(rbInss);
bgFora.add(rbSeguro);
rbHora.setSelected(true);
pnNC1C1.add(pnNC1C1L1);
pnNC1C1.add(pnNC1C1L2);
pnNC1C1.add(pnNC1C1L3);
pnNC1C2.add(pnNC1C2L1);
pnNC1C2.add(pnNC1C2L2);
pnNC1C2.add(pnNC1C2L3);
//
pnNC1.add(pnNC1C1);
pnNC1.add(pnNC1C2);
//
pnNC2L1C1.add(new JLabel("Nome das Verbas: "));
pnNC2L1C2.add(tfNomeVerb);
pnNC2L1.add(pnNC2L1C1);
pnNC2L1.add(pnNC2L1C2);
pnNC2L2.add(cbAbaterValor);
pnNC2L3.add(cbAbaterTot);
pnNC2L4.add(cbOmitir);
pnNC2.add(pnNC2L1);
pnNC2.add(pnNC2L2);
pnNC2.add(pnNC2L3);
pnNC2.add(pnNC2L4);
//
pnNC3L1C1.add(new JLabel("De: "));
pnNC3L1C2.add(tfPerDe);
pnNC3L1.add(pnNC3L1C1);
pnNC3L1.add(pnNC3L1C2);
pnNC3L2C1.add(new JLabel("Até: "));
pnNC3L2C2.add(tfPerAte);
pnNC3L2.add(pnNC3L2C1);
pnNC3L2.add(pnNC3L2C2);
pnNC3.add(pnNC3L1);
pnNC3.add(pnNC3L2);
pnN.add(pnNC1);
pnN.add(pnNC2);
pnN.add(pnNC3);
pnCHorBase.add(sctb1);
pnCHorBaseSC1.add(btAddCol);
pnCHorBaseSC2.add(btRemCol);
pnCHorBaseSC3.add(btAtualCol);
pnCHorBaseS.add(pnCHorBaseSC1);
pnCHorBaseS.add(pnCHorBaseSC2);
pnCHorBaseS.add(pnCHorBaseSC3);
pnCHorBase.add(pnCHorBaseS);
tbHoras.add(pnCHorBase, "Base de Cálculo");
tbHoras.add(pnCHorConv, "Conversão");
tbHoras.add(pnCHorVal, "Valor Pago");
tbHoras.add(pnCHorFer, "Férias");
tbHoras.add(pnCHor13, "13º Salário");
tbHoras.add(pnCHorAvi, "Aviso Prévio");
tbHoras.add(pnCHorSaldo, "Saldo Salário");
tbValor.add(pnCValBase, "Base de Cálculo");
tbValor.add(pnCValConv, "Conversão");
tbValor.add(pnCValVal, "Valor Pago");
tbValor.add(pnCValFer, "Férias");
tbValor.add(pnCVal13, "13º Salário");
tbValor.add(pnCValAvi, "Aviso Prévio");
tbValor.add(pnCValSaldo, "Saldo Salário");
// pnCHor.add(tbHoras);
// pnCValo.add(tbValor);
//
tbFora.add(tbHoras, "Horas Extras");
tbFora.add(tbValor, "Valores");
tbFora.add(pnCFgts, "FGTS s/ Pacto");
tbFora.add(pnCInss, "INSS");
tbFora.add(pnCInden, "Indenizações");
tbFora.add(pnCSegur, "Seguro Desemprego");
tbFora.setEnabledAt(0, true);
tbFora.setEnabledAt(1, false);
tbFora.setEnabledAt(2, false);
tbFora.setEnabledAt(3, false);
tbFora.setEnabledAt(4, false);
tbFora.setEnabledAt(5, false);
//
pnC.add(tbFora);
// pnCHorBaseS.add();
cp.add(pnN, BorderLayout.NORTH);
cp.add(pnC, BorderLayout.CENTER);
btAddCol.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TableColumn tx = new TableColumn(tb1.getColumnCount());
int selected = tb1.getSelectedColumn();
// tb1.addColumn(tx);//adiciona coluna
// tb1.removeColumn(tb1.getColumnModel().getColumn(selected));//remove coluna
}
});
rbHora.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 6; i++) {
tbFora.setEnabledAt(i, false);
}
tbFora.setSelectedIndex(0);
tbFora.setEnabledAt(0, true);
}
});
rbValor.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 6; i++) {
tbFora.setEnabledAt(i, false);
}
tbFora.setSelectedIndex(1);
tbFora.setEnabledAt(1, true);
}
});
rbFgts.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 6; i++) {
tbFora.setEnabledAt(i, false);
}
tbFora.setSelectedIndex(2);
tbFora.setEnabledAt(2, true);
}
});
rbInss.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 6; i++) {
tbFora.setEnabledAt(i, false);
}
tbFora.setSelectedIndex(3);
tbFora.setEnabledAt(3, true);
}
});
rbIndeni.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 6; i++) {
tbFora.setEnabledAt(i, false);
}
tbFora.setSelectedIndex(4);
tbFora.setEnabledAt(4, true);
}
});
rbSeguro.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 6; i++) {
tbFora.setEnabledAt(i, false);
}
tbFora.setSelectedIndex(5);
tbFora.setEnabledAt(5, true);
}
});
setLocationRelativeTo(null);
setVisible(true);
}
}
Além disso, quando eu tento adicionar o “pnC” em outro lugar do container que não seja o centro, dá erro de StackOverFlow, o que poderia ser?
OBS: estou com meu Model de JTable, utilizando AbstractTableModel e, os botões ainda não fazem nada, mas isso eu resolvo, o meu problema é a questão de um painel bloqueando a visão mesmo,
e para melhor entendimento, por uma questão de estética tenho tantos JPanels, sendo que pnNC1L1C1 significa: painel norte, coluna1, linha1, coluna1
Table Model:
package TableModels;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
/**
*
* @author Thomas
*/
public class TableModelHorBase extends AbstractTableModel{
public static final int DATA=0;
public static final int TOTAL=1;
public static final int DIVISOR=2;
public static final int VALOR_POR_HORA=3;
ArrayList<String> colName=new ArrayList<>();
@Override
public int getRowCount() {
return 6; //To change body of generated methods, choose Tools | Templates.
}
@Override
public int getColumnCount() {
return 4; //To change body of generated methods, choose Tools | Templates.
}
public void setCol(String col,int loc){
colName.add(loc,col);
}
public String getColumnName(int col){
colName.add("Data");
colName.add("Total");
colName.add("Divisor");
colName.add("Valor por Hora");
return colName.get(col);
}
@Override
public Object getValueAt(int row, int col) {
if(col==DATA){
return "data, " +" linha: "+String.valueOf(row);
}
else if(col==TOTAL){
return "TOTAL, "+ "linha: "+String.valueOf(row);
}
else if(col==DIVISOR){
return "DIVISOR, "+ "linha: "+String.valueOf(row);
}
else if(col==VALOR_POR_HORA){
return "VALOR_POR_HORA, "+ "linha: "+String.valueOf(row);
}
return "falha";
}
@Override
public boolean isCellEditable(int row, int col){
return true;
}
public void remover(int col){
}
}