prob. em java...

_[D]4rk$h0t_

Power Member
È assim pessoal o prof. deu-nos um trabalho e durante a realizaçao deste deparei-me com um problema em passar uma variavel de uma classe para outra.. vou por aki um pouco de codigo(inventado agora) so para demonstrar o meu problema:

public class Main{

public Main(){
}

void salvar(int x){
}
}

public class insert{

public insert(){
int abc = 123;
salvar(abc);
}
}

tipo o meu problema é que ele na classe insert nao reconhece o método salvar.. e nao posso alterar o construtor da classe Main :/ Espero por alguma soluçao "engenhosa".

Cumps.
 
Tens que declarar um objecto do tipo Main para poderes chamar um método dessa class.

Umas coisa do Genero:

Código:
Main main = new Main();
main.salvar(abc);


Isto assunto tem a ver com a manipulação de objectos, convém perceberes bém como estas coisas funcionam para conseguires avançar. Não é nada de complicado mas convém teres isso bem presente.
 
Tens que declarar um objecto do tipo Main para poderes chamar um método dessa class.

Umas coisa do Genero:

Código:
Main main = new Main();
main.salvar(abc);


Isto assunto tem a ver com a manipulação de objectos, convém perceberes bém como estas coisas funcionam para conseguires avançar. Não é nada de complicado mas convém teres isso bem presente.

pois só que tipo a classe Main é uma "janela".. nao posso criar objectos dakele tipo.. xD

EDIT: se fosse só isso eu tinha feito -.-''
 
ok... mas é um bocado.. tipo vou tentar explicar o programa.. e por aki o enunciado do problema..

Trabalho


Pretende-se que construas um programa em Java que deverá ter o seguinte aspecto:



A constituição do Menu 1 e do Menu 2 é a seguinte:


Nenhum dos itens do menu terá acção.

O objecto Livros tem as seguintes propriedades: id_livro, nome_livro e assunto. Os elementos adicionados na JList foram adicionados manualmente e não usando a Base de Dados.

No layout é possível ver 3 botões:

a) Botão inserir. Quando clicamos neste botão irá surgir uma nova janela com o seguinte aspecto:



Após inserir os dados, carregamos no botão gravar que terá 2 acções: adicionar um novo livro ao vector e por fim fechar esta janela.

b) Botão apagar. Após clicarmos no botão apagar, deverá apagar do vector o elemento seleccionado e actualizar a JList.

c) Botão editar. Após clicarmos no botão editar, deverá surgir uma nova janela, e nas caixas de texto deverão ficar os valores do objecto seleccionado. Quando carregamos no botão gravar deverá actualizar os parâmetros do objecto bem como fechar a janela.


O Programa deverá estar muito bem estruturado e deverá obedecer ás seguintes regras:

a) No construtor da classe Main deverá ter o seguinte código:

public Main() {
super("Teste de Recuperação");
setupActions();
setupMenu();
setupLayout();
addElementsPanel();
setSize(450,300);
setVisible(true);
}

b) No método setupActions(); serão definidas todas as acções dos componentes do programa;
c) No método setupMenu(); será definido o menu;
d) No método setupLayout(); serão definidos os layouts das frames e dos painéis;
e) No método addElementsPanel(); adicionamos os diversos componentes aos painéis e/ou ás frames.

sorry mas nao consegui por as imagens..


e agora ponho o meu Main..

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.ListModel;

