public void createDisplay(){
frame = new JFrame();
frame.setTitle(title);
frame.setSize(new Dimension(width, height));
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setPreferredSize(new Dimension(width, height));
this.setMaximumSize(new Dimension(width, height));
this.setMinimumSize(new Dimension(width, height));
this.setLayout(null); //have tried default and BorderLayout
this.setSize(new Dimension(width, height));
this.setBounds(0, 0, width, height);
//basically trying everything
frame.add(this);
frame.pack();
}
但是,我的程序稍后尝试将一个新的JPanel添加到类的扩展JPanel中,方法是:
public void gameOverWindow(){ ;
JPanel panel = new JPanel(new BorderLayout());
panel.setPreferredSize(new Dimension(200, 100));
JLabel label = new JLabel("Game Over");
label.setPreferredSize(new Dimension(40, 15));
//trying setPosition also doesn't work with BorderLayout or FlowLayout
JButton button_01 = new JButton("new");
button_01.setPreferredSize(new Dimension(100, 10));
JButton button_02 = new JButton("exit");
button_02.setPreferredSize(new Dimension(100, 10));
panel.add(label, BorderLayout.NORTH);
panel.add(button_01, BorderLayout.WEST);
panel.add(button_02, BorderLayout.EAST);
this.add(panel);
this.revalidate();
}
这个新的JPanel以正确的BorderLayout格式显示内容,但是JPanel本身将保持在扩展JPanel的顶部中心,我知道这是因为默认布局设置为FlowLayout,但是将其设置为BorderLayout只会导致面板占用整个屏幕。将布局设置为null将完全破坏框架,除了框架的最小化和关闭按钮之外,什么也没有出现。试图设置这个JPanel的位置或边界也不适用于任何布局。我在网上读过很多其他关于这个的帖子,但它们似乎都不同,变得令人困惑,我如何控制我的新JPanel的位置?
通常,我建议使用CardLayout
在不同视图之间切换,但很难从可用的信息中确定这是否有帮助
相反,您可以使用复合布局。也就是说,使用不同的布局将一个容器包装在另一个容器中。
在本例中,我简单地使用了BorderLayout
和GridBagLayout
的组合
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new BorderLayout());
JButton gameOver = new JButton("Game over man");
gameOver.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JLabel("Game Over Man", JLabel.CENTER), BorderLayout.NORTH);
panel.add(new JButton("New"), BorderLayout.WEST);
panel.add(new JButton("Exit"), BorderLayout.EAST);
removeAll();
JPanel inner = new JPanel(new GridBagLayout());
inner.add(panel);
add(inner);
revalidate();
repaint();
}
});
JPanel inner = new JPanel(new GridBagLayout());
inner.add(gameOver);
add(inner);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
然后,我想在里面弹出一个小的Jpanel并且不引人注目
您可以使用框架的glasspane
或使用overlayLayout
例如:
我似乎无法为JPanel设置按钮的自定义位置。它总是在左上角添加按钮,然后继续向右。我还有一个背景图像,这让事情变得更加困难。框架如下所示:imageshack.com/a/img838/3240/ez6l.png我的代码是: 我想将按钮“MusicButton”添加到右下角/中间/或左侧。如果您可以在JPanel中定制JButton,请分享。谢谢
问题内容: 我将JPanel包裹在JScrollPane中,我希望始终将矩形绘制在同一位置上=使用滚动条移动不会影响矩形的可见性。 我尝试了以下代码: 但是仅当更改整个JPanel的大小时才重新绘制矩形。 问题答案: IIRC 将尝试最大程度地减少滚动完成时的重绘次数,因此它不会总是导致组件被更新。 标准技术是使用。将您添加到下层,并在其上面添加不透明的玻璃面板组件。请参阅Swing教程中的如何使
Java自定义拖放--对TransferHandler没有回调。 我想为JPanel子类实现自定义拖放功能。I遵循标准DnD教程的指导方针: 拖放和数据传输 从表面上看,事情似乎很进步,但当我实际尝试时,我没有得到任何迹象表明任何DnD行为正在发生。事实上,没有调用我的TransferHandler中的任何方法。 所以,让我们回顾一下我所做的... 我创建了自己的容器类,它声明自己来扩展JPane
我需要一个帮助来定位一个JPanel在一个特定的位置到一个Jframe。 我在一个扩展JFrame的类中有一个JPanel,我需要将这个JPanel放在一个特定的x,y位置。 是这样的: 我不需要一个LayoutManager的位置的JPanel,因为我需要把JPanel在一个特定的位置(像150,150的例子)。但是如果我panel.set位置(150,150),就像上面的代码一样,什么都不会发
我想将包含send按钮和textfield(现在使用flowlayout)的JPanel放置在JTextArea(白色区域)的底部。我怎样才能做到这一点?
我已经创建了一个JFrame包含2。我已经在panel1中添加了panel2。panel1.add(panel2); 我在面板2中添加了一个文本区域。 最后panel1到getContentPane 现在我得到了textarea的位置 textarea.get位置(); 我创建了一个保存按钮,用于保存textarea(x,y)值。我使用xml存储(x,y)值。 现在,当我关闭并重新打开jar文件时