Ola Pessoal
Estou querendo criar uma interface para que toda a vez que eu clicar no Botão adiciona, ele adicione um Jbutton dentro de um Jtabel e alinhados na horizontal, sucessivamente
o código é este que tenho
Do jeito que você está falando, você deverá utilizar Gerenciadores de Layout. Eles permitirão controlar a posição (e até tamanho) dos componentes na janela.
O mais simples e que permite a adição “lado a lado” é o FlowLayout.
Tome cuidado com adição dinâmica de componentes no SWING. Não use indiscriminadamente…
T
Thiago_M_Faria
diego_qmota:
Do jeito que você está falando, você deverá utilizar Gerenciadores de Layout. Eles permitirão controlar a posição (e até tamanho) dos componentes na janela.
O mais simples e que permite a adição “lado a lado” é o FlowLayout.
FlowLayout experimentLayout = new FlowLayout();
compsToExperiment.setLayout(experimentLayout);
compsToExperiment.setComponentOrientation(
ComponentOrientation.RIGHT_TO_LEFT);
Mas nem tudo são flores. Esse layout é bem simples e não permite controle da quantidade de componentes que são adicionados. Consulte a API: http://download.oracle.com/javase/6/docs/api/java/awt/FlowLayout.html
Mas isso pode ser facilmente contornado… :
[list]Crie uma classe que herda a classe que serve de container (suponho que seja o mais comum: JPanel);[/list]
[list]Inclua um contador que é incrementado todas as vezes que é adicionado um JButton (por exemplo);[/list]
[list]Sobrescreva o método add - de forma que ele impeça a adição de um componente, caso a contagem tenha sido alcançada.[/list]
Eu fiz mais ou menos o que você deve fazer. Estou sem tempo para testar. Teste aí e faça as modificações necessárias:
packageteste.contadorjpanel;importjava.awt.Component;importjava.awt.LayoutManager;importjavax.swing.*;publicclassJPanelComLimiteextendsJPanel{privateintcontadorComp;privatefinalintlimiteComp;publicJPanelComLimite(intlimiteComp){super();initContadorComp();this.limiteComp=limiteComp;}publicJPanelComLimite(booleanisDoubleBuffered,intlimiteComp){super(isDoubleBuffered);initContadorComp();this.limiteComp=limiteComp;}publicJPanelComLimite(LayoutManagerlayout,intlimiteComp){super(layout);initContadorComp();this.limiteComp=limiteComp;}publicJPanelComLimite(LayoutManagerlayout,booleanisDoubleBuffered,intlimiteComp){super(layout,isDoubleBuffered);initContadorComp();this.limiteComp=limiteComp;}privatevoidinitContadorComp(){contadorComp=0;}@OverridepublicComponentadd(Componentcomp){if(contadorComp<=limiteComp){contadorComp++;returnsuper.add(comp);}else{returnnull;}}}//fim da classe
Tente usar esse JPanel (JPanelComLimite) para limitar os componentes. Se o método add retornar null, você dispara uma exceção indicando que o limite foi alcançado.
T
Thiago_M_Faria
Olá diego_qmota,
Preciso de um favor seu veja se consegue me ajudar?
Eu estou com um projeto da faculdade de um sistema para um restaurante, e esse código que eu te pedi foi para fazer uma tela de controle de mesas. para adicionar e excluir botões que na verdade seria uma mesa em minha tela de controle de mesas.
teria como vc me ajudar a fazer esta tela?
Valeu…
H
heroijapa
Eu usaria um JList no lugar desses botões.
Usa o horizontal_wrap pros icones ficarem lado a lado como no windows explorer (é exatamente o que vc quer)
Cria uma variavel ImageIcon para ler a imagem
ImageIcon icon = new ImageIcon("mesa.png")
list = new JList();
list.setFixedCellWidth(115); // largura do icone mesa
list.setFixedCellHeight(95); // altura do icone mesa
list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setCellRenderer(new IconListRenderer(icon));
Dpois cria um cellRenderer customizado com a imagem das mesas
Thiago, você me desculpe, mas só posso ajudar passando orientações. Infelizmente eu não tenho tempo para trabalhar diretamente no código de outras pessoas…
Como você quer representar objetos e seus estados (objeto mesa), a orientação do heroijapa é a mais indicada. Você provavelmente terá que fazer alguns acréscimos mas uma abordagem que consiga representar seus objetos e mudar conforme o estado deles mudam, é a mais indicada.
Estude o que foi passado pelo heroijapa, ajustando a orientação desses componentes, e para detectar e representar as mudanças de estado do objeto “Mesa”, eu recomendo que você aplique o pattern Observable (há um artigo sobre ele no GUJ http://www.guj.com.br/articles).
T
Thiago_M_Faria
diego_qmota:
Thiago, você me desculpe, mas só posso ajudar passando orientações. Infelizmente eu não tenho tempo para trabalhar diretamente no código de outras pessoas…
Como você quer representar objetos e seus estados (objeto mesa), a orientação do heroijapa é a mais indicada. Você provavelmente terá que fazer alguns acréscimos mas uma abordagem que consiga representar seus objetos e mudar conforme o estado deles mudam, é a mais indicada.
Estude o que foi passado pelo heroijapa, ajustando a orientação desses componentes, e para detectar e representar as mudanças de estado do objeto “Mesa”, eu recomendo que você aplique o pattern Observable (há um artigo sobre ele no GUJ http://www.guj.com.br/articles).
Ok eu intendo, mais valeu pelas dicas suas e do japa, me ajudaram bastante!!
T
Thiago_M_Faria
É isso ai galera consegui inserir o Jlabel em um painel com este código abaixo.
JLabel jt = new JLabel();
painelMesas.add(jt);
FlowLayout teste = new FlowLayout();
painelMesas.setLayout(teste);
painelMesas.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
painelMesas.setVerifyInputWhenFocusTarget(rootPaneCheckingEnabled);
Só que estou com outro probleminha hehehe…
É assim vou adicionando perfeitamente os Jlabel no Painel, só que quando chega no limite do Painel ele não pula para a proxima linha e continua inserindo na mesma linha, queria que pulasse para a proxima linha é simples mais sou iniciante e o troço, não vai!
ja tentei de tudo e nada!!!