[JAVA] - JTable não mostra o nome das colunas

Olá, estou desenvolvendo uma aplicação simples em Java, e estou desenvolvendo uma interface gráfica bem simples usando Java Swing. O problema é que ao criar um JTable as colunas (que já foram criadas e nomeadas) não estão aparecendo junto com os dados. Tentei criar um JScrollPanel e colocar a tabela dentro, mas isso não resolveu meu problema. Segue abaixo um print de como ficou a tabela

Obs: Desenvolvi tudo isso usando a ferramenta drag and drop da aba design. Como eu falei, ainda estou começando com JFrame, minha intenção é apenas fazer uma interface básica

Coloca a JTable em um JScrollPanel que deve funcionar:

frame.add(new JScrollPanel(yourTable));

Foi mal, tinha lido rápido seu post e passei batido na parte em que vc diz já ter tentado o JScrollPanel. Vc consegue postar o código da parte onde a JTable está sendo criada e incluída no frame?

1 curtida

Tudo bem Lucas, eu tentei o que você mandou e ainda assim não deu certo. Segue abaixo o código do JTable

tableTasks = new JTable();
		tableTasks.setToolTipText("");
		tableTasks.setGridColor(new Color(255, 255, 255));
		tableTasks.setRowHeight(40);
		tableTasks.setSelectionBackground(new Color(5, 224, 115));
		tableTasks.setModel(new DefaultTableModel(
			new Object[][] {
				{"nom1", "desc", "notasdaskj", Boolean.TRUE},
				{null, "", null, null},
				{"", null, null, null},
				{"", null, null, null},
				{null, null, null, null},
			},
			new String[] {
				"Nome", "Descri\u00E7\u00E3o", "Notas", "Tarefa Conclu\u00EDda"
			}
		) {
			Class[] columnTypes = new Class[] {
				String.class, String.class, String.class, Boolean.class
			};
			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}
			boolean[] columnEditables = new boolean[] {
				false, false, false, true
			};
			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		});
		tableTasks.setBackground(new Color(4, 168, 87));
		tableTasks.setForeground(new Color(255, 255, 255));
		tableTasks.setFont(new Font("Segoe UI", Font.PLAIN, 14));
		tableTasks.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
		GroupLayout gl_mainPanel2 = new GroupLayout(mainPanel2);
		gl_mainPanel2.setHorizontalGroup(
			gl_mainPanel2.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_mainPanel2.createSequentialGroup()
					.addContainerGap()
					.addComponent(tableTasks, GroupLayout.PREFERRED_SIZE, 447, GroupLayout.PREFERRED_SIZE)
					.addGap(36)
					.addComponent(projetoVazioPanel, GroupLayout.PREFERRED_SIZE, 293, GroupLayout.PREFERRED_SIZE))
		);
		gl_mainPanel2.setVerticalGroup(
			gl_mainPanel2.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_mainPanel2.createSequentialGroup()
					.addGroup(gl_mainPanel2.createParallelGroup(Alignment.TRAILING)
						.addGroup(gl_mainPanel2.createSequentialGroup()
							.addContainerGap()
							.addComponent(tableTasks, GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
						.addGroup(Alignment.LEADING, gl_mainPanel2.createSequentialGroup()
							.addGap(347)
							.addComponent(projetoVazioPanel, GroupLayout.PREFERRED_SIZE, 215, GroupLayout.PREFERRED_SIZE)))
					.addContainerGap())
		);
		mainPanel2.setLayout(gl_mainPanel2);

Obs: “mainPanel2” é o painel onde o JTable está

Posta o código usando o JScrollPanel.

tableTasks = new JTable();
		tableTasks.setToolTipText("");
		tableTasks.setGridColor(new Color(255, 255, 255));
		tableTasks.setRowHeight(40);
		tableTasks.setSelectionBackground(new Color(5, 224, 115));
		tableTasks.setModel(new DefaultTableModel(
			new Object[][] {
				{"nom1", "desc", "notasdaskj", Boolean.TRUE},
				{null, "", null, null},
				{"", null, null, null},
				{"", null, null, null},
				{null, null, null, null},
			},
			new String[] {
				"Nome", "Descri\u00E7\u00E3o", "Notas", "Tarefa Conclu\u00EDda"
			}
		) {
			Class[] columnTypes = new Class[] {
				String.class, String.class, String.class, Boolean.class
			};
			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}
			boolean[] columnEditables = new boolean[] {
				false, false, false, true
			};
			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		});
		tableTasks.setBackground(new Color(4, 168, 87));
		tableTasks.setForeground(new Color(255, 255, 255));
		tableTasks.setFont(new Font("Segoe UI", Font.PLAIN, 14));
		tableTasks.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
		
		// coloquei ele aqui
		frame.add(new JScrollPane(tableTasks));
		
		GroupLayout gl_mainPanel2 = new GroupLayout(mainPanel2);
		gl_mainPanel2.setHorizontalGroup(
			gl_mainPanel2.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_mainPanel2.createSequentialGroup()
					.addContainerGap()
					.addComponent(tableTasks, GroupLayout.PREFERRED_SIZE, 447, GroupLayout.PREFERRED_SIZE)
					.addGap(36)
					.addComponent(projetoVazioPanel, GroupLayout.PREFERRED_SIZE, 293, GroupLayout.PREFERRED_SIZE))
		);

Como vc está usando um gerenciador de layout, acredito que vc deva alterar assim:

.addComponent(
  new JScrollPane(tableTasks), 
  GroupLayout.PREFERRED_SIZE, 447, 
  GroupLayout.PREFERRED_SIZE)
.addGap(36)

E remove essa linha:

frame.add(new JScrollPane(tableTasks));
1 curtida

Fiz dessa forma e infelizmente não deu certo, criei tanto para o setVerticalGroup quanto para o Horizontal

GroupLayout gl_mainPanel2 = new GroupLayout(mainPanel2);
		gl_mainPanel2.setHorizontalGroup(
			gl_mainPanel2.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_mainPanel2.createSequentialGroup()
					.addContainerGap()
					.addComponent(tableTasks, GroupLayout.PREFERRED_SIZE, 447, GroupLayout.PREFERRED_SIZE)
					.addGap(36)
					.addComponent(projetoVazioPanel, GroupLayout.PREFERRED_SIZE, 293, GroupLayout.PREFERRED_SIZE))
					.addComponent(
							new JScrollPane(tableTasks),
							GroupLayout.PREFERRED_SIZE, 447,
							GroupLayout.PREFERRED_SIZE)
					.addGap(36)
		);

Pq está sendo adicionada duas tableTasks?

Posta o código completo da sua tela, provavelmente você está adicionando a mesma JTable em diferentes containers.
Ela deveria ser inserida somente em um JScrollPane