Eu criei um Botão no JFrame que toda vez que eu pressiono ele da um setExtendedState(MAXIMIZED_BOTH) ou (NORMAL), porem os meus componentes ficam fora de suas posições quando eu maximizo a tela,como resolver?
Qual design vc está utilizando?
public class Aluguel extends JFrame{
private final static String sql = "SELECT DISTINCT Titulo FROM acervo"; private final static String sql2 = "SELECT Titulo,Codigo,Prazo_Fim,Prazo_Inicio FROM acervo WHERE Aluno=?"; KGradientPanel pnlCima = new KGradientPanel(); JPanel pnlDisponiveis= new JPanel(); JPanel pnlAlugados = new PanelPintado(); KGradientPanel pnlLado = new KGradientPanel(); JLabel lblAluno = new JLabel("Dalton Gomes"); JLabel btnSaida = new JLabel(); JButton btnDisponiveis = new BtnRedondo(); JButton btnAtrasados = new BtnRedondo(); JButton btnEventos = new BtnRedondo(); JTextField txtBuscar = new TxtRedondo(50); JTable table = new JTable(); JScrollPane scr = new JScrollPane(table); JTable table_al = new JTable(); JScrollPane scr_al = new JScrollPane(table_al); public String sala; public void receberLogin(Cadastro registros){ lblAluno.setText(registros.getUsuario()); sala = registros.getSala(); } public Aluguel(){ setUndecorated(true); setVisible(true); setSize(new Dimension(1024,680)); setLocationRelativeTo(null); add(pnlAlugados,BorderLayout.CENTER); pnlAlugados.setVisible(false); add(pnlDisponiveis,BorderLayout.CENTER); add(pnlCima,BorderLayout.NORTH); add(pnlLado,BorderLayout.WEST); Panels(); Buttons(); MouseButtons(); TabelaDisponiveis(); TabelaAlugados(); Labels(); } public void Panels(){ pnlCima.setLayout(null); pnlCima.setkStartColor(new Color(11,177,58)); pnlCima.setkEndColor(new Color(188, 251, 238)); pnlCima.setkGradientFocus(1000); pnlCima.setPreferredSize(new Dimension(getWidth(),120)); pnlCima.add(lblAluno); pnlCima.add(btnSaida); pnlLado.add(btnDisponiveis); pnlLado.add(btnAtrasados); pnlLado.add(btnEventos); pnlLado.setLayout(null); pnlLado.setPreferredSize(new Dimension(280,getHeight())); pnlLado.setkStartColor(new Color(182, 221, 219)); pnlLado.setkEndColor(new Color(181, 154, 208)); pnlDisponiveis.add(txtBuscar,BorderLayout.NORTH); pnlDisponiveis.add(scr); pnlAlugados.add(scr_al); pnlCima.setBorder(new LineBorder(Color.BLACK,1,true)); } public void Buttons(){ Font f1 = new Font("Noto Sans CJK SC Medium",Font.CENTER_BASELINE,24); btnDisponiveis.setFont(f1); btnAtrasados.setFont(f1); btnEventos.setFont(f1); btnDisponiveis.setBounds(50,50,180,80); btnAtrasados.setBounds(50,200,180,80); btnEventos.setBounds(50,350,180,80); btnDisponiveis.setText("Disponiveis"); btnAtrasados.setText("Atrasados"); btnEventos.setText("Eventos"); } public void Labels(){ ImageIcon ico = new ImageIcon(getClass().getResource("/Imagens/logout.png")); Font f1 = new Font("Gabriola",Font.ITALIC,38); lblAluno.setForeground(Color.WHITE); lblAluno.setBounds(20,35,400,50); lblAluno.setFont(f1); btnSaida.setIcon(ico); btnSaida.setBounds(getWidth()-80,35,50,50); btnSaida.setPreferredSize(new Dimension(60,150)); txtBuscar.setSize(new Dimension(pnlDisponiveis.getWidth()-40,200)); } public void TabelaDisponiveis(){ JTableHeader head = table.getTableHeader(); Font f1 = new Font("Courier New",Font.ITALIC,22); scr.setPreferredSize(new Dimension(pnlDisponiveis.getWidth(),pnlDisponiveis.getHeight())); table.setModel(new ModeloTabela(Disponiveis())); table.setRowHeight(80); table.setBackground(new Color(181, 248, 182)); table.setFont(f1); table.setSelectionBackground(new Color(92, 240, 94)); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); head.setReorderingAllowed(false); head.setResizingAllowed(false); head.setPreferredSize(new Dimension(scr.getWidth(),0)); head.setVisible(false); } public void TabelaAlugados(){ System.out.println("Width:"+pnlDisponiveis.getWidth()+"Height:"+pnlDisponiveis.getHeight()); Font f1 = new Font("Copperplate Gothic",Font.CENTER_BASELINE,17); JTableHeader head = table_al.getTableHeader(); scr_al.setOpaque(false); scr_al.setPreferredSize(new Dimension(pnlAlugados.getWidth(),pnlAlugados.getHeight())); table_al.setModel(new ModeloTabela_Alugados(Alugados())); table_al.setBackground(new Color(181,248,182)); table_al.setSelectionBackground(new Color(92, 240, 94)); table_al.setFont(f1); table_al.setRowHeight(60); table_al.setEnabled(false); table_al.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); table_al.getColumnModel().getColumn(0).setPreferredWidth(350); table_al.getColumnModel().getColumn(1).setPreferredWidth(100); table_al.getColumnModel().getColumn(2).setPreferredWidth(100); table_al.getColumnModel().getColumn(3).setPreferredWidth(100); table_al.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); head.setResizingAllowed(false); head.setReorderingAllowed(false); head.setBackground(new Color(213, 251, 214)); head.setPreferredSize(new Dimension(scr_al.getWidth(),40)); if(table_al.getRowCount()==0){ table_al.setEnabled(false); System.out.println("Linhas: "+table_al.getRowCount()); } } public List<Acervo> Alugados(){ Conexao c1 = new Conexao(); List<Acervo> lista = new ArrayList<>(); try{ Connection con = c1.pegarConexao(); PreparedStatement ps = con.prepareStatement(sql2); //Cuidado com a ordem ps.setString(1,"Dalton Gomes"); ResultSet rs = ps.executeQuery(); while(rs.next()){ lista.add(new Acervo(rs.getString("Titulo"),rs.getInt("Codigo"),rs.getString("Prazo_Fim"),rs.getString("Prazo_Inicio"))); } } catch(SQLException ex){ JOptionPane.showMessageDialog(null,ex); } return lista; } public List<Acervo> Disponiveis(){ Conexao c1 = new Conexao(); List<Acervo> lista = new ArrayList<>(); try{ Connection con = c1.pegarConexao(); PreparedStatement ps = con.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()){ lista.add(new Acervo(rs.getString("Titulo"))); } } catch(SQLException ex){ JOptionPane.showMessageDialog(null,ex); } return lista; } public void MouseButtons(){ Color c1= new Color(108, 244, 119); Color c2 = new Color(29, 191, 42); Color c3 = new Color(15, 98, 22); btnDisponiveis.setBackground(c1); btnAtrasados.setBackground(c1); btnEventos.setBackground(c1); btnDisponiveis.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent e) { btnDisponiveis.setBackground(c2); } @Override public void mouseExited(MouseEvent e) { btnDisponiveis.setBackground(c1); } @Override public void mouseClicked(MouseEvent e) { btnDisponiveis.setBackground(c3); pnlDisponiveis.setVisible(true); pnlAlugados.setVisible(false); } }); btnAtrasados.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent e) { btnAtrasados.setBackground(c2); } @Override public void mouseExited(MouseEvent e) { btnAtrasados.setBackground(c1); } @Override public void mouseClicked(MouseEvent e) { btnAtrasados.setBackground(c3); pnlDisponiveis.setVisible(false); pnlAlugados.setVisible(true); add(pnlAlugados,BorderLayout.CENTER); } }); btnEventos.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent e) { btnEventos.setBackground(c2); } @Override public void mouseExited(MouseEvent e) { btnEventos.setBackground(c1); } @Override public void mouseClicked(MouseEvent e) { btnEventos.setBackground(c3); } }); btnSaida.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { System.exit(0); } }); } public static void main(String[] args) { new Aluguel(); } public class BtnRedondo extends JButton { private Shape shape; protected void paintComponent(Graphics g) { setOpaque(false); g.setColor(getBackground()); g.fillRoundRect(0, 0, getWidth()-1, getHeight()-1, 15, 15); super.paintComponent(g); } protected void paintBorder(Graphics g) { g.setColor(getForeground()); g.drawRoundRect(0, 0, getWidth()-1, getHeight()-1, 15, 15); } public boolean contains(int x, int y) { if (shape == null || !shape.getBounds().equals(getBounds())) { shape = new RoundRectangle2D.Float(0, 0, getWidth()-1, getHeight()-1, 15, 15); } return shape.contains(x, y); }}
public class TxtRedondo extends JTextField{ private Shape shape; public TxtRedondo(int size){ super(size); setOpaque(false); } protected void paintComponent(Graphics g) { g.setColor(getBackground()); g.fillRoundRect(0, 0, getWidth()-1, getHeight()-1, 15, 15); super.paintComponent(g); } protected void paintBorder(Graphics g) { g.setColor(getForeground()); g.drawRoundRect(0, 0, getWidth()-1, getHeight()-1, 15, 15); } public boolean contains(int x, int y) { if (shape == null || !shape.getBounds().equals(getBounds())) { shape = new RoundRectangle2D.Float(0, 0, getWidth()-1, getHeight()-1, 15, 15); } return shape.contains(x, y); } } public class PanelPintado extends JPanel{ private BufferedImage img; private BufferedImage resized; public PanelPintado(){ try { img = ImageIO.read(getClass().getResource("/Imagens/Tela Indisponivel.png")); } catch (IOException ex) { ex.printStackTrace(); } } protected void paintComponent(Graphics g){ if(table_al.getRowCount()==0){ super.paintComponent(g); g.drawImage(img,0,0,this); } } } }
Eu setei alguns JPanel com layout null para conseguir fazer o design que eu queria
No caso esse é o codigo para Maximizar
btnFull.addMouseListener(new MouseAdapter() {
@Override public void mouseClicked(MouseEvent e) { if(getExtendedState()== MAXIMIZED_BOTH){ setExtendedState(NORMAL); }else{ setExtendedState(MAXIMIZED_BOTH); } } });
Beleza, agora seta como Design Livre (Free Design)
Vai aparecer esses dois itens:
![]()
Se você quiser que algo (componente) redimensione tanto vertical como horizontal vc seleciona os dois, se quer que seja só horizontal, seleciona so o horizontal, vertical msm coisa…
O resto é só ir ajustando no painel. É meio dificil explicar assim, mas como vc já tem tudo posicinado, é só escolher se quer redimensionar ou não.
Nesses dois exemplos que vou mandar, vai ter um painel roxo do lado, ele vai se expandir VERTICALMENTE, ou seja, eu deixei apenas o ícone VERTICAL selecionado.
Normal
Maximizado
Eu sempre uso o Absolute pra colocar tudo no lugar, painel sobre painel, pra ficar tudo bem bacana e depois seto pra Livre.
Não tem muito segredo, é mais ir posicionando os componentes mesmo
E como faz pra setar esses layouts manualmente?
Eu n usei o GUI Swing
Aí já é mais chatinho:
GroupLayout seu_painel_free = new GroupLayout(search_panel);
seu_painel_free.setLayout(search_panelLayout);
seu_painel_free.setHorizontalGroup(
seu_painel_free.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(seu_painel_free.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(jLabel1, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)
.addGap(10, 10, 10)
.addComponent(jTextField1)
.addGap(30, 30, 30))
);
seu_painel_free.setVerticalGroup(
seu_painel_free.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(seu_painel_free.createSequentialGroup()
.addGap(10, 10, 10)
.addGroup(seu_painel_free.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jTextField1, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE)))
);
Porquê não usa o Window Builder?
Bom eu ate tava usando,mas as minhas tabelas não estavam do jeito que eu queria e o Window Builder tava complicando minha vida, dai resolvi fazer manualmente, que eu ate acho melhor para editar algumas coisas
Mas acho que vou recomeçar do zero a interface dele depois que eu pega o jeito e como ele vai ser

