Consutrui meu primeiro componente em swing e gostaria de disponibilizá-lo para o pessoal da empresa utilizar.
A primeira dúvida é como empacotar o danado.
O componente tem alguns ícones (.png) que coloquei pra ficar com um visual melhor, enfim…
Como é que eu “empacoto” tudo para que os desenvolvedores possam simplesmente arrastar e soltar?
Outro detalhe…esse já é de implementação.
O componente é composto de um JPanel + JTextPane + 4 JButton.
O container é o JPanel.
A idéia é “travar” o redimensionamento de todos os componentes permitindo somente redimensionar o JPanel.
Feito isso, o JTextPane também tem que “crescer” na mesma proporção do JPanel, mas os botões não, esses tem que permanecer com tamanho inalterado.
Confesso que escolhi por tentativa e erro…esse foi o único Layout que me permitiu colocar os controles onde eu queria. (como eu disse…esse foi meu primeiro) rsrs
Bem, imagino que você tenha seguido as especificações do JavaBean e queira que seu componente seja utilizável inclusive em editores visuais, certo?
Pra empacotar, nenhum segredo: só criar um .jar com o Manifest, e as imagens dentro (lembrando de obter no código as imagens através de caminhos relativos).
Pra ‘travar’ o dimensionamento, basta você não permitir acesso direto aos componentes internos através da Interface do componente, escondendo possíveis getters e setters indevidos e deixando somente os do JPanel.
Quanto ao redimensionamento interno dos componentes, isso é você que deve cuidar no código e depende do LayoutManager que você escolheu - pro componente, valem as mesmas regras de redimensionamento que se você simplesmente abrir o JPanel e mudar o tamanho. No JGoodies Forms e no MiG você também não teria problemas com isso… mas já que você não está utilizando layout nenhum, suponho que não seja possível (a não ser com muuito trabalho).
O SpringLayout é bem simples de usar. Nele voce diz a distancia de um componente para outro. Ex.: JLabel fica a 5px da borda superior do JPanel, JTextArea fica a 15px abaixo do JLabel.
Dessa maneira, se voce muda a posição do JLabel para “10px da borda superior do JPanel”, automaticamente o JTextArea vai se mover para manter seus 15 px de distancia.
no codigo fica algo como:
(Nao me lembro os nomes dos metodos então vou apenas passar a idea)
JPanel panel = new JPanel("Teste");
SpringLayout layout = new Layout();
panel.setLayout(layout);
JLabel label = new JLabel("cool");
JButtom bt = new JButtom("das");
panel.add(label);
panel.add(bt);
//posiciona elementos
layout.putConstraint(label, SpringLayout.NORTH, 10, panel, SpringLayout.NORTH);
//a face norte do obj label vai ficar a 10px da face norte do panel
layout.putConstraint(label, SpringLayout.WEST, 10, panel, SpringLayout.WEST);
//a face esquerda do obj label vai ficar a 10px da face esquerda do panel
layout.putConstraint(bt, SpringLayout.WEST, 10, panel, SpringLayout.WEST);
layout.putConstraint(bt, SpringLayout.NORTH, 10, label, SpringLayout.SOUTH);
//a face norte do obj label vai ficar a 10px da face sul do label
layout.putConstraint(bt, SpringLayout.SOUTH, -10, panel, SpringLayout.SOUTH);