#java
#java
Вопрос:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Button extends JButton{
Button(){}
Button(String text,ImageIcon icon,Dimension dm,Point point){
this.setText(text);
this.setIcon(icon);
this.setSize(dm);
this.setBorder(BorderFactory.createLineBorder(Color.WHITE));
this.setHorizontalTextPosition(SwingConstants.RIGHT);
this.setIconTextGap(50);
this.setFont(new Font(null, Font.PLAIN, 14));
this.setFocusable(false);
this.setLocation(point);
this.setBackground(null);
}
}
class MenuPanel extends JPanel implements ActionListener{
public MenuPanel(int width,int height,Color color){
bDimension = new Dimension(196,40);
addIcon =new ImageIcon(getClass().getResource("addUser.png"));
editIcon =new ImageIcon(getClass().getResource("editUser.png"));
this.setLayout(null);
this.setPreferredSize(new Dimension(width,height));
this.setBackground(color);
//THE LOGO
this.add(new LogoPanel(new Dimension(196, 150), this.getBackground(),new Point(2, 2)));
//THE ADD BUTTON
btnAdd =new Button("Add User",addIcon,bDimension,new Point(2,this.getComponent(0).getHeight() 4));
btnAdd.addActionListener`enter code here`(this);
this.add(btnAdd);
//THE EDIT BUTTON
btnEdit =new Button("Edit User",editIcon,bDimension,new Point(2,this.getComponent(0).getHeight() this.getComponent(1).getHeight() 8));
btnEdit.addActionListener(this);
this.add(btnEdit);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnAdd) {
JPanel addUser =new JPanel();
addUser.setBackground(Color.BLUE);
addUser.setPreferredSize(new Dimension(400,100));
addUser.add(new JButton("Button"));
//NOT SURE WHAT I'M DOING HERE. DOESN'T WORK
this.getParent().add(addUser,BorderLayout.CENTER);
}else if(e.getSource()==btnEdit) {
JPanel editUser =new JPanel();
editUser.setBackground(Color.RED);
editUser.setPreferredSize(new Dimension(400,100));
editUser.add(new JButton("Button"));
//NOT SURE WHAT I'M DOING HERE. DOESN'T WORK
this.getParent().add(editUser,BorderLayout.CENTER);
}
}
private Button btnAdd;
private Button btnEdit;
private ImageIcon addIcon;
private ImageIcon editIcon;
private Dimension bDimension;
}
class LogoPanel extends JPanel{
public LogoPanel(Dimension dimension,Color color,Point point){
btnLogo =new JLabel();
btnLogo.setText("Your Name");
btnLogo.setIcon(new ImageIcon(getClass().getResource("user.png")));
btnLogo.setOpaque(true);
btnLogo.setIconTextGap(10);
btnLogo.setHorizontalTextPosition(0);
btnLogo.setVerticalTextPosition(3);
btnLogo.setHorizontalAlignment(0);
btnLogo.setVerticalAlignment(0);
this.setLayout(new BorderLayout());
this.setBorder(BorderFactory.createLineBorder(Color.WHITE));
this.setSize(dimension);
this.setBackground(color);
this.add(btnLogo,BorderLayout.CENTER);
this.getComponent(0).setFont(new Font(null, Font.PLAIN, 14));
this.getComponent(0).setFocusable(false);
this.setLocation(point);
}
JLabel btnLogo;
}
public class Window extends JFrame {
public Window(){
this.setTitle(null);
this.setIconImage(null);
this.setLayout(new BorderLayout(0,2));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setPreferredSize(new Dimension(new Dimension(960,500)));
this.setMinimumSize(new Dimension(960,500));
this.getContentPane().setBackground(new Color(250, 250, 250));
//ADD PANELS
this.add(new MenuPanel(200, 0, new Color(238, 238, 238)),BorderLayout.WEST);
this.setLocationRelativeTo(null);
}
}
Приведенный выше код создает jframe с borderlayout и панелью меню, выровненной по западу. Панель меню имеет
две кнопки jbuttons.
Чего я хочу добиться, так это нажать любую из кнопок и тем самым вставить панель на другую сторону jframe.
Не могли бы вы, кто-нибудь, пожалуйста, помочь / научить меня, как этого добиться. Я очень новичок в программировании и особенно в Java.
Комментарии:
1. 1) Не используйте «кнопку», которая является компонентом AWT. Для Swing вы используете
JButton
. 2) Не используйте нулевой макет. Swing был разработан для использования с менеджерами компоновки. Таким образом, вы должны создать панель для кнопки, которую вы добавляете вWEST
BorderLayout. Затем вы должны создать вторую панель, которая использует aCardLayout
, которую вы добавляете вCENTER
BorderLayout. Затем вы можете поменять панели местами. Прочитайте раздел из руководства по Swing о том, как использовать CardLayout для рабочего примера, чтобы начать работу.2. @camickr, кнопка над ней фактически является классом, который расширяет JButton. Не уверен, что это может вызвать путаницу.
3. Пропустил это, и да, это сбивает с толку. У AWT и JavaFX есть классы, называемые Button . Имя класса должно быть более описательным, если вы настраиваете.