[英]Adding a JPanel into JFrame
我有一個擴展JFrame
BoardGUI
類。 我在JPanel
添加了按鈕。 當我嘗試將面板添加到框架中並在其上使用mouselistoner時,按鈕(撤消和重播)變得不可見。 當我將鼠標懸停在按鈕上時,它們變為可見。
這是我的代碼:
public class BoardGUI extends JFrame {
JButton a=new JButton("Undo");
JButton r=new JButton("replay");
JPanel jp=new JPanel();
public BoardGUI() {
// TODO Auto-generated constructor stub
setTitle("Checkers Game");
setSize(645, 700);
jp.setLayout(new FlowLayout());
jp.setPreferredSize(new Dimension(645,35));
a.setVisible(true);
r.setVisible(true);
jp.add(a);
jp.add(r);
add(jp,BorderLayout.SOUTH);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
repaint();
}
});
}
public void paint(Graphics g)
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
g.fillRect(i*100, j*100, 100, 100);
}
}
}
}
有人可以幫我解決這個問題嗎?
為JPanel
重寫getPreferredSize
,然后調用JFrame.pack()
而不是任何大小調整
不要設置PreferredSize
不要為JFrame
覆蓋paint
,為(另一個,單獨的) JPanel
覆蓋paintComponent
,將此JPanel
放在JFrames CENTER area
。
。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BoardGUI extends JFrame {
private JButton a = new JButton("Undo");
private JButton r = new JButton("replay");
private JPanel jp = new JPanel();
public BoardGUI() {
setTitle("Checkers Game");
jp.setLayout(new FlowLayout());
jp = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(new Dimension(645, 35));
}
/* @Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//
}*/
};
jp.add(a);
jp.add(r);
add(jp, BorderLayout.SOUTH);
pack();
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new BoardGUI();
}
});
}
}
您有一個645 x 700 JFrame,在其上繪制了800 x 800棋盤格。 可能是覆蓋了按鈕。
將棋盤格放置在其自己的JPanel中,並僅在該面板內繪制。 將該面板放在JFrame的中心。
不使用:
a.setVisible(true);
r.setVisible(true);
無需使用它。 使用setVisible(true)使框架可見時,將繪制所有組件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.