java swing最小化和扩展jPanel
这个程序是一个实验,使jPanel移动位置和大小,然后再次使用滑动(触摸屏)返回 这是一幅画面:在任何事情之前,在最小化之后,然后在最大化之后。 第一个和第三个应该相同,但不相同 对于我正在使用的代码,我看不出文本位置发生变化的原因,它只是文本,而不是其他 编辑:刚刚发现如果我最小化实际程序并将其最大化,面板将被更正,因此可能是绘图问题(因此我尝试了java swing最小化和扩展jPanel,java,swing,netbeans,jpanel,minimize,Java,Swing,Netbeans,Jpanel,Minimize,这个程序是一个实验,使jPanel移动位置和大小,然后再次使用滑动(触摸屏)返回 这是一幅画面:在任何事情之前,在最小化之后,然后在最大化之后。 第一个和第三个应该相同,但不相同 对于我正在使用的代码,我看不出文本位置发生变化的原因,它只是文本,而不是其他 编辑:刚刚发现如果我最小化实际程序并将其最大化,面板将被更正,因此可能是绘图问题(因此我尝试了repaint()),但没有产生任何影响。知道是什么导致了这一切吗 我的工作代码示例: import java.awt.Color; import
repaint()
),但没有产生任何影响。知道是什么导致了这一切吗
我的工作代码示例:
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JPanel;
public class TestExample extends javax.swing.JFrame {
public TestExample() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel3.setText("A Text Line");
jPanel1.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 0, -1, -1));
getContentPane().add(jPanel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 20, 90, 50));
jButton1.setText("Test");
jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jButton1MouseClicked(evt);
}
});
getContentPane().add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 20, -1, -1));
pack();
}
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
JPanel p = jPanel1;
int div = 5;
if(small == true) {//SWIPE LEFT
small = false;
p.setSize(dim);
for(Component c : p.getComponents()) {//maximize
c.setSize(dim);
c.setLocation(location.get(c));
}
p.setLocation(ploc);
} else if( small == false) {//SWIPE RIGHT
small = true;
ploc = p.getLocation();
dim = p.getSize();
for(Component c : p.getComponents()) {
location.put(c, c.getLocation());
}
for(int i = p.getWidth()/div;i<p.getWidth();i++) {//minimize X coordinate
Dimension d = new Dimension(p.getWidth()-i, p.getHeight());
p.setSize(d);
for(Component c : p.getComponents()) {
c.setSize(d);
}
}
for(int i = p.getHeight()/div;i<p.getHeight();i++) {//minimize Y coordinate
Dimension d = new Dimension(p.getWidth(), p.getHeight()-i);
p.setSize(d);
for(Component c : p.getComponents()) {
c.setSize(d);
}
}
for(int i = p.getX(); i < Toolkit.getDefaultToolkit().getScreenSize().getWidth(); i++)p.setLocation(i-p.getWidth(), p.getY());//move to left hand side
}
}
int previousX,previousY;
int xMouse,yMouse;
boolean small = false;
Dimension dim = null;
Map<Component,Point> location = new HashMap<>();
Point ploc = null;
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TestExample().setVisible(true);
}
});
}
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
}
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Dimension;
导入java.awt.Point;
导入java.awt.Toolkit;
导入java.util.HashMap;
导入java.util.Map;
导入javax.swing.JPanel;
公共类TestExample扩展了javax.swing.JFrame{
公共测试示例(){
初始化组件();
}
@抑制警告(“未选中”)
私有组件(){
jPanel1=newjavax.swing.JPanel();
jLabel3=newjavax.swing.JLabel();
jButton1=newjavax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
可设置大小(假);
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
setBorder(javax.swing.BorderFactory.createLineBorder(新java.awt.Color(0,0,0));
setLayout(neworg.netbeans.lib.awtextra.AbsoluteLayout());
jLabel3.setText(“文本行”);
add(jLabel3,neworg.netbeans.lib.awtextra.AbsoluteConstraints(20,0,-1,-1));
getContentPane().add(jPanel1,new org.netbeans.lib.awtextra.AbsoluteConstraints(120,20,90,50));
jButton1.setText(“测试”);
jButton1.addMouseListener(新java.awt.event.MouseAdapter(){
public void mouseClicked(java.awt.event.MouseEvent evt){
jButton1MouseClicked(evt);
}
});
getContentPane().add(jButton1,new org.netbeans.lib.awtextra.AbsoluteConstraints(20,20,-1,-1));
包装();
}
私有void jButton1MouseClicked(java.awt.event.MouseEvent evt){
JPanel p=jPanel1;
int div=5;
如果(small==true){//向左滑动
小=假;
p、 设置大小(dim);
对于(组件c:p.getComponents()){//最大化
c、 设置大小(dim);
c、 setLocation(location.get(c));
}
p、 定位(ploc);
}如果(small==false){//向右滑动
小=真;
ploc=p.getLocation();
dim=p.getSize();
对于(组件c:p.getComponents()){
location.put(c,c.getLocation());
}
对于(int i=p.getWidth()/div;i编写一个布局管理器并定义组件的约束要更快地获得更好的帮助,请发布一个(最小的完整测试和可读示例)@MadProgrammer因为它是使用netbean的gui生成器制作的,所以布局管理器被设置为绝对布局。一旦我得到了原始版本的约束,我该如何重用它们来将面板更改回原始状态?您可以更改NetBeans使用的布局管理器,我建议您自己制作,以实现您试图实现的目标,否则,每次容器失效和验证时,当前安装的布局管理器都会放弃您所做的一切