Maximizar JFrame

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?

1 curtida

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:
image

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