私はフレームを使用してクラスを持っているとのJPanelを削除します。ここに私はパネルを持ってJButtonの[JAVA]
import java.awt.*;
import javax.swing.*;
public class Menu_Frame extends JFrame{
Menu_Panel menu_panel = new Menu_Panel();
public Menu_Frame(){
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
setExtendedState(JFrame.MAXIMIZED_BOTH);
setPreferredSize(new Dimension(screenWidth, screenHeight));
setLocationByPlatform(true);
getContentPane().add(menu_panel);
}
}
:
import java.awt.*;
import javax.swing.*;
public class Menu_Panel extends JPanel{
Play_Button play = new Play_Button();
public Menu_Panel() {
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
setLayout(new BorderLayout());
setSize(screenWidth, screenHeight);
setLocation(0,0);
setBackground(Color.BLACK);
add(play);
}
}
そして、ここで私は、ボタンのクラスがあります。
public class Play_Button extends JButton implements ActionListener{
private static final long serialVersionUID = -5408317246901761857L;
protected int size_x = 150;
protected int size_y = 75;
protected int location_x = 0;
protected int location_y = 0;
Font f= new Font("Helvetica", Font.BOLD, 30);
String title = "PLAY";
Menu_Frame frame;
Menu_Panel menu;
public Play_Button() {
setFont(new Font("Helvetica", Font.BOLD, 25));
setText(title);
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
location_x = (screenSize.height/2)+180;
location_y = screenSize.width/5;
setBorder(new RoundedBorder(20));
setSize(size_x,size_y);
setLocation(location_x,location_y);
setBackground(Color.BLACK);
setForeground(Color.RED);
setFocusPainted(false);
setBorderPainted(false);
setContentAreaFilled(false);
setVisible(true);
JPanel panel = new JPanel();
panel.setSize(100,100);
panel.setLocation(100, 100);
panel.setBackground(Color.GREEN);
panel.setVisible(true);
addActionListener(this);
addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e){
setBorderPainted(true);
setForeground(Color.RED);
}
public void mouseExited(MouseEvent e){
setBorderPainted(false);
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
frame.getContentPane().remove(menu);
}
}
最後に、私はplay_buttonの境界の周りのクラスを持っています:
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.border.Border;
public class RoundedBorder implements Border {
private int radius;
RoundedBorder(int radius) {
this.radius = radius;
}
public Insets getBorderInsets(Component c) {
return new Insets(this.radius+1, this.radius+1, this.radius+2, this.radius);
}
public boolean isBorderOpaque() {
return true;
}
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
g.drawRoundRect(x, y, width-1, height-1, radius, radius);
}
}
今、ボタンをクリックするとパネルが消えず、理由がわかりません。 setVisible(false)を使ってCarLayoutを試してみましたが、うまくいきません。どうすれば修正できますか?
ではない私がよう、 'ツールキット#getScreenSize'を使用しないことをこの方法をアドバイスうタスクバーやドックのような追加のOS要素は考慮されていません。一般的なユーザの推奨事項として、メインフレームのサイズを設定しないでください。代わりに、好ましいサイズをパックされたサイズにして、 'setExtendedState'を使用してOSを最大に拡張してください。 – MadProgrammer
' setSize'、 'setBounds '、' setLocation'は、コンポーネントがレイアウトマネージャの制御下に置かれている間はすべて無関係です。また、コンポーネントはデフォルトで表示されます – MadProgrammer
あなたの質問に対する最も一般的な答えは、「[CardLayout'](https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html)を使用して、 – MadProgrammer