public class Main extends JFrame {
private JList list = new JList();
private JButton insert = new JButton("Inserir");
private JButton erase = new JButton("Apagar");
private JButton edit = new JButton("Editar");
private JMenuBar bar = new JMenuBar();
private JMenu menu1 = new JMenu("Menu 1");
private JMenu menu2 = new JMenu("Menu 2");
private JPanel panel = new JPanel();
private static Vector<livro> temp = new Vector<livro>();

public Main() {
super("Livraria");
setupActions();
setupMenu();
setupLayout();
addElementsPanel();
setSize(450,300);
setVisible(true);
}


private void addElementsPanel() {
panel.setLayout(new GridLayout(3, 1));
panel.add(insert);
panel.add(erase);
panel.add(edit);

}

private void setupLayout() {
setLayout(new BorderLayout());
add(bar, BorderLayout.PAGE_START);
add(list, BorderLayout.WEST);
add(panel, BorderLayout.EAST);
panel.setPreferredSize(new Dimension(221, 100));
list.setPreferredSize(new Dimension(221, 300));
}

private void setupMenu() {
bar.add(menu1);
bar.add(menu2);
menu1.add(new JMenuItem("Item 1"));
menu1.add(new JMenuItem("Item 2"));
menu2.add(new JMenuItem("Help"));
}

private void setupActions() {
list = new JList(preenche());
insert.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
new insert();
}
});



}


private void salvar(livro abc) {
temp.addElement(abc);
list = new JList(temp);
}

private Vector<livro> preenche() {
temp.addElement(new livro(1, "Livro1", "?"));
temp.addElement(new livro(2, "Livro2", "??"));
temp.addElement(new livro(3, "Livro 3", "???"));
return temp;
}

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

}

}

a classe dos livros...

public class livro {
private int id_livro;
private String nome_livro;
private String assunto;

public livro(int id_livro, String livro, String assunto) {
super();
this.id_livro = id_livro;
this.nome_livro = livro;
this.assunto = assunto;
}

public int getId_livro() {
return id_livro;
}

public void setId_livro(int id_livro) {
this.id_livro = id_livro;
}

public String getLivro() {
return nome_livro;
}

public void setLivro(String livro) {
this.nome_livro = livro;
}

public String getAssunto() {
return assunto;
}

public void setAssunto(String assunto) {
this.assunto = assunto;
}


public String toString() {

return "Nome: "+ nome_livro;
}


}

e a k abre a 2 janela(ou seja kuando carrego no inserir)

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JPopupMenu.Separator;
import javax.swing.plaf.SeparatorUI;


public class insert extends JFrame{
JTextField txt1 = new JTextField();
JTextField txt2 = new JTextField();
JTextField txt3 = new JTextField();
JButton bt = new JButton("Gravar");

public insert(){
super("Inserir Livros");
setBounds(300, 300, 450, 250);
setLayout(new GridLayout(4, 2));
add(new JLabel("Número do Livro:"));
add(txt1);
add(new JLabel("Nome do Livro:"));
add(txt2);
add(new JLabel("Assunto do Livro:"));
add(txt3);
add(new JLabel());
add(bt);
setupActions();
setVisible(true);
}

private void setupActions() {
bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
livro tmp = new livro(Integer.parseInt(txt1.getText()), txt2.getText(), txt3.getText());
salvar(tmp);//este comando da erro.. pois estou tentanto mandar a variavel para a outra classe e era isto que queria resolver..
dispose();
}
});

}

peço desculpa se esta confuso... :/

}
 
O método salvar da class Main é private logo não pode ser acedida fora da class Main.

Tens que passar o método para public para poderes aceder fora da class Main:

Código:
public void salvar(livro abc) {
		temp.addElement(abc);
		list = new JList(temp);
	}
 
_[D]4rk$h0t_;4039685 disse:
Eu fiz isso mas continua dando erro... :/

Fizeste como tinha dito anteriormente?

zyThuM disse:
Tens que declarar um objecto do tipo Main para poderes chamar um método dessa class.

Umas coisa do Genero:

Código:
Main main = new Main();
main.salvar(abc);

Isto assunto tem a ver com a manipulação de objectos, convém perceberes bém como estas coisas funcionam para conseguires avançar. Não é nada de complicado mas convém teres isso bem presente.

zyThuM disse:
O método salvar da class Main é private logo não pode ser acedida fora da class Main.

Tens que passar o método para public para poderes aceder fora da class Main:

Código:
public void salvar(livro abc) {
temp.addElement(abc);
list = new JList(temp);
}
 
Back
Topo