Нет метода setLayout () с объектом JPanel - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу применить gridBagLayout к моей форме и создаю объект JPanel, но метод setLayout () не отображается.Может кто-нибудь помочь, пожалуйста?

Путь:

import javax.swing.*;

JPanel p = new JPanel();
p.setLayout(new GridBagLayout());

Вот мой полный исходный код: Нет ошибки, просто не работает Layout Manager.

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.sql.*;

public class CamInfo extends JFrame implements ActionListener{

    JLabel lb1, lbUsername, lbPassword;
    JTextField tfUsername, tfPassword;
    JButton btLogin, btSignup, btGuest;                                                                                                                                                                                                                                                                                                                  

    public CamInfo() {

        setSize(400,200);

        JPanel p1 = new JPanel();
        p1.setLayout(new GridBagLayout()); // no setLayout() method for p1

        this.setLocationRelativeTo(null);
        lb1 = new JLabel("Travelling Guide");
        lbUsername = new JLabel("Username");
        lbPassword = new JLabel("Password");

        tfUsername = new JTextField(10);
        tfPassword = new JTextField(10);

        btLogin = new JButton("Login");
        btSignup = new JButton("Sign up");
        btGuest = new JButton("Guest");

        addItem(p1, lbUsername, 0,0,1,1, GridBagConstraints.EAST);
        addItem(p1, lbPassword, 0,1,1,1, GridBagConstraints.EAST);

        addItem(p1, tfUsername, 1,0,2,1, GridBagConstraints.WEST);
        addItem(p1, tfPassword, 1,1,1,1, GridBagConstraints.WEST);

        add(p1);

        setVisible(true);

        btLogin.addActionListener(this);
        btSignup.addActionListener(this);
        btGuest.addActionListener(this);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

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

    public void actionPerformed(ActionEvent ae){
        if(ae.getSource() == btLogin){

        }

        if(ae.getSource() == btSignup){

        }

        if(ae.getSource() == btGuest){

        }

    }

    void addItem(JPanel p, JComponent c, int x, int y, int width, int height, int align){
        GridBagConstraints gc = new GridBagConstraints();
        gc.gridx = x;
        gc.gridy = y;
        gc.gridwidth = width;
        gc.gridheight = height;
        gc.weightx = 100.0;
        gc.weighty = 100.0;
        gc.insets = new insets(5, 5, 5, 5);
        gc.anchor = align;
        gc.fill = GridBagConstraints.NONE;
        p.add(c, gc);
    }
}

Вот мой полный исходный код: нет ошибки, просто не работает Layout Manager.

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.sql.*;

public class CamInfo extends JFrame implements ActionListener{

    JLabel lb1, lbUsername, lbPassword;
    JTextField tfUsername, tfPassword;
    JButton btLogin, btSignup, btGuest;                                                                                                                                                                                                                                                                                                                  

    public CamInfo() {

        setSize(400,200);

        JPanel p1 = new JPanel();
        p1.setLayout(new GridBagLayout()); // no setLayout() method for p1

        this.setLocationRelativeTo(null);
        lb1 = new JLabel("Travelling Guide");
        lbUsername = new JLabel("Username");
        lbPassword = new JLabel("Password");

        tfUsername = new JTextField(10);
        tfPassword = new JTextField(10);

        btLogin = new JButton("Login");
        btSignup = new JButton("Sign up");
        btGuest = new JButton("Guest");

        addItem(p1, lbUsername, 0,0,1,1, GridBagConstraints.EAST);
        addItem(p1, lbPassword, 0,1,1,1, GridBagConstraints.EAST);

        addItem(p1, tfUsername, 1,0,2,1, GridBagConstraints.WEST);
        addItem(p1, tfPassword, 1,1,1,1, GridBagConstraints.WEST);

        add(p1);

        setVisible(true);

        btLogin.addActionListener(this);
        btSignup.addActionListener(this);
        btGuest.addActionListener(this);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

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

    public void actionPerformed(ActionEvent ae){
        if(ae.getSource() == btLogin){

        }

        if(ae.getSource() == btSignup){

        }

        if(ae.getSource() == btGuest){

        }

    }

    void addItem(JPanel p, JComponent c, int x, int y, int width, int height, int align){
        GridBagConstraints gc = new GridBagConstraints();
        gc.gridx = x;
        gc.gridy = y;
        gc.gridwidth = width;
        gc.gridheight = height;
        gc.weightx = 100.0;
        gc.weighty = 100.0;
        gc.insets = new insets(5, 5, 5, 5);
        gc.anchor = align;
        gc.fill = GridBagConstraints.NONE;
        p.add(c, gc);
    }
}

1 Ответ

0 голосов
/ 23 февраля 2019

Ваш JPanel p1 отлично получает GridBagLayout, но вы не видите кнопок в графическом интерфейсе, потому что никогда их не добавляете.Например, вы можете добавить свои кнопки к их собственной JPanel, которая использует GridLayout, а затем добавить ее в 3-ю строку вашего графического интерфейса, и они будут отображаться нормально:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

@SuppressWarnings("serial")
public class CamInfo extends JFrame implements ActionListener {

    JLabel lb1, lbUsername, lbPassword;
    JTextField tfUsername, tfPassword;
    JButton btLogin, btSignup, btGuest;

    public CamInfo() {

        // setSize(400, 200);  // don't do this. pack() instead

        JPanel p1 = new JPanel();
        p1.setLayout(new GridBagLayout()); // no setLayout() method for p1

        this.setLocationRelativeTo(null);
        lb1 = new JLabel("Travelling Guide");
        lbUsername = new JLabel("Username");
        lbPassword = new JLabel("Password");

        tfUsername = new JTextField(10);
        tfPassword = new JTextField(10);

        btLogin = new JButton("Login");
        btSignup = new JButton("Sign up");
        btGuest = new JButton("Guest");

        addItem(p1, lbUsername, 0, 0, 1, 1, GridBagConstraints.EAST);
        addItem(p1, lbPassword, 0, 1, 1, 1, GridBagConstraints.EAST);

        addItem(p1, tfUsername, 1, 0, 2, 1, GridBagConstraints.WEST);
        addItem(p1, tfPassword, 1, 1, 1, 1, GridBagConstraints.WEST);

        // can add the buttons to their own GridLayout using JPanel
        JPanel buttonPanel = new JPanel(new GridLayout(1, 0, 5, 5));
        buttonPanel.add(btLogin);
        buttonPanel.add(btSignup);
        buttonPanel.add(btGuest);

        // then add this JPanel to fill the 3rd row of your GUI
        addItem(p1, buttonPanel, 0, 2, 2, 1, GridBagConstraints.CENTER);

        add(p1);
        pack();  // do this instead of set size
        setVisible(true);

        btLogin.addActionListener(this);
        btSignup.addActionListener(this);
        btGuest.addActionListener(this);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

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

    public void actionPerformed(ActionEvent ae) {
        if (ae.getSource() == btLogin) {

        }

        if (ae.getSource() == btSignup) {

        }

        if (ae.getSource() == btGuest) {

        }

    }

    void addItem(JPanel p, JComponent c, int x, int y, int width, int height, int align) {
        GridBagConstraints gc = new GridBagConstraints();
        gc.gridx = x;
        gc.gridy = y;
        gc.gridwidth = width;
        gc.gridheight = height;
        gc.weightx = 100.0;
        gc.weighty = 100.0;
        gc.insets = new Insets(5, 5, 5, 5);
        gc.anchor = align;
        gc.fill = GridBagConstraints.HORIZONTAL;  // this is better than NONE
        p.add(c, gc);
    }
}

Это отображается как:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...